This commit is contained in:
MMS 2025-01-18 18:33:14 -05:00
parent 12c924a156
commit 6d29ea6699
119 changed files with 3230 additions and 12461 deletions

View File

@ -7,7 +7,7 @@ licenses designed for licensees interested in retaining the proprietary
status of their code.
The Quantum Leaps commercial licenses expressly supersede the GPL open source
license. This means that when you license the QP/C or QP/C++ Real-Time
license. This means that when you license the QP/C or QP/C++ Real-Time
Embedded Frameworks under a Quantum Leaps commercial license, you specifically
do not use the software under the open source license and therefore you are
not subject to any of its terms.
@ -15,8 +15,8 @@ not subject to any of its terms.
Quantum Leaps commercial licensing options are described below:
Single Product License
----------------------
SPDX-License-Identifier: LicenseRef-QL-Single-Product
-----------------------------------------------------
Single Product License allows a given company ("Licensee") to embed the
specified type(s) of the QP Real-Time Embedded Framework(s) into one end-
product of the Licensee (Single Product). Licensee can distribute/sell an
@ -33,8 +33,8 @@ Volume discounts are offered if several Single Products are licensed at once
with one license agreement.
Product Line License
--------------------
SPDX-License-Identifier: LicenseRef-QL-Product-Line
---------------------------------------------------
Product Line License allows a given company ("Licensee") to embed the
specified type(s) of the QP Real-Time Embedded Framework(s) into any number
of end-products within a family of related products (Product Line). Licensee
@ -44,8 +44,8 @@ Product Line. Product Line License applies to all end-products that do
similar functions within the same Product Line.
Any-Product License
-------------------
SPDX-License-Identifier: LicenseRef-QL-Any-Product
--------------------------------------------------
Any-Product License allows a given company ("Licensee") to embed the
specified type(s) of the QP Real-Time Embedded Framework(s) into any end-
product of that company. The Licensee can distribute/sell an unlimited number
@ -53,8 +53,8 @@ of the products containing the licensed QP framework type(s) (royalty-free
licensing).
Site License
------------
SPDX-License-Identifier: LicenseRef-QL-Site
-------------------------------------------
Site-License allows a given company ("Licensee") to embed the specified
type(s) of the QP Real-Time Embedded Framework(s) into any end-customer
product, as long as the products are designed at a given physical location
@ -64,8 +64,8 @@ designed for development contractors and consultants, who develop embedded
software for other companies.
OEM License
-----------
SPDX-License-Identifier: LicenseRef-QL-OEM
------------------------------------------
OEM License allows a given company ("Licensee") to embed the specified
type(s) of the QP Real-Time Embedded Framework(s) in any product of that
company (Original Equipment Manufacturer) and gives limited sublicensing
@ -74,14 +74,12 @@ affiliates. OEM licenses are customizable to match exactly the specific
licensing needs of a given Licensee.
Education License
-----------------
Education License allows a given accredited educational institution
("Licensee") to use and embed the specified type(s) of the QP Real-Time
Embedded Framework(s) in any project completed at that educational
institution. To be eligible for this license, the institution must be
focused mainly on teaching students. The Education Licenses are free
and will be granted liberally upon request.
SPDX-License-Identifier: LicenseRef-QL-Eval
-------------------------------------------
Evaluation License allows a specific company ("Licensee") to temporarily
use the specified type(s) of the QP Real-Time Embedded Framework(s) for
in-house evaluation. This license expressly prohibits any distribution
of the licensed QP software.
****

View File

@ -1,6 +1,7 @@
public
qpc
2025-12-31
Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
Q u a n t u m L e a P s
@ -9,9 +10,9 @@ Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
The QP/C software is dual-licensed under the terms of the open-source GNU
General Public License (GPL) or under the terms of one of the closed-
source Quantum Leaps commercial licenses.
This software is dual-licensed under the terms of the open-source GNU
General Public License (GPL) or, alternatively under the terms of one of
the closed-source Quantum Leaps commercial licenses.
Redistributions in source code must retain this top-level comment block.
Plagiarizing this software to sidestep the license obligations is illegal.
@ -25,4 +26,4 @@ closed-source distribution.
Quantum Leaps contact information:
<www.state-machine.com/licensing>
<info@state-machine.com>
#2BACD81DCE8ED122C193E4F48A14170D660DFF1E
#1671FF5623AF7CA93973FA6EC044A008F7F65702

122
README.md
View File

@ -16,6 +16,39 @@ git clone https://github.com/QuantumLeaps/qpc --recurse-submodules --depth 1
Alternatively, you can also download one of the stable
[QP/C Releases][QP-Rel].
# About QP/C Real-Time Embedded Framework
QP/C real-time embedded framework (RTEF) is a lightweight implementation of
the [Active Object (a.k.a. Actor) model of computation][AOmod] specifically
tailored for deeply embedded real-time systems, such as microcontrollers (MCUs).
QP/C is both a software infrastructure for building applications consisting
of Active Objects (Actors) and a runtime environment for executing the Active
Objects in a deterministic, real-time fashion. Additionally, QP/C Framework
supports Hierarchical State Machines with which to specify the behavior of
Active Objects [UML 2.5], [Sutter:10], [ROOM:94]. The QP/C Framework can be
viewed as a modern, asynchronous, and truly event driven real-time operating
system (RTOS).
## QP Framework Family
QP/C framework is part of the larger QP family consisting of the following
QP editions:
|QP Edition | Language | API | Safety Functions |Certification Artifacts| Licensing
|:----------|:-----------:|:-----------------|:-------------------|:----------------|:---------
| QP/C | C (C11) |same as SafeQP/C |Selected Assertions |Req/Arch/Design | [dual][Lic]
| SafeQP/C | C (C11) |same as QP/C |All Safety Functions|Certification Kit| [commercial][Com]
| QP/C++ | C++ (C++17) |same as SafeQP/C++|Selected Assertions |Req/Arch/Design | [dual][Lic]
| SafeQP/C++| C++ (C++17) |same as QP/C++ |All Safety Functions|Certification Kit| [commercial][Com]
[The documentation](#documentation) of all QP editions includes the
[Requirements][SRS], [Architecture][SAS], and [Design Specifications][SDS],
which are the best source of information about the underlying concepts,
functionality, architecture, and design of the QP Frameworks and the QP
Applications based on the frameworks.
> **NOTE:** The **SafeQP** frameworks additionally contain **Safety Functions**
required to achieve the higher safety integrity levels and come with much more
extensive [Certification Kits][Cert].
# Getting Started with QP/C
The most recommended way of obtaining QP/C is by downloading the
@ -25,7 +58,7 @@ The main advantage of obtaining QP/C bundled together like that is
that you get all components, tools and examples ready to go.
### Getting Started Resources
- ["QP/C Tutorial"][Tutorial]
- ["QP/C Tutorial"][Tut]
describes a series of progressively advanced QP/C example applications.
- [Video: "Getting Started with QP Real-Time Embedded Frameworks"][Video]
@ -67,69 +100,11 @@ have been **removed from the open-source GPL distribution**:
the active Support Term. Please contact [Quantum Leaps technical support][Sup]
to get the complete QP/C framework distribution.
> NOTE: To request **evaluation** of the complete QP/C framework, please contact
> **NOTE:** To request **evaluation** of the complete QP/C framework, please contact
Quantum Leaps at: https://www.state-machine.com/contact
# About QP/C
QP/C (Quantum Platform in C) is a lightweight, open source
[Real-Time Embedded Framework (RTEF)][RTEF] for building modern embedded
software as systems of asynchronous, event-driven [Active Objects][Active]
(actors). The [QP/C] framework is a member of a [QP] family consisting of
[QP/C] and [QP/C++] frameworks, which are strictly quality controlled,
thoroughly documented, and [commercially licensable][Lic].
## Safer Model of Concurrency
The [QP] framework family implements the
[Active Object model of computation][AO_model], which is **inherently safer**
than the traditional "shared state concurrency" based on explicit mutual
exclusion and managing RTOS threads by blocking. The Active Object model
supports and automatically enforces the following best practices
of concurrent programming:
- Keep data isolated and bound to Active Objects' threads. Threads should
hide (**encapsulate**) their private data and other resources, and not
share them with the rest of the system.
- Communicate among Active Object threads **asynchronously** via [Event
objects][Event]. Using asynchronous events keeps the threads running truly
independently, **without blocking** on each other.
- Active Object threads should spend their lifetime responding to incoming
events, so their mainline should consist of an **event-loop** that handles
events one at a time (to completion), thus avoiding any concurrency hazards
within an Active Object thread itself.
This architecture also provides higher level of abstraction and the *correct*
abstractions to effectively apply [Hierarchical State Machines][HSM],
**modeling** and **code generation** to deeply embedded real-time systems.
## Hierarchical State Machines
The behavior of Active Objects is specified in QP/C by means of
[Hierarchical State Machines][HSM] (UML statecharts). The framework
supports manual coding of UML state machines in C as well as automatic
**code generation** by means of the free [QM modeling tool][QM].
## Built-in Real-Time Kernels
The QP/C framework can run on standalone on single-chip microcontrollers,
without any traditional RTOS. The framework contains a selection of
**built-in real-time kernels**, such as the [non-preemptive QV kernel][QV],
the [preemptive non-blocking QK kernel][QK], and the preemptive,
[dual-mode QXK kernel][QXK] that provides all the features you might expect
from a traditional RTOS. Native QP ports and ready-to-use examples are provided
for major CPUs, such as ARM Cortex-M (M0/M0+/M3/M4/M7/M23/M33/...).
## Traditional RTOS/OS
QP/C can also work with a traditional RTOS, such as ThreadX, embOS, FreeRTOS,
uC/OS-II and Zephyr, as well as with (embedded) Linux (POSIX) and Windows.
## Popularity and Maturity
With 20 years of continuous development, [400+ commercial licensees][Cust],
and many times more open source users worldwide, the QP frameworks are the
most popular such offering on the market. They power countless electronic
products ranging from implantable medical devices to complex weapon systems.
# QP/C Documentation
# Documentation
The online HTML documentation for the **latest** version of QP/C is located
at: https://www.state-machine.com/qpc
@ -159,20 +134,25 @@ If you like this project, please give it a star (in the upper-right corner of yo
[QP]: <https://www.state-machine.com/products/qp>
[QP/C]: <https://github.com/QuantumLeaps/qpc>
[QP/C++]: <https://github.com/QuantumLeaps/qpcpp>
[QS/C]: <https://www.state-machine.com/qpc/srs-qp_qs.html>
[QV]: <https://www.state-machine.com/qpc/srs-qp_qv.html>
[QK]: <https://www.state-machine.com/qpc/srs-qp_qk.html>
[QXK]: <https://www.state-machine.com/qpc/srs-qp_qxk.html>
[Cert]: <https://www.state-machine.com/products/qp#CERT>
[QM]: <https://github.com/QuantumLeaps/qm>
[QTools]: <https://github.com/QuantumLeaps/qtools>
[QP-Rel]: <https://github.com/QuantumLeaps/qpc/releases>
[Active]: <https://www.state-machine.com/qpc/srs-qp_ao.html>
[AO_model]: <https://www.state-machine.com/qpc/srs-qp_ao.html#srs-qp_ao-model>
[Event]: <https://www.state-machine.com/qpc/srs-qp_evt.html>
[HSM]: <https://www.state-machine.com/qpc/srs-qp_sm.html>
[Lic]: <https://www.state-machine.com/licensing>
[Com]: <https://www.state-machine.com/licensing#Commercial>
[Cust]: <https://www.state-machine.com/customers>
[Sup]: <mailto:support@state-machine.com>
[AN]: <https://www.state-machine.com/doc/AN_Getting_Started_with_QP.pdf>
[Tutorial]: <https://www.state-machine.com/qpc/gs_tut.html>
[Video]: <https://youtu.be/O7ER6_VqIH0>
[QS]: <https://www.state-machine.com/qpc/srs-qp_qs.html>
[QV]: <https://www.state-machine.com/qpc/srs-qp_qv.html>
[QK]: <https://www.state-machine.com/qpc/srs-qp_qk.html>
[QXK]: <https://www.state-machine.com/qpc/srs-qp_qxk.html>
[SRS]: <https://www.state-machine.com/qpc/srs-qp.html>
[SAS]: <https://www.state-machine.com/qpc/sas-qp.html>
[SDS]: <https://www.state-machine.com/qpc/sds-qp.html>
[Active]: <https://www.state-machine.com/qpc/srs-qp_ao.html>
[AOmod]: <https://www.state-machine.com/qpc/srs-qp_ao.html#srs-qp_ao-model>
[Event]: <https://www.state-machine.com/qpc/srs-qp_evt.html>
[HSM]: <https://www.state-machine.com/qpc/srs-qp_sm.html>
[QP-Rel]: <https://github.com/QuantumLeaps/qpc/releases>
[Tut]: <https://www.state-machine.com/qpc/gs_tut.html>

@ -1 +1 @@
Subproject commit 81a03923724160d56faa0096823c941a3601d68e
Subproject commit db9e713786bebe246df77a664080ab7067021659

View File

@ -1,10 +1,6 @@
//$file${include::qequeue.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qequeue.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,8 +26,7 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qequeue.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QEQUEUE_H_
#define QEQUEUE_H_
@ -44,69 +39,23 @@
#elif (QF_EQUEUE_CTR_SIZE == 2U)
typedef uint16_t QEQueueCtr;
#else
#error "QF_EQUEUE_CTR_SIZE defined incorrectly, expected 1U or 2U"
#error QF_EQUEUE_CTR_SIZE defined incorrectly, expected 1U or 2U
#endif
struct QEvt; // forward declartion
struct QEvt; // forward declaration
//$declare${QF::QEQueue} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QF::QEQueue} .............................................................
//============================================================================
//! @class QEQueue
typedef struct QEQueue {
// private:
//! @private @memberof QEQueue
struct QEvt const * volatile frontEvt;
//! @private @memberof QEQueue
struct QEvt const * * ring;
//! @private @memberof QEQueue
QEQueueCtr end;
//! @private @memberof QEQueue
QEQueueCtr volatile head;
//! @private @memberof QEQueue
QEQueueCtr volatile tail;
//! @private @memberof QEQueue
QEQueueCtr volatile nFree;
#ifndef Q_UNSAFE
//! @private @memberof QEQueue
uintptr_t frontEvt_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QEQueue
QEQueueCtr head_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QEQueue
QEQueueCtr tail_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QEQueue
QEQueueCtr nFree_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QEQueue
QEQueueCtr nMin;
#endif // ndef Q_UNSAFE
// type:
struct QEvt const * volatile frontEvt; //!< @private @memberof QEQueue
struct QEvt const * * ring; //!< @private @memberof QEQueue
QEQueueCtr end; //!< @private @memberof QEQueue
QEQueueCtr volatile head; //!< @private @memberof QEQueue
QEQueueCtr volatile tail; //!< @private @memberof QEQueue
QEQueueCtr volatile nFree; //!< @private @memberof QEQueue
QEQueueCtr nMin; //!< @private @memberof QEQueue
} QEQueue;
// dummy static member to force generating 'struct QEQueue {...}'
extern QEQueue * QEQueue_dummy;
// public:
//! @public @memberof QEQueue
void QEQueue_init(QEQueue * const me,
struct QEvt const * * const qSto,
@ -134,17 +83,12 @@ static inline QEQueueCtr QEQueue_getNFree(QEQueue const * const me) {
//! @public @memberof QEQueue
static inline QEQueueCtr QEQueue_getNMin(QEQueue const * const me) {
#ifndef Q_UNSAFE
return me->nMin;
#else
return 0U;
#endif
}
//! @public @memberof QEQueue
static inline bool QEQueue_isEmpty(QEQueue const * const me) {
return me->frontEvt == (struct QEvt *)0;
}
//$enddecl${QF::QEQueue} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif // QEQUEUE_H_

View File

@ -1,10 +1,6 @@
//$file${include::qk.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qk.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,114 +26,60 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qk.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QK_H_
#define QK_H_
//$declare${QK::QK} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QK::QK} ..................................................................
//============================================================================
//! @class QK
typedef struct QK {
//! @cond INTERNAL
uint8_t dummy;
//! @endcond
} QK;
//$enddecl${QK::QK} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QK::QSchedStatus} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QK::QSchedStatus} ........................................................
typedef uint_fast8_t QSchedStatus;
//$enddecl${QK::QSchedStatus} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QK::QK-base} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QK::QK-base::Attr} .......................................................
//============================================================================
//! @class QK_Attr
typedef struct {
// private:
//! @memberof QK_Attr
QPSet readySet;
//! @memberof QK_Attr
uint_fast8_t actPrio;
//! @memberof QK_Attr
uint_fast8_t nextPrio;
//! @memberof QK_Attr
uint_fast8_t actThre;
//! @memberof QK_Attr
uint_fast8_t lockCeil;
//! @memberof QK_Attr
uint_fast8_t intNest;
#ifndef Q_UNSAFE
//! @memberof QK_Attr
QPSet readySet_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @memberof QK_Attr
uint_fast8_t actPrio_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @memberof QK_Attr
uint_fast8_t nextPrio_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @memberof QK_Attr
uint_fast8_t actThre_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @memberof QK_Attr
uint_fast8_t lockCeil_dis;
#endif // ndef Q_UNSAFE
QPSet readySet; //!< @memberof QK_Attr
uint_fast8_t actPrio; //!< @memberof QK_Attr
uint_fast8_t nextPrio; //!< @memberof QK_Attr
uint_fast8_t actThre; //!< @memberof QK_Attr
uint_fast8_t lockCeil; //!< @memberof QK_Attr
uint_fast8_t intNest; //!< @memberof QK_Attr
} QK_Attr;
//${QK::QK-base::priv_} ......................................................
//! @static @private @memberof QK
extern QK_Attr QK_priv_;
//${QK::QK-base::schedLock} ..................................................
//! @static @public @memberof QK
QSchedStatus QK_schedLock(uint_fast8_t const ceiling);
//${QK::QK-base::schedUnlock} ................................................
//! @static @public @memberof QK
void QK_schedUnlock(QSchedStatus const prevCeil);
//${QK::QK-base::onIdle} .....................................................
//! @static @public @memberof QK
void QK_onIdle(void);
//${QK::QK-base::sched_} .....................................................
//! @static @private @memberof QK
uint_fast8_t QK_sched_(void);
//${QK::QK-base::activate_} ..................................................
//! @static @private @memberof QK
uint_fast8_t QK_sched_act_(
QActive const * const act,
uint_fast8_t const pthre_in);
//! @static @private @memberof QK
void QK_activate_(void);
//$enddecl${QK::QK-base} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//! @static @public @memberof QK
QSchedStatus QK_schedLock(uint_fast8_t const ceiling);
//! @static @public @memberof QK
void QK_schedUnlock(QSchedStatus const prevCeil);
//! @static @public @memberof QK
void QK_onIdle(void);
//============================================================================
// interface used only for internal implementation, but not in applications
#ifdef QP_IMPL
//$declare${QK-impl} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QK-impl::QF_SCHED_STAT_} .................................................
// scheduler locking for QK...
#define QF_SCHED_STAT_ QSchedStatus lockStat_;
//${QK-impl::QF_SCHED_LOCK_} .................................................
#define QF_SCHED_LOCK_(ceil_) do { \
if (QK_ISR_CONTEXT_()) { \
lockStat_ = 0xFFU; \
@ -146,31 +88,14 @@ void QK_activate_(void);
} \
} while (false)
//${QK-impl::QF_SCHED_UNLOCK_} ...............................................
#define QF_SCHED_UNLOCK_() do { \
if (lockStat_ != 0xFFU) { \
QK_schedUnlock(lockStat_); \
} \
} while (false)
//${QK-impl::QACTIVE_EQUEUE_WAIT_} ...........................................
// QActive event queue customization for QK...
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
//${QK-impl::QACTIVE_EQUEUE_SIGNAL_} .........................................
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) do { \
QPSet_insert(&QK_priv_.readySet, (uint_fast8_t)(me_)->prio); \
QPSet_update_(&QK_priv_.readySet, &QK_priv_.readySet_dis); \
if (!QK_ISR_CONTEXT_()) { \
if (QK_sched_() != 0U) { \
QK_activate_(); \
} \
} \
} while (false)
#endif // ndef Q_UNSAFE
//${QK-impl::QACTIVE_EQUEUE_SIGNAL_} .........................................
#ifdef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) do { \
QPSet_insert(&QK_priv_.readySet, (uint_fast8_t)(me_)->prio); \
if (!QK_ISR_CONTEXT_()) { \
@ -179,29 +104,16 @@ void QK_activate_(void);
} \
} \
} while (false)
#endif // def Q_UNSAFE
//$enddecl${QK-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QF_EPOOL-impl} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QF_EPOOL-impl::QF_EPOOL_TYPE_} ...........................................
// QF event pool customization for QK...
#define QF_EPOOL_TYPE_ QMPool
//${QF_EPOOL-impl::QF_EPOOL_INIT_} ...........................................
#define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
(QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
//${QF_EPOOL-impl::QF_EPOOL_EVENT_SIZE_} .....................................
#define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)
//${QF_EPOOL-impl::QF_EPOOL_GET_} ............................................
#define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
//${QF_EPOOL-impl::QF_EPOOL_PUT_} ............................................
#define QF_EPOOL_PUT_(p_, e_, qsId_) \
(QMPool_put(&(p_), (e_), (qsId_)))
//$enddecl${QF_EPOOL-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif // QP_IMPL

View File

@ -1,10 +1,6 @@
//$file${include::qmpool.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qmpool.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,8 +26,7 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qmpool.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QMPOOL_H_
#define QMPOOL_H_
@ -42,6 +37,11 @@
#define QF_MPOOL_CTR_SIZE 2U
#endif
#define QF_MPOOL_EL(evType_) struct { \
void * sto_[((sizeof(evType_) - 1U) / sizeof(void *)) + \
(sizeof(evType_) < (2U * sizeof(void *)) ? 2U : 1U)]; \
}
#if (QF_MPOOL_SIZ_SIZE == 1U)
typedef uint8_t QMPoolSize;
#elif (QF_MPOOL_SIZ_SIZE == 2U)
@ -49,7 +49,7 @@
#elif (QF_MPOOL_SIZ_SIZE == 4U)
typedef uint32_t QMPoolSize;
#else
#error "QF_MPOOL_SIZ_SIZE defined incorrectly, expected 1U, 2U, or 4U"
#error QF_MPOOL_SIZ_SIZE defined incorrectly, expected 1U, 2U, or 4U
#endif
#if (QF_MPOOL_CTR_SIZE == 1U)
@ -59,73 +59,21 @@
#elif (QF_MPOOL_CTR_SIZE == 4U)
typedef uint32_t QMPoolCtr;
#else
#error "QF_MPOOL_CTR_SIZE defined incorrectly, expected 1U, 2U, or 4U"
#error QF_MPOOL_CTR_SIZE defined incorrectly, expected 1U, 2U, or 4U
#endif
#define QF_MPOOL_EL(evType_) struct { \
QFreeBlock sto_[((sizeof(evType_) - 1U) / (2U * sizeof(void *))) + 1U]; \
}
//$declare${QF::QFreeBlock} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QF::QFreeBlock} ..........................................................
//! @struct QFreeBlock
typedef struct QFreeBlock {
// private:
//! @private @memberof QFreeBlock
struct QFreeBlock * next;
#ifndef Q_UNSAFE
//! @private @memberof QFreeBlock
uintptr_t next_dis;
#endif // ndef Q_UNSAFE
} QFreeBlock;
//$enddecl${QF::QFreeBlock} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QF::QMPool} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QF::QMPool} ..............................................................
//============================================================================
//! @class QMPool
typedef struct {
// private:
//! @private @memberof QMPool
QFreeBlock * start;
//! @private @memberof QMPool
QFreeBlock * end;
//! @private @memberof QMPool
QFreeBlock * volatile free_head;
//! @private @memberof QMPool
QMPoolSize blockSize;
//! @private @memberof QMPool
QMPoolCtr nTot;
//! @private @memberof QMPool
QMPoolCtr volatile nFree;
#ifndef Q_UNSAFE
//! @private @memberof QMPool
QMPoolCtr nMin;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QMPool
uintptr_t free_head_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @private @memberof QMPool
QMPoolCtr nFree_dis;
#endif // ndef Q_UNSAFE
void * * start; //!< @private @memberof QMPool
void * * end; //!< @private @memberof QMPool
void * * volatile freeHead; //!< @private @memberof QMPool
QMPoolSize blockSize; //!< @private @memberof QMPool
QMPoolCtr nTot; //!< @private @memberof QMPool
QMPoolCtr volatile nFree; //!< @private @memberof QMPool
QMPoolCtr nMin; //!< @private @memberof QMPool
} QMPool;
// public:
//! @public @memberof QMPool
void QMPool_init(QMPool * const me,
void * const poolSto,
@ -141,6 +89,5 @@ void * QMPool_get(QMPool * const me,
void QMPool_put(QMPool * const me,
void * const block,
uint_fast8_t const qsId);
//$enddecl${QF::QMPool} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif // QMPOOL_H_

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,6 @@
//$file${include::qp_pkg.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qp_pkg.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,68 +26,49 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qp_pkg.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QP_PKG_H_
#define QP_PKG_H_
//$declare${QF::QF-pkg} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//============================================================================
#define QACTIVE_CAST_(ptr_) ((QActive *)(ptr_))
#define Q_PTR2UINT_CAST_(ptr_) ((uintptr_t)(ptr_))
//${QF::QF-pkg::Attr} ........................................................
//! @class QF_Attr
//============================================================================
typedef struct {
// private:
#if (QF_MAX_EPOOL > 0U)
//! @private @memberof QF_Attr
QF_EPOOL_TYPE_ ePool_[QF_MAX_EPOOL];
#endif // (QF_MAX_EPOOL > 0U)
#if (QF_MAX_EPOOL > 0U)
//! @private @memberof QF_Attr
uint_fast8_t maxPool_;
#endif // (QF_MAX_EPOOL > 0U)
#if (QF_MAX_EPOOL == 0U)
//! @private @memberof QF_Attr
uint8_t dummy;
QF_EPOOL_TYPE_ ePool_[QF_MAX_EPOOL]; //!< @private @memberof QF_Attr
uint_fast8_t maxPool_; //!< @private @memberof QF_Attr
#else
uint8_t dummy; //!< @private @memberof QF_Attr
#endif // (QF_MAX_EPOOL == 0U)
} QF_Attr;
//${QF::QF-pkg::priv_} .......................................................
//! @static @private @memberof QF
extern QF_Attr QF_priv_;
extern QF_Attr QF_priv_; //!< @static @private @memberof QF
//${QF::QF-pkg::bzero_} ......................................................
//! @static @private @memberof QF
void QF_bzero_(
void * const start,
uint_fast16_t const len);
//$enddecl${QF::QF-pkg} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
// Bitmasks are for the QTimeEvt::flags attribute
#define QTE_FLAG_IS_LINKED (1U << 7U)
#define QTE_FLAG_WAS_DISARMED (1U << 6U)
//============================================================================
//! @private @memberof QEvt
static inline void QEvt_refCtr_inc_(QEvt const *me) {
uint8_t rc = me->refCtr_ + 1U;
static inline void QEvt_refCtr_inc_(QEvt const * const me) {
// NOTE: this function must be called inside a critical section
uint8_t const rc = me->refCtr_ + 1U;
((QEvt *)me)->refCtr_ = rc; // cast away 'const'
#ifndef Q_UNSAFE
((QEvt *)me)->evtTag_ = (me->evtTag_ & 0xF0U) | ((~rc) & 0x0FU);
#endif // ndef Q_UNSAFE
}
//! @private @memberof QEvt
static inline void QEvt_refCtr_dec_(QEvt const *me) {
uint8_t rc = me->refCtr_ - 1U;
static inline void QEvt_refCtr_dec_(QEvt const * const me) {
// NOTE: this function must be called inside a critical section
uint8_t const rc = me->refCtr_ - 1U;
((QEvt *)me)->refCtr_ = rc; // cast away 'const'
#ifndef Q_UNSAFE
((QEvt *)me)->evtTag_ = (me->evtTag_ & 0xF0U) | ((~rc) & 0x0FU);
#endif // ndef Q_UNSAFE
}
#define QACTIVE_CAST_(ptr_) ((QActive *)(ptr_))
#define Q_PTR2UINT_CAST_(ptr_) ((uintptr_t)(ptr_))
#endif // QP_PKG_H_

View File

@ -1,10 +1,6 @@
//$file${include::qpc.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qpc.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,8 +26,7 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qpc.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QPC_H_
#define QPC_H_
@ -141,6 +136,10 @@ static inline void QF_psInit(
//! @deprecated instead use: QASM_IS_IN()
#define QHsm_isIn(me_, state_) QASM_IS_IN((QAsm *)(me_), (state_))
#define QF_PUBLISH(e_, sender_) QACTIVE_PUBLISH((e_), (sender_))
#define QF_TICK_X(tickRate_, sender_) QTIMEEVT_TICK_X((tickRate_), (sender_))
#define QF_TICK(sender_) QTIMEEVT_TICK(sender_)
#endif // QP_API_VERSION < 800
#endif // QPC_H_

View File

@ -1,5 +1,6 @@
//============================================================================
// QP/C-Spy software tracing target-resident component
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -7,10 +8,9 @@
// ------------------------
// Modern Embedded Software
//
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -31,11 +31,11 @@
#define QS_DUMMY_H_
#ifdef Q_SPY
#error "Q_SPY must NOT be defined to include qs_dummy.h"
#error Q_SPY must NOT be defined to include qs_dummy.h
#endif
#ifdef Q_UTEST
#error "Q_UTEST must NOT be defined to include qs_dummy.h"
#error Q_UTEST must NOT be defined to include qs_dummy.h
#endif
#define QS_INIT(arg_) ((uint8_t)1U)
@ -158,9 +158,6 @@ void QS_onTestLoop(void);
#define QS_CRIT_ENTRY() ((void)0)
#define QS_CRIT_EXIT() ((void)0)
#define QS_MEM_SYS() ((void)0)
#define QS_MEM_APP() ((void)0)
#define QS_TR_CRIT_ENTRY() ((void)0)
#define QS_TR_CRIT_EXIT() ((void)0)
#define QS_TR_ISR_ENTRY(isrnest_, prio_) ((void)0)

View File

@ -1,10 +1,6 @@
//$file${include::qsafe.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qsafe.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// SafeQP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -12,63 +8,51 @@
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qsafe.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QSAFE_H_
#define QSAFE_H_
#ifdef __cplusplus
extern "C" {
#endif
// QF-FuSa enabled ===========================================================
#ifndef Q_UNSAFE
#ifndef QF_CRIT_STAT
#define QF_CRIT_STAT
#define QF_CRIT_STAT
#endif
#ifndef QF_CRIT_ENTRY
#define QF_CRIT_ENTRY() ((void)0)
#define QF_CRIT_ENTRY() ((void)0)
#endif
#ifndef QF_CRIT_EXIT
#define QF_CRIT_EXIT() ((void)0)
#define QF_CRIT_EXIT() ((void)0)
#endif
//$declare${QP-FuSa::enabled} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QP-FuSa::enabled::Q_DEFINE_THIS_MODULE} ..................................
#define Q_DEFINE_THIS_MODULE(name_) \
static char const Q_this_module_[] = name_;
//${QP-FuSa::enabled::Q_ASSERT_INCRIT} .......................................
#define Q_ASSERT_INCRIT(id_, expr_) \
#define Q_ASSERT_INCRIT(id_, expr_) \
((expr_) ? ((void)0) : Q_onError(&Q_this_module_[0], (id_)))
//${QP-FuSa::enabled::Q_ERROR_INCRIT} ........................................
#define Q_ERROR_INCRIT(id_) \
#define Q_ERROR_INCRIT(id_) \
(Q_onError(&Q_this_module_[0], (id_)))
//${QP-FuSa::enabled::Q_ASSERT_ID} ...........................................
#define Q_ASSERT_ID(id_, expr_) do { \
QF_CRIT_STAT \
QF_CRIT_ENTRY(); \
@ -76,99 +60,64 @@ extern "C" {
QF_CRIT_EXIT(); \
} while (false)
//${QP-FuSa::enabled::Q_ERROR_ID} ............................................
#define Q_ERROR_ID(id_) do { \
QF_CRIT_STAT \
QF_CRIT_ENTRY(); \
Q_onError(&Q_this_module_[0], (id_)); \
QF_CRIT_EXIT(); \
} while (false)
//$enddecl${QP-FuSa::enabled} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// QF-FuSa disabled ==========================================================
#else
//$declare${QP-FuSa::disabled} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QP-FuSa::disabled::Q_DEFINE_THIS_MODULE} .................................
#define Q_DEFINE_THIS_MODULE(name_)
//${QP-FuSa::disabled::Q_ASSERT_INCRIT} ......................................
#define Q_ASSERT_INCRIT(id_, expr_) ((void)0)
//${QP-FuSa::disabled::Q_ERROR_INCRIT} .......................................
#define Q_ERROR_INCRIT(id_) ((void)0)
//${QP-FuSa::disabled::Q_ASSERT_ID} ..........................................
#define Q_ASSERT_ID(id_, expr_) ((void)0)
//${QP-FuSa::disabled::Q_ERROR_ID} ...........................................
#define Q_ERROR_ID(id_) ((void)0)
//$enddecl${QP-FuSa::disabled} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif
#endif // QF-FuSa disabled
//============================================================================
//$declare1${QP-FuSa} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QP-FuSa::Q_DEFINE_THIS_FILE} .............................................
#define Q_DEFINE_THIS_FILE Q_DEFINE_THIS_MODULE(__FILE__)
//${QP-FuSa::Q_ASSERT} .......................................................
#define Q_ASSERT(expr_) Q_ASSERT_ID(__LINE__, (expr_))
//${QP-FuSa::Q_ERROR} ........................................................
#define Q_ERROR() Q_ERROR_ID(__LINE__)
//${QP-FuSa::Q_REQUIRE_ID} ...................................................
#define Q_REQUIRE_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
//${QP-FuSa::Q_REQUIRE} ......................................................
#define Q_REQUIRE(expr_) Q_ASSERT(expr_)
//${QP-FuSa::Q_REQUIRE_INCRIT} ...............................................
#define Q_REQUIRE_INCRIT(id_, expr_) Q_ASSERT_INCRIT((id_), (expr_))
//${QP-FuSa::Q_ENSURE_ID} ....................................................
#define Q_ENSURE_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
//${QP-FuSa::Q_ENSURE} .......................................................
#define Q_ENSURE(expr_) Q_ASSERT(expr_)
//${QP-FuSa::Q_ENSURE_INCRIT} ................................................
#define Q_ENSURE_INCRIT(id_, expr_) Q_ASSERT_INCRIT((id_), (expr_))
//${QP-FuSa::Q_INVARIANT_ID} .................................................
#define Q_INVARIANT_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
//${QP-FuSa::Q_INVARIANT} ....................................................
#define Q_INVARIANT(expr_) Q_ASSERT(expr_)
//${QP-FuSa::Q_INVARIANT_INCRIT} .............................................
#define Q_DEFINE_THIS_FILE Q_DEFINE_THIS_MODULE(__FILE__)
#define Q_ASSERT(expr_) Q_ASSERT_ID(__LINE__, (expr_))
#define Q_ERROR() Q_ERROR_ID(__LINE__)
#define Q_REQUIRE_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
#define Q_REQUIRE(expr_) Q_ASSERT(expr_)
#define Q_REQUIRE_INCRIT(id_, expr_) Q_ASSERT_INCRIT((id_), (expr_))
#define Q_ENSURE_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
#define Q_ENSURE(expr_) Q_ASSERT(expr_)
#define Q_ENSURE_INCRIT(id_, expr_) Q_ASSERT_INCRIT((id_), (expr_))
#define Q_INVARIANT_ID(id_, expr_) Q_ASSERT_ID((id_), (expr_))
#define Q_INVARIANT(expr_) Q_ASSERT(expr_)
#define Q_INVARIANT_INCRIT(id_, expr_) Q_ASSERT_INCRIT((id_), (expr_))
//${QP-FuSa::Q_ASSERT_STATIC} ................................................
#define Q_ASSERT_STATIC(expr_) extern char Q_static_assert_[(expr_) ? 1 : -1]
#ifndef Q_ASSERT_STATIC
#define Q_ASSERT_STATIC(expr_) extern char Q_static_assert_[(expr_) ? 1 : -1]
#endif // ndef Q_ASSERT_STATIC
//${QP-FuSa::Q_NORETURN} .....................................................
#ifndef Q_NORETURN
#define Q_NORETURN _Noreturn void
#define Q_NORETURN _Noreturn void
#endif // ndef Q_NORETURN
//${QP-FuSa::int_t} ..........................................................
// Is this header file used outside QP?
#ifndef QP_VERSION
typedef int int_t;
#define Q_DIM(array_) (sizeof(array_) / sizeof((array_)[0U]))
#endif // ndef QP_VERSION
//============================================================================
#ifdef __cplusplus
extern "C" {
#endif
#ifndef QP_VERSION
typedef int int_t;
#endif // ndef QP_VERSION
//${QP-FuSa::Q_onError} ......................................................
Q_NORETURN Q_onError(
char const * const module,
int_t const id);
//${QP-FuSa::Q_DIM} ..........................................................
#ifndef QP_VERSION
#define Q_DIM(array_) (sizeof(array_) / sizeof((array_)[0U]))
#endif // ndef QP_VERSION
//$enddecl${QP-FuSa} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#ifdef __cplusplus
}
#endif

View File

@ -1,10 +1,6 @@
//$file${include::qstamp.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qstamp.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,8 +26,7 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qstamp.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QSTAMP_H_
#define QSTAMP_H_

View File

@ -1,10 +1,6 @@
//$file${include::qv.h} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: qpc.qm
// File: ${include::qv.h}
//
// This code has been generated by QM 7.0.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
@ -14,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -30,115 +26,59 @@
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${include::qv.h} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
#ifndef QV_H_
#define QV_H_
//$declare${QV::QV} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QV::QV} ..................................................................
//============================================================================
//! @class QV
typedef struct QV {
//! @cond INTERNAL
uint8_t dummy;
//! @endcond
} QV;
//$enddecl${QV::QV} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QV::QV-base} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QV::QV-base::Attr} .......................................................
//============================================================================
//! @class QV_Attr
typedef struct {
// private:
//! @memberof QV_Attr
QPSet readySet;
//! @memberof QV_Attr
uint_fast8_t schedCeil;
#ifndef Q_UNSAFE
//! @memberof QV_Attr
QPSet readySet_dis;
#endif // ndef Q_UNSAFE
#ifndef Q_UNSAFE
//! @memberof QV_Attr
uint_fast8_t schedCeil_dis;
#endif // ndef Q_UNSAFE
QPSet readySet; //!< @private @memberof QV_Attr
uint_fast8_t schedCeil; //!< @private @memberof QV_Attr
} QV_Attr;
//${QV::QV-base::priv_} ......................................................
//! @static @private @memberof QV
extern QV_Attr QV_priv_;
//${QV::QV-base::schedDisable} ...............................................
//! @static @public @memberof QV
void QV_schedDisable(uint_fast8_t const ceiling);
//${QV::QV-base::schedEnable} ................................................
//! @static @public @memberof QV
void QV_schedEnable(void);
//${QV::QV-base::onIdle} .....................................................
//! @static @public @memberof QV
void QV_onIdle(void);
//$enddecl${QV::QV-base} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//============================================================================
// interface used only for internal implementation, but not in applications
#ifdef QP_IMPL
//$declare${QV-impl} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QV-impl::QF_SCHED_STAT_} .................................................
// scheduler locking for QV (not needed)...
#define QF_SCHED_STAT_
//${QV-impl::QF_SCHED_LOCK_} .................................................
#define QF_SCHED_LOCK_(dummy) ((void)0)
#define QF_SCHED_UNLOCK_() ((void)0)
//${QV-impl::QF_SCHED_UNLOCK_} ...............................................
#define QF_SCHED_UNLOCK_() ((void)0)
//${QV-impl::QACTIVE_EQUEUE_WAIT_} ...........................................
// QActive event queue customization for QV...
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
//${QV-impl::QACTIVE_EQUEUE_SIGNAL_} .........................................
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QV_priv_.readySet, (uint_fast8_t)(me_)->prio); \
QPSet_update_(&QV_priv_.readySet, &QV_priv_.readySet_dis)
#endif // ndef Q_UNSAFE
//${QV-impl::QACTIVE_EQUEUE_SIGNAL_} .........................................
#ifdef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QV_priv_.readySet, (uint_fast8_t)(me_)->prio)
#endif // def Q_UNSAFE
//$enddecl${QV-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$declare${QF_EPOOL-impl} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//${QF_EPOOL-impl::QF_EPOOL_TYPE_} ...........................................
// QF event pool customization for QV...
#define QF_EPOOL_TYPE_ QMPool
//${QF_EPOOL-impl::QF_EPOOL_INIT_} ...........................................
#define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
(QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
//${QF_EPOOL-impl::QF_EPOOL_EVENT_SIZE_} .....................................
#define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)
//${QF_EPOOL-impl::QF_EPOOL_GET_} ............................................
#define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
//${QF_EPOOL-impl::QF_EPOOL_PUT_} ............................................
#define QF_EPOOL_PUT_(p_, e_, qsId_) \
(QMPool_put(&(p_), (e_), (qsId_)))
//$enddecl${QF_EPOOL-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#define QF_EPOOL_PUT_(p_, e_, qsId_) (QMPool_put(&(p_), (e_), (qsId_)))
#endif // QP_IMPL

View File

@ -1,15 +1,16 @@
//============================================================================
// QP configuration file (QV/QK/QXK on ARM Cortex-M)
// QP/C configuration file (QV/QK/QXK on ARM Cortex-M)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
@ -35,9 +35,9 @@
// <o>QP API compatibility version (QP_API_VERSION)
// <0=> 0 (Maximum compatibility)
// <691=>691 (QP 6.9.1 or newer)
// <734=>7.3.4 (QP 7.3.4 or newer)
// <750=>750 (QP 7.5.0 or newer)
// <9999=>9999 (Latest only)
// <i>QP API backwards compatibility with the QP/C API version.
// <i>QP API backwards compatibility with the QP API version.
// <i>Lower QP_API_VERSION values enable backwards compatibility
// <i>with lower (older) QP API versions.
// <i>For example, QP_API_VERSION==691 will enable the compatibility
@ -185,7 +185,7 @@
// </c>
// <c2>Enable memory isolation (QF_MEM_ISOLATE)
// <i>Memory isolation (requires MPU)
// <i>Memory isolation (supported in SafeQP only, requires MPU)
// <i>NOTE: implies QF_ON_CONTEXT_SW.
//#define QF_MEM_ISOLATE
// </c>
@ -195,11 +195,13 @@
//..........................................................................
// <h>QV/QK/QXK built-in kernels (ARM Cortex-M)
#if (__ARM_ARCH > 6)
// <c2>Kernel uses critical section based on BASEPRI (QF_USE_BASEPRI)
// <i>If not selected, critical section will be based on PRIMASK
// <i>NOTE: The BASEPRI threshold can be adjusted in the "Text Editor" mode.
//#define QF_USE_BASEPRI 0x3F
// </c>
#endif // (__ARM_ARCH > 6)
// <c2>QK Kernel uses IRQ for return-from-preemption
// <i>NOTE: Use "editor mode" to edit QK_USE_IRQ_NUM

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,14 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -16,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>

View File

@ -1,15 +1,16 @@
//============================================================================
// QP configuration file (QV/QK/QXK on ARM Cortex-R)
// QP/C configuration file (QV/QK/QXK on ARM Cortex-R)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
@ -37,7 +37,7 @@
// <691=>691 (QP 6.9.1 or newer)
// <734=>7.3.4 (QP 7.3.4 or newer)
// <9999=>9999 (Latest only)
// <i>QP API backwards compatibility with the QP/C API version.
// <i>QP API backwards compatibility with the QP API version.
// <i>Lower QP_API_VERSION values enable backwards compatibility
// <i>with lower (older) QP API versions.
// <i>For example, QP_API_VERSION==691 will enable the compatibility
@ -185,7 +185,7 @@
// </c>
// <c2>Enable memory isolation (QF_MEM_ISOLATE)
// <i>Memory isolation (requires MPU)
// <i>Memory isolation (supported in SafeQP only, requires MPU)
// <i>NOTE: implies QF_ON_CONTEXT_SW.
//#define QF_MEM_ISOLATE
// </c>

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-11-22
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to ARM Cortex-R, preemptive QK kernel, GNU-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to ARM Cortex-R, preemptive QK kernel, IAR-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to ARM Cortex-R, preemptive QK kernel, TI-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-11-22
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to ARM Cortex-R, cooperative QV kernel, GNU-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to Cortex-R, cooperative QV kernel, IAR-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to ARM Cortex-R, cooperative QV kernel, TI-ARM
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP configuration file (generic)
// QP/C configuration file (generic)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,11 +18,10 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
@ -37,7 +37,7 @@
// <691=>691 (QP 6.9.1 or newer)
// <734=>7.3.4 (QP 7.3.4 or newer)
// <9999=>9999 (Latest only)
// <i>QP API backwards compatibility with the QP/C API version.
// <i>QP API backwards compatibility with the QP API version.
// <i>Lower QP_API_VERSION values enable backwards compatibility
// <i>with lower (older) QP API versions.
// <i>For example, QP_API_VERSION==691 will enable the compatibility
@ -185,7 +185,7 @@
// </c>
// <c2>Enable memory isolation (QF_MEM_ISOLATE)
// <i>Memory isolation (requires MPU)
// <i>Memory isolation (supported in SafeQP only, requires MPU)
// <i>NOTE: implies QF_ON_CONTEXT_SW.
//#define QF_MEM_ISOLATE
// </c>

View File

@ -1,4 +1,7 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
@ -7,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -15,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-26
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to embOS RTOS kernel, generic C11 compiler
//!
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-scope interface
@ -197,9 +193,6 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(200, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(201, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
// the number of free slots available in the queue
uint_fast16_t const nFree =
@ -229,12 +222,13 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)nFree); // # free entries
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(205, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -252,7 +246,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
QS_2U8_PRE(e->poolNum_, e->refCtr_); // pool-Id&ref-Count
QS_EQC_PRE(nFree); // # free entries
QS_EQC_PRE(margin); // margin requested
QS_END_PRE()
@ -267,20 +261,18 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(300, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(301, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_LIFO, me->prio)
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(me->eQueue.maxMsg - me->eQueue.nofMsg); // # free
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(305, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -304,7 +296,7 @@ QEvt const *QActive_get_(QActive * const me) {
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)(me->eQueue.maxMsg - me->eQueue.nofMsg));
QS_END_PRE()

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to embOS RTOS (v5), generic C11 compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,4 +1,7 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
@ -7,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -15,25 +18,18 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-10-29
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to FreeRTOS 10.x, generic C11 compiler
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-level interface
#include "qp_pkg.h" // QP package-scope interface
#include "qsafe.h" // QP Functional Safety (FuSa) Subsystem
#ifdef Q_SPY // QS software tracing enabled?
#include "qs_port.h" // QS port
@ -45,11 +41,11 @@
Q_DEFINE_THIS_MODULE("qf_port")
#if ( configSUPPORT_STATIC_ALLOCATION == 0 )
#error "This QP/C port to FreeRTOS requires configSUPPORT_STATIC_ALLOCATION "
#error This QP/C port to FreeRTOS requires configSUPPORT_STATIC_ALLOCATION
#endif
#if ( configMAX_PRIORITIES < QF_MAX_ACTIVE )
#error "FreeRTOS configMAX_PRIORITIES must not be less than QF_MAX_ACTIVE"
#error FreeRTOS configMAX_PRIORITIES must not be less than QF_MAX_ACTIVE
#endif
// Local objects -------------------------------------------------------------
@ -129,6 +125,7 @@ static void task_function(void *pvParameters) { // FreeRTOS task signature
}
//............................................................................
//! @public @memberof QActive
void QActive_start(QActive * const me,
QPrioSpec const prioSpec,
QEvtPtr * const qSto,
@ -174,7 +171,7 @@ void QActive_start(QActive * const me,
// The FreeRTOS priority of the AO thread can be specified in two ways:
//
// 1. Implictily based on the AO's priority (by the formula specified
// 1. Implicitly based on the AO's priority (by the formula specified
// in the macro FREERTOS_TASK_PRIO(), see qp_port.h). This option
// is chosen, when the higher-byte of the prioSpec parameter is set
// to zero.
@ -188,7 +185,7 @@ void QActive_start(QActive * const me,
// so it is the responsibility of the application to ensure that
// it is consistent with the AO's priority. An example of
// inconsistent setting would be assigning FreeRTOS priorities that
// would result in a different relative priritization of AO's threads
// would result in a different relative prioritization of AO's threads
// than indicated by the AO priorities assigned.
//
UBaseType_t freertos_prio = (prioSpec >> 8U);
@ -241,6 +238,7 @@ void QActive_setAttr(QActive *const me, uint32_t attr1, void const *attr2) {
}
//============================================================================
//! @private @memberof QActive
bool QActive_post_(QActive * const me, QEvt const * const e,
uint_fast16_t const margin, void const * const sender)
{
@ -252,46 +250,48 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(200, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(201, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
// the number of free slots available in the queue
// the number of free slots available in the FreeRTOS queue
uint_fast16_t const nFree =
(uint_fast16_t)FREERTOS_QUEUE_GET_FREE(me);
bool status;
// required margin available?
bool status = false; // assume that event cannot be posted
if (margin == QF_NO_MARGIN) {
if (nFree > 0U) {
if (nFree > 0U) { // free entries available in the queue?
status = true; // can post
}
else {
status = false; // cannot post
else { // no free entries available
// The queue overflows, but QF_NO_MARGIN indicates that
// the "event delivery guarantee" is required.
Q_ERROR_INCRIT(210); // must be able to post the event
}
}
else if (nFree > (QEQueueCtr)margin) {
else if (nFree > (QEQueueCtr)margin) { // enough free entries?
status = true; // can post
}
else {
status = false; // cannot post
// empty
}
if (status) { // can post the event?
#if (QF_MAX_EPOOL > 0U)
if (e->poolNum_ != 0U) { // is it a mutable event?
Q_ASSERT_INCRIT(205, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
#endif // (QF_MAX_EPOOL > 0U)
if (status) { // can post the event?
QS_BEGIN_PRE(QS_QF_ACTIVE_POST, me->prio)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)nFree); // # free entries
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
BaseType_t err = xQueueSendToBack(
@ -300,49 +300,57 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QF_CRIT_ENTRY();
// posting to the FreeRTOS message queue must succeed, see NOTE3
Q_ASSERT_INCRIT(220, err == pdPASS);
QF_CRIT_EXIT();
#ifdef Q_UNSAFE
Q_UNUSED_PAR(err);
#endif
}
else { // cannot post the event
else { // event cannot be posted
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_ATTEMPT, me->prio)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_EQC_PRE(nFree); // # free entries
QS_EQC_PRE(margin); // margin requested
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries
QS_EQC_PRE(margin); // margin requested
QS_END_PRE()
QF_CRIT_EXIT();
#if (QF_MAX_EPOOL > 0U)
QF_gc(e); // recycle the event to avoid a leak
#endif // (QF_MAX_EPOOL > 0U)
}
QF_CRIT_EXIT();
return status;
}
//............................................................................
void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
QF_CRIT_STAT
QF_CRIT_ENTRY();
// the posted event must be be valid (which includes not NULL)
Q_REQUIRE_INCRIT(300, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(301, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_LIFO, me->prio)
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_EQC_PRE((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
#if (QF_MAX_EPOOL > 0U)
if (e->poolNum_ != 0U) { // is it a mutable event?
Q_ASSERT_INCRIT(305, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
#endif // (QF_MAX_EPOOL > 0U)
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_LIFO, me->prio)
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
QF_CRIT_EXIT();
BaseType_t err = xQueueSendToFront(
@ -368,7 +376,7 @@ QEvt const *QActive_get_(QActive * const me) {
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
QS_END_PRE()
QS_CRIT_EXIT();
@ -385,75 +393,80 @@ bool QActive_postFromISR_(QActive * const me, QEvt const * const e,
{
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_REQUIRE_INCRIT(500, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(501, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
Q_REQUIRE_INCRIT(400, e != (QEvt *)0);
// find the number of free slots available in the queue
uint_fast16_t const nFree = (uint_fast16_t)FREERTOS_QUEUE_GET_FREE(me);
// the number of free slots available in the FreeRTOS queue
uint_fast16_t const nFree =
(uint_fast16_t)FREERTOS_QUEUE_GET_FREE(me);
bool status;
// required margin available?
bool status = false; // assume that event cannot be posted
if (margin == QF_NO_MARGIN) {
if (nFree > 0U) {
if (nFree > 0U) { // free entries available in the queue?
status = true; // can post
}
else {
status = false; // cannot post
Q_ERROR_INCRIT(510); // must be able to post the event
else { // no free entries available
// The queue overflows, but QF_NO_MARGIN indicates that
// the "event delivery guarantee" is required.
Q_ERROR_INCRIT(410); // must be able to post the event
}
}
else if (nFree > margin) {
else if (nFree > (QEQueueCtr)margin) { // enough free entries?
status = true; // can post
}
else {
status = false; // cannot post
// empty
}
if (status) { // can post the event?
#if (QF_MAX_EPOOL > 0U)
if (e->poolNum_ != 0U) { // is it a mutable event?
Q_ASSERT_INCRIT(405, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
#endif // (QF_MAX_EPOOL > 0U)
if (status) { // can post the event?
QS_BEGIN_PRE(QS_QF_ACTIVE_POST, me->prio)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
QS_EQC_PRE(nFree); // # free entries available
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE((QEQueueCtr)nFree); // # free entries
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
QEvt_refCtr_inc_(e); // increment the reference counter
}
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
BaseType_t err = xQueueSendToBackFromISR(me->eQueue,
(void const *)&e,
pxHigherPriorityTaskWoken);
// posting to the FreeRTOS message queue must succeed
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_ASSERT_INCRIT(520, err == pdPASS);
// posting to the FreeRTOS message queue must succeed, see NOTE3
Q_ASSERT_INCRIT(420, err == pdPASS);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
#ifdef Q_UNSAFE
Q_UNUSED_PAR(err);
#endif
}
else {
else { // event cannot be posted
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_ATTEMPT, me->prio)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
QS_EQC_PRE(nFree); // # free entries available
QS_EQC_PRE(margin); // margin requested
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries
QS_EQC_PRE(margin); // margin requested
QS_END_PRE()
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
#if (QF_MAX_EPOOL > 0U)
QF_gcFromISR(e); // recycle the event to avoid a leak
#endif // (QF_MAX_EPOOL > 0U)
}
return status;
@ -463,75 +476,90 @@ void QActive_publishFromISR_(QEvt const * const e,
BaseType_t * const pxHigherPriorityTaskWoken,
void const * const sender)
{
Q_REQUIRE_INCRIT(600, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(601, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
Q_REQUIRE_INCRIT(500, e != (QEvt *)0);
QSignal const sig = e->sig;
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
// the published signal must be within the configured range
Q_REQUIRE_INCRIT(610, sig < (QSignal)QActive_maxPubSignal_);
Q_REQUIRE_INCRIT(611,
QPSet_verify_(&QActive_subscrList_[sig].set,
&QActive_subscrList_[sig].set_dis));
Q_REQUIRE_INCRIT(510, sig < (QSignal)QActive_maxPubSignal_);
QS_BEGIN_PRE(QS_QF_PUBLISH, 0U)
QS_TIME_PRE(); // the timestamp
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(sig); // the signal of the event
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_END_PRE()
// is it a dynamic event?
if (QEvt_getPoolNum_(e) != 0U) {
// NOTE: The reference counter of a dynamic event is incremented to
// is it a mutable event?
if (e->poolNum_ != 0U) {
// NOTE: The reference counter of a mutable event is incremented to
// prevent premature recycling of the event while the multicasting
// is still in progress. At the end of the function, the garbage
// collector step (QF_gcFromISR()) decrements the reference counter
// and recycles the event if the counter drops to zero. This covers
// the case when the event was published without any subscribers.
// collector step (QF_gc()) decrements the reference counter and
// recycles the event if the counter drops to zero. This covers the
// case when the event was published without any subscribers.
Q_ASSERT_INCRIT(515, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e);
}
// make a local, modifiable copy of the subscriber list
// make a local, modifiable copy of the subscriber set
QPSet subscrSet = QActive_subscrList_[sig].set;
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
if (QPSet_notEmpty(&subscrSet)) { // any subscribers?
// the highest-prio subscriber
uint_fast8_t p = QPSet_findMax(&subscrSet);
// no need to lock the scheduler in the ISR context
do { // loop over all subscribers
// the prio of the AO must be registered with the framework
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_ASSERT_INCRIT(620, QActive_registry_[p] != (QActive *)0);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
// QACTIVE_POST_FROM_ISR() asserts if the queue overflows
QACTIVE_POST_FROM_ISR(QActive_registry_[p], e,
pxHigherPriorityTaskWoken, sender);
QActive *a = QActive_registry_[p];
// the AO must be registered with the framework
Q_ASSERT_INCRIT(520, a != (QActive *)0);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
//QF_SCHED_LOCK_(p); // no scheduler locking in FreeRTOS
do { // loop over all subscribers
// QACTIVE_POST() asserts internally if the queue overflows
QACTIVE_POST_FROM_ISR(a, e, pxHigherPriorityTaskWoken, sender);
QPSet_remove(&subscrSet, p); // remove the handled subscriber
if (QPSet_notEmpty(&subscrSet)) { // still more subscribers?
p = QPSet_findMax(&subscrSet); // the highest-prio subscriber
if (QPSet_notEmpty(&subscrSet)) { // still more subscribers?
p = QPSet_findMax(&subscrSet); // highest-prio subscriber
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
a = QActive_registry_[p];
// the AO must be registered with the framework
Q_ASSERT_INCRIT(530, a != (QActive *)0);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
}
else {
p = 0U; // no more subscribers
}
} while (p != 0U);
// no need to unlock the scheduler in the ISR context
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_ASSERT_INCRIT(590, p == 0U); // all subscribers processed
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
//QF_SCHED_UNLOCK_(); // no scheduler locking in FreeRTOS
}
#if (QF_MAX_EPOOL > 0U)
// The following garbage collection step decrements the reference counter
// and recycles the event if the counter drops to zero. This covers both
// cases when the event was published with or without any subscribers.
QF_gcFromISR(e);
#endif // (QF_MAX_EPOOL > 0U)
}
//............................................................................
//! @private @memberof QTimeEvt
void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
BaseType_t * const pxHigherPriorityTaskWoken,
void const * const sender)
@ -542,69 +570,46 @@ void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_REQUIRE_INCRIT(700, tickRate < Q_DIM(QTimeEvt_timeEvtHead_));
Q_REQUIRE_INCRIT(600, tickRate < Q_DIM(QTimeEvt_timeEvtHead_));
QTimeEvt *prev = &QTimeEvt_timeEvtHead_[tickRate];
#ifdef Q_SPY
QS_BEGIN_PRE(QS_QF_TICK, 0U)
++prev->ctr;
QS_TEC_PRE(prev->ctr); // tick ctr
QS_U8_PRE(tickRate); // tick rate
QS_END_PRE()
#endif // def Q_SPY
// scan the linked-list of time events at this rate...
uint_fast8_t lbound = 2U*QF_MAX_ACTIVE; // fixed upper loop bound
for (; lbound > 0U; --lbound) {
Q_ASSERT_INCRIT(710, prev != (QTimeEvt *)0); // sanity check
while (true) {
Q_ASSERT_INCRIT(610, prev != (QTimeEvt *)0); // sanity check
QTimeEvt *te = prev->next; // advance down the time evt. list
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(711,
Q_PTR2UINT_CAST_(te) == (uintptr_t)~prev->next_dis);
#endif // ndef Q_UNSAFE
if (te == (QTimeEvt *)0) { // end of the list?
// any new time events armed since the last QTimeEvt_tick_()?
if (QTimeEvt_timeEvtHead_[tickRate].act != (void *)0) {
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(712,
Q_PTR2UINT_CAST_(QTimeEvt_timeEvtHead_[tickRate].act)
== (uintptr_t)~QTimeEvt_timeEvtHead_dis_[tickRate]);
#endif // ndef Q_UNSAFE
prev->next = QTimeEvt_timeEvtHead_[tickRate].act;
QTimeEvt_timeEvtHead_[tickRate].act = (void *)0;
#ifndef Q_UNSAFE
prev->next_dis = (uintptr_t)~Q_PTR2UINT_CAST_(prev->next);
QTimeEvt_timeEvtHead_dis_[tickRate] =
(uintptr_t)~Q_PTR2UINT_CAST_((void *)0);
#endif // ndef Q_UNSAFE
te = prev->next; // switch to the new list
}
else { // all currently armed time events are processed
// NO any new time events armed since the last QTimeEvt_tick_()?
if (QTimeEvt_timeEvtHead_[tickRate].act == (void *)0) {
break; // terminate the for-loop
}
prev->next = (QTimeEvt*)QTimeEvt_timeEvtHead_[tickRate].act;
QTimeEvt_timeEvtHead_[tickRate].act = (void *)0;
te = prev->next; // switch to the new list
}
// the time event 'te' must be valid
Q_ASSERT_INCRIT(720, te != (QTimeEvt *)0);
Q_ASSERT_INCRIT(640, te != (QTimeEvt *)0);
QTimeEvtCtr ctr = te->ctr;
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(721, QEvt_verify_(&te->super));
Q_INVARIANT_INCRIT(722, ctr == (QTimeEvtCtr)~te->ctr_dis);
#endif // ndef Q_UNSAFE
QTimeEvtCtr ctr = te->ctr; // move volatile into temporary
if (ctr == 0U) { // time event scheduled for removal?
prev->next = te->next;
#ifndef Q_UNSAFE
prev->next_dis = (uintptr_t)~Q_PTR2UINT_CAST_(te->next);
#endif // ndef Q_UNSAFE
// mark time event 'te' as NOT linked
te->flags &= (uint8_t)(~QTE_FLAG_IS_LINKED & 0xFFU);
// do NOT advance the prev pointer
// exit crit. section to reduce latency
@ -612,39 +617,7 @@ void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
}
else if (ctr == 1U) { // is time event about to expire?
QActive * const act = (QActive *)te->act;
if (te->interval != 0U) { // periodic time evt?
te->ctr = te->interval; // rearm the time event
#ifndef Q_UNSAFE
te->ctr_dis = (QTimeEvtCtr)~te->interval;
#endif // ndef Q_UNSAFE
prev = te; // advance to this time event
}
else { // one-shot time event: automatically disarm
te->ctr = 0U;
prev->next = te->next;
#ifndef Q_UNSAFE
te->ctr_dis = (QTimeEvtCtr)~0U;
prev->next_dis = (uintptr_t)~Q_PTR2UINT_CAST_(te->next);
#endif // ndef Q_UNSAFE
// mark time event 'e' as NOT linked
te->flags &= (uint8_t)(~QTE_FLAG_IS_LINKED & 0xFFU);
// do NOT advance the prev pointer
QS_BEGIN_PRE(QS_QF_TIMEEVT_AUTO_DISARM, act->prio)
QS_OBJ_PRE(te); // this time event object
QS_OBJ_PRE(act); // the target AO
QS_U8_PRE(tickRate); // tick rate
QS_END_PRE()
}
QS_BEGIN_PRE(QS_QF_TIMEEVT_POST, act->prio)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(te); // the time event object
QS_SIG_PRE(te->super.sig);// signal of this time event
QS_OBJ_PRE(act); // the target AO
QS_U8_PRE(tickRate); // tick rate
QS_END_PRE()
prev = QTimeEvt_expire_(te, prev, act, tickRate);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
@ -656,10 +629,6 @@ void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
else { // time event keeps timing out
--ctr; // decrement the tick counter
te->ctr = ctr; // update the original
#ifndef Q_UNSAFE
te->ctr_dis = (QTimeEvtCtr)~ctr;
#endif // ndef Q_UNSAFE
prev = te; // advance to this time event
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
@ -668,16 +637,15 @@ void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
}
Q_ENSURE_INCRIT(890, lbound > 0U);
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
}
//............................................................................
QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
uint_fast16_t const margin, enum_t const sig)
{
// find the pool index that fits the requested event size...
uint_fast8_t poolNum = 0U; // zero-based poolNum initially
// find the pool number that fits the requested event size...
uint8_t poolNum = 0U; // zero-based poolNum initially
for (; poolNum < QF_priv_.maxPool_; ++poolNum) {
if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolNum])) {
break;
@ -688,31 +656,31 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
// precondition:
// - cannot run out of registered pools
Q_REQUIRE_INCRIT(800, poolNum < QF_priv_.maxPool_);
Q_REQUIRE_INCRIT(700, poolNum < QF_priv_.maxPool_);
++poolNum; // convert to 1-based poolNum
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
// get event e (port-dependent)...
QEvt *e;
#ifdef Q_SPY
QEvt *e = QMPool_getFromISR(&QF_priv_.ePool_[poolNum - 1U],
e = QMPool_getFromISR(&QF_priv_.ePool_[poolNum - 1U],
((margin != QF_NO_MARGIN) ? margin : 0U),
(uint_fast8_t)QS_EP_ID + poolNum);
#else
QEvt *e = QMPool_getFromISR(&QF_priv_.ePool_[poolNum - 1U],
e = QMPool_getFromISR(&QF_priv_.ePool_[poolNum - 1U],
((margin != QF_NO_MARGIN) ? margin : 0U), 0U);
#endif
if (e != (QEvt *)0) { // was e allocated correctly?
e->sig = (QSignal)sig; // set the signal
e->refCtr_ = 0U; // initialize the reference counter to 0
e->evtTag_ = (uint8_t)((poolNum << 4U) | 0x0FU);
e->sig = (QSignal)sig; // set the signal
e->poolNum_ = poolNum;
e->refCtr_ = 0U;
#ifdef Q_SPY
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
QS_BEGIN_PRE(QS_QF_NEW,
(uint_fast8_t)QS_EP_ID + poolNum)
QS_BEGIN_PRE(QS_QF_NEW, (uint_fast8_t)QS_EP_ID + poolNum)
QS_TIME_PRE(); // timestamp
QS_EVS_PRE(evtSize); // the size of the event
QS_SIG_PRE(sig); // the signal of the event
@ -726,7 +694,7 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
// This assertion means that the event allocation failed,
// and this failure cannot be tolerated. The most frequent
// reason is an event leak in the application.
Q_ASSERT_INCRIT(820, margin != QF_NO_MARGIN);
Q_ASSERT_INCRIT(720, margin != QF_NO_MARGIN);
QS_BEGIN_PRE(QS_QF_NEW_ATTEMPT,
(uint_fast8_t)QS_EP_ID + poolNum)
@ -746,12 +714,9 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
void QF_gcFromISR(QEvt const * const e) {
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
Q_REQUIRE_INCRIT(700, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(701, QEvt_verify_(e));
#endif
Q_REQUIRE_INCRIT(800, e != (QEvt *)0);
uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
uint8_t const poolNum = e->poolNum_;
if (poolNum != 0U) { // is it a pool event (mutable)?
@ -764,6 +729,7 @@ void QF_gcFromISR(QEvt const * const e) {
QS_2U8_PRE(poolNum, e->refCtr_);
QS_END_PRE()
Q_ASSERT_INCRIT(805, e->refCtr_ > 0U);
QEvt_refCtr_dec_(e); // decrement the ref counter
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
@ -778,15 +744,15 @@ void QF_gcFromISR(QEvt const * const e) {
QS_END_PRE()
// pool number must be in range
Q_ASSERT_INCRIT(710, (poolNum <= QF_priv_.maxPool_)
&& (poolNum <= QF_MAX_EPOOL));
Q_ASSERT_INCRIT(810, (poolNum <= QF_priv_.maxPool_)
&& (poolNum <= QF_MAX_EPOOL));
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
// NOTE: casting 'const' away is legit because 'e' is a pool event
#ifdef Q_SPY
// cast 'const' away in (QEvt *)e is OK because it's a pool event
QMPool_putFromISR(&QF_priv_.ePool_[poolNum - 1U], (QEvt *)e,
(uint_fast8_t)QS_EP_ID + QEvt_getPoolNum_(e));
(uint_fast8_t)QS_EP_ID + e->poolNum_);
#else
QMPool_putFromISR(&QF_priv_.ePool_[poolNum - 1U], (QEvt *)e, 0U);
#endif
@ -800,80 +766,57 @@ void QF_gcFromISR(QEvt const * const e) {
void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
uint_fast8_t const qsId)
{
#ifndef Q_SPY
#ifndef Q_SPY
Q_UNUSED_PAR(qsId);
#endif
#endif
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
// get volatile into temporaries
QFreeBlock *fb = me->free_head;
void * *pfb = me->freeHead; // pointer to free block
QMPoolCtr nFree = me->nFree;
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(801, Q_PTR2UINT_CAST_(fb)
== (uintptr_t)~me->free_head_dis);
Q_INVARIANT_INCRIT(802, nFree == (QMPoolCtr)~me->nFree_dis);
#endif // ndef Q_UNSAFE
// have more free blocks than the requested margin?
if (nFree > (QMPoolCtr)margin) {
Q_ASSERT_INCRIT(810, fb != (QFreeBlock *)0);
Q_ASSERT_INCRIT(910, pfb != (void**)0);
QFreeBlock * const fb_next = fb->next; // fast temporary
#ifndef Q_UNSAFE
// the free block must have integrity (duplicate inverse storage)
Q_INVARIANT_INCRIT(811, Q_PTR2UINT_CAST_(fb_next)
== (uintptr_t)~fb->next_dis);
#endif // ndef Q_UNSAFE
void ** const pfb_next = pfb[0]; // fast temporary
--nFree; // one less free block
if (nFree == 0U) { // is the pool becoming empty?
// pool is becoming empty, so the next free block must be NULL
Q_ASSERT_INCRIT(820, fb_next == (QFreeBlock *)0);
Q_ASSERT_INCRIT(920, pfb_next == (void**)0);
me->nFree = 0U;
#ifndef Q_UNSAFE
me->nFree_dis = (QMPoolCtr)~0U;
me->nMin = 0U; // remember that the pool got empty
#endif // ndef Q_UNSAFE
me->nFree = 0U; // no more free blocks
me->nMin = 0U; // remember that the pool got empty
}
else {
me->nFree = nFree;
#ifndef Q_UNSAFE
me->nFree_dis = (QMPoolCtr)~nFree;
else { // the pool is NOT empty
// The pool is not empty, so the next free-block pointer
// must be in range.
Q_INVARIANT_INCRIT(830,
(me->start <= fb_next) && (fb_next <= me->end));
// the next free-block pointer must be in range
Q_ASSERT_INCRIT(930,
(me->start <= pfb_next) && (pfb_next <= me->end));
// is the # free blocks the new minimum so far?
if (me->nMin > nFree) {
me->nFree = nFree; // update the original
if (me->nMin > nFree) { // is this the new minimum?
me->nMin = nFree; // remember the minimum so far
}
#endif // ndef Q_UNSAFE
}
me->free_head = fb_next; // set the head to the next free block
#ifndef Q_UNSAFE
me->free_head_dis = (uintptr_t)(~Q_PTR2UINT_CAST_(fb_next));
#endif // ndef Q_UNSAFE
me->freeHead = pfb_next; // set the head to the next free block
// change the allocated block contents so that it is different
// than a free block inside the pool.
pfb[0] = &me->end[1]; // invalid location beyond the end
QS_BEGIN_PRE(QS_QF_MPOOL_GET, qsId)
QS_TIME_PRE(); // timestamp
QS_OBJ_PRE(me); // this memory pool
QS_MPC_PRE(nFree); // # of free blocks in the pool
#ifndef Q_UNSAFE
QS_MPC_PRE(nFree); // # free blocks in the pool
QS_MPC_PRE(me->nMin); // min # free blocks ever in the pool
#else
QS_MPC_PRE(0U); // min # free blocks (not available)
#endif // ndef Q_UNSAFE
QS_END_PRE()
}
else { // don't have enough free blocks at this point
fb = (QFreeBlock *)0;
pfb = (void**)0;
QS_BEGIN_PRE(QS_QF_MPOOL_GET_ATTEMPT, qsId)
QS_TIME_PRE(); // timestamp
@ -885,43 +828,32 @@ void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
return fb; // return the block or NULL pointer to the caller
return (void *)pfb; // return the block or NULL pointer to the caller
}
//............................................................................
void QMPool_putFromISR(QMPool * const me, void *block,
uint_fast8_t const qsId)
{
#ifndef Q_SPY
#ifndef Q_SPY
Q_UNUSED_PAR(qsId);
#endif
#endif
QFreeBlock * const fb = (QFreeBlock *)block;
void * * const pfb = (void * *)block; // pointer to free block
UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
// get volatile into temporaries
QFreeBlock *free_head = me->free_head;
void * * const freeHead = me->freeHead;
QMPoolCtr nFree = me->nFree;
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(901, Q_PTR2UINT_CAST_(free_head)
== (uintptr_t)~me->free_head_dis);
Q_INVARIANT_INCRIT(902, nFree == (QMPoolCtr)~me->nFree_dis);
#endif // ndef Q_UNSAFE
Q_REQUIRE_INCRIT(910, nFree < me->nTot);
Q_REQUIRE_INCRIT(911, (me->start <= fb) && (fb <= me->end));
Q_REQUIRE_INCRIT(1000, nFree < me->nTot);
Q_REQUIRE_INCRIT(1010, (me->start <= pfb) && (pfb <= me->end));
++nFree; // one more free block in this pool
me->free_head = fb; // set as new head of the free list
me->nFree = nFree;
fb->next = free_head; // link into list
#ifndef Q_UNSAFE
me->free_head_dis = (uintptr_t)(~Q_PTR2UINT_CAST_(fb));
me->nFree_dis = (QMPoolCtr)~nFree;
fb->next_dis = (uintptr_t)(~Q_PTR2UINT_CAST_(free_head));
#endif
me->freeHead = pfb; // set as new head of the free list
me->nFree = nFree;
pfb[0] = freeHead; // link into the list
QS_BEGIN_PRE(QS_QF_MPOOL_PUT, qsId)
QS_TIME_PRE(); // timestamp

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to FreeRTOS 10.x, generic C11 compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -48,7 +42,7 @@
#define QACTIVE_OS_OBJ_TYPE StaticQueue_t
#define QACTIVE_THREAD_TYPE StaticTask_t
// FreeRTOS requires the "FromISR" API in QP/C++
// FreeRTOS requires the "FromISR" API in QP/C
#define QF_ISR_API 1
// QF interrupt disabling/enabling (task level)

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to MSP430, QK kernel, TI, GNU, IAR compilers
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 16-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C "port" for QUTEST on MSP430, generic C11 compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -51,8 +44,8 @@
// QActive event queue type
#define QACTIVE_EQUEUE_TYPE QEQueue
// QACTIVE_OS_OBJ_TYPE not used in this port
// QACTIVE_THREAD_TYPE not used in this port
// QACTIVE_OS_OBJ_TYPE not used in this port
// QACTIVE_THREAD_TYPE not used in this port
// QF interrupt disable/enable
#define QF_INT_DISABLE() (++QS_tstPriv_.intLock)
@ -75,10 +68,11 @@
#include "qequeue.h" // QUTest port uses QEQueue event-queue
#include "qmpool.h" // QUTest port uses QMPool memory-pool
#include "qp.h" // QP framework
#include "qp.h" // QP platform-independent public interface
//============================================================================
// interface used only inside QF implementation, but not in applications
#ifdef QP_IMPL
// QUTest scheduler locking (not used)
@ -86,19 +80,13 @@
#define QF_SCHED_LOCK_(dummy) ((void)0)
#define QF_SCHED_UNLOCK_() ((void)0)
// native event queue operations
// native QEQueue operations
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QS_tstPriv_.readySet, (uint_fast8_t)(me_)->prio); \
QPSet_update_(&QS_tstPriv_.readySet, &QS_tstPriv_.readySet_dis)
#else
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (uint_fast8_t)(me_)->prio)
#endif
QPSet_insert(&QS_tstPriv_.readySet, (uint_fast8_t)(me_)->prio)
// native QF event pool operations
#define QF_EPOOL_TYPE_ QMPool
// native QMPool operations
#define QF_EPOOL_TYPE_ QMPool
#define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
(QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
#define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 16-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to MSP430, QV kernel, TI, GNU, IAR compilers
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 16-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,32 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-18
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to POSIX-QV (single-threaded)
// expose features from the 2008 POSIX standard (IEEE Standard 1003.1-2008)
#define _POSIX_C_SOURCE 200809L
@ -177,9 +177,6 @@ void QF_init(void) {
pthread_cond_init(&QF_condVar_, NULL);
QPSet_setEmpty(&QF_readySet_);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
// lock memory so we're never swapped out to disk
//mlockall(MCL_CURRENT | MCL_FUTURE); // un-comment when supported
@ -253,8 +250,6 @@ int QF_run(void) {
QS_END_PRE()
while (l_isRunning) {
Q_ASSERT_INCRIT(300, QPSet_verify_(&QF_readySet_, &QF_readySet_dis_));
// find the maximum priority AO ready to run
if (QPSet_notEmpty(&QF_readySet_)) {
uint_fast8_t p = QPSet_findMax(&QF_readySet_);
@ -272,9 +267,6 @@ int QF_run(void) {
QF_CRIT_ENTRY();
if (a->eQueue.frontEvt == (QEvt *)0) { // empty queue?
QPSet_remove(&QF_readySet_, p);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
}
}
else {
@ -308,9 +300,6 @@ void QF_stop(void) {
// unblock the event-loop so it can terminate
QPSet_insert(&QF_readySet_, 1U);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
pthread_cond_signal(&QF_condVar_);
}
//............................................................................
@ -395,9 +384,6 @@ void QActive_stop(QActive * const me) {
QF_CRIT_STAT
QF_CRIT_ENTRY();
QPSet_remove(&QF_readySet_, me->prio);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
QF_CRIT_EXIT();
QActive_unregister_(me);

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to POSIX-QV (single-threaded) with GNU compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -91,16 +85,9 @@ void QF_onClockTick(void);
// QF event queue customization for POSIX-QV...
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (me_)->prio); \
QPSet_update_(&QF_readySet_, &QF_readySet_dis_); \
pthread_cond_signal(&QF_condVar_)
#else
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (me_)->prio); \
pthread_cond_signal(&QF_condVar_)
#endif
// native QF event pool operations
#define QF_EPOOL_TYPE_ QMPool

View File

@ -1,38 +1,37 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to POSIX
// expose features from the 2008 POSIX standard (IEEE Standard 1003.1-2008)
#define _POSIX_C_SOURCE 200809L
#ifndef Q_SPY
#error "Q_SPY must be defined to compile qs_port.c"
#error Q_SPY must be defined to compile qs_port.c
#endif // Q_SPY
#define QP_IMPL // this is QP implementation

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to POSIX with GNU
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

View File

@ -1,32 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-18
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to POSIX (multithreaded with P-threads)
// expose features from the 2008 POSIX standard (IEEE Standard 1003.1-2008)
#define _POSIX_C_SOURCE 200809L

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-12-12
//! @version Last updated for: @ref qpc_8_0_1
//!
//! @file
//! @brief QP/C port to to POSIX (multithreaded with P-threads)
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,37 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to POSIX
// expose features from the 2008 POSIX standard (IEEE Standard 1003.1-2008)
#define _POSIX_C_SOURCE 200809L
#ifndef Q_SPY
#error "Q_SPY must be defined to compile qs_port.c"
#error Q_SPY must be defined to compile qs_port.c
#endif // Q_SPY
#define QP_IMPL // this is QP implementation

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to POSIX with GNU
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C dummy port
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port for the "Qube" execution harness (Windows, Linux, macOS)
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -82,14 +76,8 @@ extern uint_fast8_t QF_intLock_;
// native event queue operations
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (uint_fast8_t)(me_)->prio); \
QPSet_update_(&QF_readySet_, &QF_readySet_dis_)
#else
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (uint_fast8_t)(me_)->prio)
#endif
// native QF event pool operations
#define QF_EPOOL_TYPE_ QMPool

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port for the "Qube" execution harness (Windows, Linux, macOS)
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,35 +1,34 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-18
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief Qube command-line QP execution environment
#ifndef Q_SPY
#error "Q_SPY must be defined to compile qube.c"
#error Q_SPY must be defined to compile qube.c
#endif // Q_SPY
#define QP_IMPL // this is QP implementation
@ -215,9 +214,6 @@ static void handle_evts(void) {
#endif
if (a->eQueue.frontEvt == (QEvt*)0) { // empty queue?
QPSet_remove(&QF_readySet_, p);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
}
}
}
@ -270,10 +266,6 @@ void QF_init(void) {
QF_bzero_(&QF_intLock_, sizeof(QF_intLock_));
QF_bzero_(&QActive_registry_[0], sizeof(QActive_registry_));
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
l_currAO_name[0] = '\0';
fputs(COLOR_APP, stdout);
@ -296,7 +288,6 @@ void QF_onCleanup(void) {
int_t QF_run(void) {
QS_CRIT_STAT
QS_CRIT_ENTRY();
QS_MEM_SYS();
// function dictionaries for the standard API
QS_FUN_DICTIONARY(&QActive_post_);
@ -307,7 +298,6 @@ int_t QF_run(void) {
QS_BEGIN_PRE(QS_QF_RUN, 0U)
QS_END_PRE()
QS_MEM_APP();
QS_CRIT_EXIT();
handle_evts(); // handle all events posted so far

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to RISC-V, QV kernel, GNU-RISCV compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,4 +1,7 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
@ -7,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -15,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-26
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C, port to ThreadX
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-scope interface
@ -154,9 +150,6 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(200, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(201, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
uint_fast16_t nFree = (uint_fast16_t)me->eQueue.tx_queue_available_storage;
@ -184,12 +177,13 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries available
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(205, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -208,7 +202,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries available
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
@ -224,20 +218,18 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(300, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(301, QEvt_verify_(e));
#endif // ndef Q_UNSAFE
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_LIFO, me->prio)
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(me->eQueue.tx_queue_available_storage); // # free
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(305, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -262,7 +254,7 @@ QEvt const *QActive_get_(QActive * const me) {
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(me->eQueue.tx_queue_available_storage);// # free
QS_END_PRE()
QF_CRIT_EXIT();

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C, port to ThreadX, generic C11 compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -52,9 +46,9 @@
#define QF_TX_PRIO_OFFSET 2U
#ifndef QF_MAX_ACTIVE
#define QF_MAX_ACTIVE (TX_MAX_PRIORITIES - QF_TX_PRIO_OFFSET)
#define QF_MAX_ACTIVE (TX_MAX_PRIORITIES - QF_TX_PRIO_OFFSET)
#else
#error "QF_MAX_ACTIVE shouild not be externally defined in QP-ThreadX port"
#error QF_MAX_ACTIVE shouild not be externally defined in QP-ThreadX port
#endif
// mapping between QF-priority and TX-priority, see NOTE1

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,4 +1,7 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
@ -7,7 +10,7 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -15,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-26
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to uC-OS2, generic C11 compiler
//!
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-scope interface
@ -202,9 +198,6 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(200, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(201, QEvt_verify_(e));
#endif
uint_fast16_t const nFree =
(uint_fast16_t)(((OS_Q_DATA *)me->eQueue)->OSQSize
@ -233,12 +226,13 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(205, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -261,7 +255,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
QS_OBJ_PRE(sender); // the sender object
QS_SIG_PRE(e->sig); // the signal of the event
QS_OBJ_PRE(me); // this active object (recipient)
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(nFree); // # free entries available
QS_EQC_PRE(margin); // margin requested
QS_END_PRE()
@ -277,21 +271,19 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
QF_CRIT_ENTRY();
Q_REQUIRE_INCRIT(300, e != (QEvt *)0);
#ifndef Q_UNSAFE
Q_INVARIANT_INCRIT(301, QEvt_verify_(e));
#endif
QS_BEGIN_PRE(QS_QF_ACTIVE_POST_LIFO, me->prio)
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(((OS_Q *)me->eQueue)->OSQSize
- ((OS_Q *)me->eQueue)->OSQEntries); // # free entries
QS_EQC_PRE(0U); // min # free entries (unknown)
QS_END_PRE()
if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
if (e->poolNum_ != 0U) { // is it a pool event?
Q_ASSERT_INCRIT(305, e->refCtr_ < (2U * QF_MAX_ACTIVE));
QEvt_refCtr_inc_(e); // increment the reference counter
}
QF_CRIT_EXIT();
@ -320,7 +312,7 @@ QEvt const *QActive_get_(QActive * const me) {
QS_TIME_PRE(); // timestamp
QS_SIG_PRE(e->sig); // the signal of this event
QS_OBJ_PRE(me); // this active object
QS_2U8_PRE(QEvt_getPoolNum_(e), e->refCtr_);
QS_2U8_PRE(e->poolNum_, e->refCtr_);
QS_EQC_PRE(((OS_Q *)me->eQueue)->OSQSize
- ((OS_Q *)me->eQueue)->OSQEntries); // # free entries
QS_END_PRE()

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to uC-OS2, generic C11 compiler
#ifndef QP_PORT_H_
#define QP_PORT_H_

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to a 32-bit CPU and a generic C99 compiler.
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,33 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-19
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to Win32-QV (single-threaded)
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-scope interface
@ -104,9 +103,6 @@ void QF_init(void) {
QF_win32Event_ = CreateEvent(NULL, FALSE, FALSE, NULL);
QPSet_setEmpty(&QF_readySet_);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
QTimeEvt_init(); // initialize QTimeEvts
}
@ -140,8 +136,6 @@ int QF_run(void) {
QS_END_PRE()
while (l_isRunning) {
Q_ASSERT_INCRIT(300, QPSet_verify_(&QF_readySet_, &QF_readySet_dis_));
// find the maximum priority AO ready to run
if (QPSet_notEmpty(&QF_readySet_)) {
uint_fast8_t p = QPSet_findMax(&QF_readySet_);
@ -159,9 +153,6 @@ int QF_run(void) {
QF_CRIT_ENTRY();
if (a->eQueue.frontEvt == (QEvt *)0) { // empty queue?
QPSet_remove(&QF_readySet_, p);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
}
}
else {
@ -191,9 +182,6 @@ void QF_stop(void) {
// unblock the event-loop so it can terminate
QPSet_insert(&QF_readySet_, 1U);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
SetEvent(QF_win32Event_);
}
//............................................................................
@ -268,9 +256,6 @@ void QActive_stop(QActive * const me) {
QF_CRIT_STAT
QF_CRIT_ENTRY();
QPSet_remove(&QF_readySet_, me->prio);
#ifndef Q_UNSAFE
QPSet_update_(&QF_readySet_, &QF_readySet_dis_);
#endif
QF_CRIT_EXIT();
QActive_unregister_(me);

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to Win32-QV (single-threaded) with GNU or Visual C/C++
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -54,7 +48,7 @@
#define Q_NORETURN _Noreturn void
#endif
// This is the case where QP/C is compiled by the Microsoft Visual C++
// This is the case where QP is compiled by the Microsoft Visual C++
// compiler in the C++ mode, which can happen when qep_port.h is included
// in a C++ module, or the compilation is forced to C++ by the option /TP.
//
@ -62,7 +56,7 @@
// and C4610, which warn that default constructors and assignment operators
// could not be generated for structures QMState and QMTranActTable.
//
// The QP/C source code cannot be changed to avoid these C++ warnings
// The QP source code cannot be changed to avoid these C++ warnings
// because the structures QMState and QMTranActTable must remain PODs
// (Plain Old Datatypes) to be initializable statically with constant
// initializers.
@ -129,16 +123,9 @@ void QF_onClockTick(void);
// QF event queue customization for Win32-QV...
#define QACTIVE_EQUEUE_WAIT_(me_) ((void)0)
#ifndef Q_UNSAFE
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (me_)->prio); \
QPSet_update_(&QF_readySet_, &QF_readySet_dis_); \
(void)SetEvent(QF_win32Event_)
#else
#define QACTIVE_EQUEUE_SIGNAL_(me_) \
QPSet_insert(&QF_readySet_, (me_)->prio); \
(void)SetEvent(QF_win32Event_)
#endif
// native QF event pool operations
#define QF_EPOOL_TYPE_ QMPool

View File

@ -1,35 +1,33 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-11
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port for Win32 API
#ifndef Q_SPY
#error "Q_SPY must be defined to compile qs_port.c"
#error Q_SPY must be defined to compile qs_port.c
#endif // Q_SPY
#define QP_IMPL // this is QP implementation

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to Win32 with GNU or Visual C++ compilers
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,34 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// QWIN GUI facilities for building realistic embedded front panels
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//!
//! @date Last updated on: 2022-06-12
//! @version Last updated for: @ref qpc_7_0_1
//!
//! @file
//! @brief QWIN GUI facilities for building realistic embedded front panels
//!
#include "qwin_gui.h"
#include <stdlib.h>

View File

@ -1,34 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// QWIN GUI facilities for building realistic embedded front panels
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//!
//! @date Last updated on: 2022-06-12
//! @version Last updated for: @ref qpc_7_0_1
//!
//! @file
//! @brief QWIN GUI facilities for building realistic embedded front panels
//!
#ifndef QWIN_GUI_H
#define QWIN_GUI_H

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

View File

@ -1,33 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-09-19
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QF/C port to Win32 (multithreaded)
#define QP_IMPL // this is QP implementation
#include "qp_port.h" // QP port
#include "qp_pkg.h" // QP package-scope interface

View File

@ -1,15 +1,16 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// The QP/C software is dual-licensed under the terms of the open-source GNU
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
@ -17,22 +18,15 @@
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// NOTE:
// The GPL (see <www.gnu.org/licenses/gpl-3.0>) does NOT permit the
// incorporation of the QP/C software into proprietary programs. Please
// contact Quantum Leaps for commercial licensing options, which expressly
// supersede the GPL and are designed explicitly for licensees interested
// in using QP/C in closed-source proprietary applications.
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-09-30
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QP/C port to Win32 (multithreaded) with GNU or Visual C/C++
#ifndef QP_PORT_H_
#define QP_PORT_H_
@ -54,7 +48,7 @@
#define Q_NORETURN _Noreturn void
#endif
// This is the case where QP/C is compiled by the Microsoft Visual C++
// This is the case where QP is compiled by the Microsoft Visual C++
// compiler in the C++ mode, which can happen when qep_port.h is included
// in a C++ module, or the compilation is forced to C++ by the option /TP.
//
@ -62,7 +56,7 @@
// and C4610, which warn that default constructors and assignment operators
// could not be generated for structures QMState and QMTranActTable.
//
// The QP/C source code cannot be changed to avoid these C++ warnings
// The QP source code cannot be changed to avoid these C++ warnings
// because the structures QMState and QMTranActTable must remain PODs
// (Plain Old Datatypes) to be initializable statically with constant
// initializers.

View File

@ -1,35 +1,33 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-11
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port for Win32 API
#ifndef Q_SPY
#error "Q_SPY must be defined to compile qs_port.c"
#error Q_SPY must be defined to compile qs_port.c
#endif // Q_SPY
#define QP_IMPL // this is QP implementation

View File

@ -1,38 +1,31 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
// SPDX-License-Identifier: LicenseRef-QL-commercial
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
// This software is licensed under the terms of the Quantum Leaps commercial
// licenses. Please contact Quantum Leaps for more information about the
// available licensing options.
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// RESTRICTIONS
// You may NOT :
// (a) redistribute, encumber, sell, rent, lease, sublicense, or otherwise
// transfer rights in this software,
// (b) remove or alter any trademark, logo, copyright or other proprietary
// notices, legends, symbols or labels present in this software,
// (c) plagiarize this software to sidestep the licensing obligations.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-06
//! @version Last updated for: @ref qpc_8_0_0
//!
//! @file
//! @brief QS/C port to Win32 with GNU or Visual C++ compilers
#ifndef QS_PORT_H_
#define QS_PORT_H_

View File

@ -1,34 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// QWIN GUI facilities for building realistic embedded front panels
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//!
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_0_1
//!
//! @file
//! @brief QWIN GUI facilities for building realistic embedded front panels
//!
#include "qwin_gui.h"
#include <stdlib.h>

View File

@ -1,34 +1,32 @@
//============================================================================
// QP/C Real-Time Embedded Framework (RTEF)
// QWIN GUI facilities for building realistic embedded front panels
// Version 8.0.2
//
// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
//
// Q u a n t u m L e a P s
// ------------------------
// Modern Embedded Software
//
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
//
// This software is dual-licensed under the terms of the open source GNU
// General Public License version 3 (or any later version), or alternatively,
// under the terms of one of the closed source Quantum Leaps commercial
// licenses.
//
// The terms of the open source GNU General Public License version 3
// can be found at: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
// This software is dual-licensed under the terms of the open-source GNU
// General Public License (GPL) or under the terms of one of the closed-
// source Quantum Leaps commercial licenses.
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// NOTE:
// The GPL does NOT permit the incorporation of this code into proprietary
// programs. Please contact Quantum Leaps for commercial licensing options,
// which expressly supersede the GPL and are designed explicitly for
// closed-source distribution.
//
// Quantum Leaps contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//!
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_0_1
//!
//! @file
//! @brief QWIN GUI facilities for building realistic embedded front panels
//!
#ifndef QWIN_GUI_H
#define QWIN_GUI_H

View File

@ -22,11 +22,6 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2022-07-30
//! @version Last updated for: @ref qpc_7_1_3
//!
//! @file
//! @brief "safe" <stdio.h> and <string.h> facilities
#ifndef SAFE_STD_H
#define SAFE_STD_H

6895
qpc.qm

File diff suppressed because it is too large Load Diff

View File

@ -1,161 +0,0 @@
e0aae515ebf157d8993bb03747fdc86cd87604f3 *qpc.qm
e3c60b712a27e8f8c11e38711e785ffc4006cda5 *include/qequeue.h
a0d30600da64ec7aaadc6b9bd268c217930c3e60 *include/qk.h
84c8c1036c38f0f1646cc60e4813a7c8fb89f2d2 *include/qmpool.h
7ecec322b0b31b4175596df3a7968424b21f983e *include/qp.h
7a909dd01c0aa3fd7d74b4a4c88b930eeb0b815e *include/qp_pkg.h
0a3323af546e1b2320e6745e8e0effa837abdc53 *include/qpc.h
6796ebe4b41225fa374d751704e7edd2f95e0484 *include/qs.h
5a0c927370d332fc170e84650d980173da2102ae *include/qs_dummy.h
d57d1974f64db7e3bf8a9f4468ee84a42ccd4952 *include/qs_pkg.h
7458d62031562c2517577b258d47249b7b900dd7 *include/qsafe.h
2e0a56edcf460fcd82f6d7277e5fc0876325efeb *include/qstamp.h
d0199c9094039e672d85e9198ccff0d4ed9128cc *include/qv.h
fdfc7f528989ff3934af977ef9a1ee9fc30cd889 *include/qxk.h
5886c3a0831996cfbf7141255efb4e9f5b4d8254 *include/README.md
7f54a0933a9dc2fcaca475919fa0067667ed99ed *src/qf/CMakeLists.txt
6ff32793932a96e1240b2c9dbbc9516faf206fa6 *src/qf/qep_hsm.c
e5d93d4867336209c0d8e74cc4a9add1190b821a *src/qf/qep_msm.c
733bc8bf8e08014c20d8354efb98729857edb4cd *src/qf/qf_act.c
90e27f32bc8862946bfe4c6c376bf03327de25f7 *src/qf/qf_actq.c
8b58d43c5b8fe3b1b846392d1f7d99d5720428d9 *src/qf/qf_defer.c
eba579d6183310d9d0d07a14f28691b41ebaa921 *src/qf/qf_dyn.c
d263e3b91f9e5c61d6a458b5c6023ac68eb07a13 *src/qf/qf_mem.c
47ae6dfca8c983839aa6a58a8afdc819f2d3b1e2 *src/qf/qf_ps.c
2ed707166ca625a684c93147aec772dd568e5d9f *src/qf/qf_qact.c
e6e7dd46ed4ab7fb3ecd781ca29ea141d13f49d9 *src/qf/qf_qeq.c
f975ffcfadfed6856a41587b8275e0ea3bbe63a3 *src/qf/qf_qmact.c
e43dbda05f6fd6cbb8673d8ae5d1f8b183570f29 *src/qf/qf_time.c
878a737efe234f40dc8c9374acc351e510b4da1e *src/qk/CMakeLists.txt
5f092f2dc82962633e8ff32f736baaf04ef4c5da *src/qk/qk.c
68c99a2991d25df7486e57edadaa955b2bda396d *src/qs/CMakeLists.txt
8cb434d345ef98a0915eadd97f7959987d66ff89 *src/qs/qs.c
e8ee51e5776c38f9dfdc06f87ab2b1f00bb45fd4 *src/qs/qs_64bit.c
14e1f08b94f65cc1d043051f829280e7f3ae057a *src/qs/qs_fp.c
4e3d64f109f5f8de67799a190f505d1fa29d622a *src/qs/qs_rx.c
f055d938dd53c9baf7f5e04ad1bc4f4ec40044e9 *src/qs/qstamp.c
afe015fd804a563aedd4080d389ef143a1a9ce40 *src/qs/qutest.c
b1d2def9b8f6cde464170af7682ab0f01f4f40f6 *src/qv/CMakeLists.txt
f77a3c93938c5ff9a37214bdfe1c7c255f9eed6e *src/qv/qv.c
de32deac900990db561238c22e6961e2c3ca4eac *src/qxk/qxk.c
fff73b289cb59e10ae491907e4bb48bbffb90946 *src/qxk/qxk_mutex.c
822dafde2328e17531a8c4df752e8e0b29a6f2c8 *src/qxk/qxk_sema.c
49b36eef14ecffad5583efb1c7b2208cc0fc055d *src/qxk/qxk_xthr.c
09c4447840e6b67c4f6adef68e13013abb87a69e *ports/arm-cm/qk/armclang/qk_port.c
4e8a047094569163fc6826ee33435476b55b8b06 *ports/arm-cm/qk/armclang/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qk/armclang/qs_port.h
061bb4b5f82fcee28c34441ed22287bcf7b294ab *ports/arm-cm/qk/gnu/qk_port.c
df8f0dfeb5b459c0a0da34584ac6f67c3ddcee99 *ports/arm-cm/qk/gnu/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qk/gnu/qs_port.h
b3bd86c8a739243aad85abb94e992ed83d3fe2cb *ports/arm-cm/qk/iar/qk_port.c
9b0833336729666744ac35ca42b85d57756ba8fa *ports/arm-cm/qk/iar/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qk/iar/qs_port.h
0a1f794005df1b7c256f52781928f86cb5dd96f9 *ports/arm-cm/qv/armclang/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qv/armclang/qs_port.h
050f16532d529cac3c20e990f1df40246b04c9ac *ports/arm-cm/qv/armclang/qv_port.c
0a1f794005df1b7c256f52781928f86cb5dd96f9 *ports/arm-cm/qv/gnu/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qv/gnu/qs_port.h
c8289ae7c23524d13f4680a839f9088aa9264200 *ports/arm-cm/qv/gnu/qv_port.c
3448a1cff7b1f10239a80e3191953ac018416bfd *ports/arm-cm/qv/iar/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qv/iar/qs_port.h
a5ffa52d6c2249bd4a3aaca9f8e4d55553aad374 *ports/arm-cm/qv/iar/qv_port.c
030f0e57e8565902d9feaec653b28980dfbb25e2 *ports/arm-cm/qxk/armclang/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qxk/armclang/qs_port.h
0134e96053a73cf2deab3f8aee2a253464da473d *ports/arm-cm/qxk/armclang/qxk_port.c
7f8806496c7aaa7ee212f00be7a80170d1cfe1c5 *ports/arm-cm/qxk/gnu/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qxk/gnu/qs_port.h
ddec778d8a73f663a5d959dec0afb2ced792e0ef *ports/arm-cm/qxk/gnu/qxk_port.c
02eee6cc5894c554358c573d7d9e159bb3b3b3a2 *ports/arm-cm/qxk/iar/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qxk/iar/qs_port.h
624c3bb9e77359cc1fd8e78b6505bd1246a09f7a *ports/arm-cm/qxk/iar/qxk_port.c
663b8e89a0ef61bbdd305984e14f971f889b3592 *ports/arm-cm/qutest/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cm/qutest/qs_port.h
a53c0064a8650a9b7217259817a60cd67688606a *ports/arm-cr/qk/gnu/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qk/gnu/qs_port.h
88d3ed754f05c43609ecf52767c270fa438ecd03 *ports/arm-cr/qk/iar/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qk/iar/qs_port.h
e03d1c780c764e2a323b8423ae5045e226ee98c6 *ports/arm-cr/qk/ti/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qk/ti/qs_port.h
a5c1f6cbb41d1884a6bfdaf4ccc1c7facb79c8eb *ports/arm-cr/qv/gnu/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qv/gnu/qs_port.h
da079ffa59b518ead25ed8aed82adc1535fc0280 *ports/arm-cr/qv/iar/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qv/iar/qs_port.h
b6a6e866be5f4ac5bfc961aee3c466a755b9cd03 *ports/arm-cr/qv/ti/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/arm-cr/qv/ti/qs_port.h
68b3a558e7e3e22477abf917ef5f87f1b424f9e5 *ports/msp430/qk/qp_port.h
a99dfb36c107e6c1b2fcc345792130bbc1ebcc4f *ports/msp430/qk/qs_port.h
39dceae58da3feab8f34e4597d63e72e4f8084e2 *ports/msp430/qv/qp_port.h
a99dfb36c107e6c1b2fcc345792130bbc1ebcc4f *ports/msp430/qv/qs_port.h
1459908255dbdd581cd38bd5ea33a121fce496b7 *ports/msp430/qutest/qp_port.h
a99dfb36c107e6c1b2fcc345792130bbc1ebcc4f *ports/msp430/qutest/qs_port.h
ecc7c04f015684c71bbaca3e351b8f7cbcdcc550 *ports/config/qp_config.h
2ee7f5594f6121705bbc57145175b5c5867e0070 *ports/embos/CMakeLists.txt
7cfd0e233fc7ee4c73cccaa58f769f3643325785 *ports/embos/qf_port.c
a378ac45d230fc61b4462b3cc17a05d018271ea7 *ports/embos/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/embos/qs_port.h
e65838e1764bd6b4eb73025be1e8116ac28247b2 *ports/freertos/CMakeLists.txt
743a22c5deedeca8216fb2109174cc4c81573804 *ports/freertos/qf_port.c
1563d37772cf1cd0bddca356d49ee9805401f2cd *ports/freertos/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/freertos/qs_port.h
a01e1f6d49ce056ac4e130d54ae4724fda2ebf32 *ports/threadx/CMakeLists.txt
be313a1d4350f28274fcb6b0dcdebf5279f40c71 *ports/threadx/qf_port.c
0aeea704b1cfac4e956e14e529dddf7759acde04 *ports/threadx/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/threadx/qs_port.h
847cd324346d1d6c9c81422e99045442edcc7f64 *ports/threadx/README.md
d9b6e1ca7a0215a3e141ae43970781d0f4d0d08f *ports/uc-os2/CMakeLists.txt
30411991988667532a2432a80fa25aff2c451384 *ports/uc-os2/qf_port.c
6223846204fb35ba9c9da56bb7d686fbf19d375c *ports/uc-os2/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *ports/uc-os2/qs_port.h
4a5da9508e2012b2ca3943b87134163e558964cc *ports/qep-only/CMakeLists.txt
cdb7c42a17fb3c5f282a55e08f99678e1cd56c0e *ports/qep-only/qp_port.h
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/qep-only/safe_std.h
5d7914dfaf44a9c2552afdd5d8de4cfc3ebbc22a *ports/posix/CMakeLists.txt
6b9d862537f4823ca83c81d2e8892da9711a69cd *ports/posix/qf_port.c
78563f44b3d4b7835a75ef9dd3eea00e38f61946 *ports/posix/qp_port.h
51d89a3fa8c7a6c5858f6354ea8cc350e42a9d30 *ports/posix/qs_port.c
d05889780d358bb1fe02ffad1a9414332f5eb300 *ports/posix/qs_port.h
6e33b2e5092d117f58c47b632c59420f382ac39f *ports/posix/README.md
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/posix/safe_std.h
039b1e4066eb7eeac3233070ad6aa2cd9f6d1c69 *ports/posix-qv/CMakeLists.txt
2b432fddb2bb9a9912db1c0f6e1ceada35323365 *ports/posix-qv/qf_port.c
b73738f7297d6c023012d98c59c901a1e8951f02 *ports/posix-qv/qp_port.h
51d89a3fa8c7a6c5858f6354ea8cc350e42a9d30 *ports/posix-qv/qs_port.c
d05889780d358bb1fe02ffad1a9414332f5eb300 *ports/posix-qv/qs_port.h
ab829eb3deed2bc84b3581610f1664777afd3841 *ports/posix-qv/README.md
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/posix-qv/safe_std.h
1ecb2095e8de486c8111a420b5511a4ea0cb097c *ports/posix-qutest/CMakeLists.txt
d55172d4bb6959349285a06ca6485f1f1a1b756e *ports/posix-qutest/qp_port.h
d05889780d358bb1fe02ffad1a9414332f5eb300 *ports/posix-qutest/qs_port.h
243941959b1dbf5dfbbe57941104ae202eec57fc *ports/posix-qutest/qutest_port.c
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/posix-qutest/safe_std.h
cfea17ea9ab718e9e4f506e90c4b2fc8c1fea858 *ports/win32/CMakeLists.txt
a99784fa31b0466af740186bbe96f8d78fc7c17a *ports/win32/qf_port.c
d0b7e944e6df828e040ec146f639e42be2c354d5 *ports/win32/qp_port.h
d86809f52df1ab5be11ed12dfb3b8ef4cb4fd6db *ports/win32/qs_port.c
b1a67eb489d35d71cf6fb40fc8f087906839f1a7 *ports/win32/qs_port.h
8d3500b2b8700f5aa925f7020631d7d1415bd028 *ports/win32/qwin_gui.c
04f62b5f1812de29bfb0619af1fc04ec44256802 *ports/win32/qwin_gui.h
3781ccdce31dea9d08493a801926eb278950786f *ports/win32/README.md
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/win32/safe_std.h
8d589868e287ceb185b4837064c80d4eed8e1a44 *ports/win32-qv/CMakeLists.txt
d6706afb9a3b11f6aad510f16ec1ed9665b98633 *ports/win32-qv/qf_port.c
20249cc3927858f7d457433e64be963df0baddf7 *ports/win32-qv/qp_port.h
d86809f52df1ab5be11ed12dfb3b8ef4cb4fd6db *ports/win32-qv/qs_port.c
b1a67eb489d35d71cf6fb40fc8f087906839f1a7 *ports/win32-qv/qs_port.h
77d78e462a3ac8fac9c75fd97720500ceb449664 *ports/win32-qv/qwin_gui.c
be15234e51b8fe3c295ff644e84fbc1cfca89257 *ports/win32-qv/qwin_gui.h
b57cec85e2fe5c261270f68acc3ae440802a62bd *ports/win32-qv/README.md
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/win32-qv/safe_std.h
a04f13d2d9f24ef71d95f997d87f8a3ba9862e45 *ports/win32-qutest/CMakeLists.txt
50be2b5d49345d908290a4660b1bbc5eaeb6b4d6 *ports/win32-qutest/qp_port.h
b1a67eb489d35d71cf6fb40fc8f087906839f1a7 *ports/win32-qutest/qs_port.h
1d850be2190dd03f528405266ba85f81e9ecff53 *ports/win32-qutest/qutest_port.c
5189dfad3fea0ccb2218958dd3657f4403674b5e *ports/win32-qutest/safe_std.h
848a30efa3274ff30fb72059f926fe7963ab2321 *zephyr/CMakeLists.txt
10764710e545dd4d2ce0ddf032711df7f9191937 *zephyr/Kconfig
2eb2a922e18b4760a68151ebee1b6282d20b4692 *zephyr/module.yml
c691294aa02303c2d74c0b4fa62c2296491d1d15 *zephyr/qf_port.c
109c291df50110f185adc17bcdf8becc0a79346c *zephyr/qp-zephyr.jpg
abe4afc842977359a1bb63a76b765aed65b64def *zephyr/qp_port.h
e48b7af7dff7cfe6742abbb4adb0d1b01b2020cb *zephyr/qs_port.h
ab487299b61fea18e2926913048a4498b3bfa4b4 *zephyr/README.md

162
qpc_8.0.2.sha1 Normal file
View File

@ -0,0 +1,162 @@
66333dd47b999c878440d0419638bfc481dcfa2d *include/qequeue.h
e97955fabb532865a6a15409eef15645d627ed96 *include/qk.h
63aa17cfee22188219be96d8736e4f3d443f4ca9 *include/qmpool.h
c0882e529d8aba6f860d4d9dc353cb4893d6970a *include/qp.h
29d33dd6ee2b03dac725bf50938dd5e6d0655f46 *include/qp_pkg.h
12cb1f8910ec1c4a3a0af5b01deb68bba74b119e *include/qpc.h
1609ca880f322b074eb63767d7c704be26a69769 *include/qs.h
ef92a02258673672dde6ffeaec820ae9ec6a0f95 *include/qs_dummy.h
18b1497a755d0dab5e3fb0e88dd3de4cfdb1aced *include/qs_pkg.h
cf142966637ce4c4ae831017e8a77fb1fe3a678a *include/qsafe.h
5bd2b79056d2c55811b375de3e643425485e1a76 *include/qstamp.h
1fd9c43acda827d86090a8f2e6ab95158351eead *include/qv.h
9dd5c494ccacfe8739857ae50d1a95e57d028650 *include/qxk.h
5886c3a0831996cfbf7141255efb4e9f5b4d8254 *include/README.md
7f54a0933a9dc2fcaca475919fa0067667ed99ed *src/qf/CMakeLists.txt
03ee8c47f280c10c29260c3af745ea145943f6c4 *src/qf/qep_hsm.c
8a1bbf59511c7e4bc048672c869280ebc6e39619 *src/qf/qep_msm.c
e8f7d8dcd8b668b10dfd2b6d8c5e94fc42d6bc02 *src/qf/qf_act.c
402996322cf90d1a256b1a65edc5df189664abfb *src/qf/qf_actq.c
33b348c45cd218a4c7d74acaed1c26e87b3f0d52 *src/qf/qf_defer.c
f1735b336c11049a2e00bb0bc2a518047b2ac1ce *src/qf/qf_dyn.c
7af95508fbcad60e6dc031e33bcbdc803b764ed0 *src/qf/qf_mem.c
27ac315463a0108f4e3c58cbea090ceb8da8bc00 *src/qf/qf_ps.c
96ada1ea4ee23342f79d2b0608d930a829a2790a *src/qf/qf_qact.c
f7e4046dcd5440f375884d743afcbc62289e2e9f *src/qf/qf_qeq.c
d466792e96d60b3ff5e01c7ec858b031888b6cd1 *src/qf/qf_qmact.c
f8aa87ddaa1e6b74196070e7208571a621a9d70e *src/qf/qf_time.c
878a737efe234f40dc8c9374acc351e510b4da1e *src/qk/CMakeLists.txt
cfd0869773fbddeae359b123ba98f335f89d71ce *src/qk/qk.c
68c99a2991d25df7486e57edadaa955b2bda396d *src/qs/CMakeLists.txt
c1257fbf29a2bfbf476fde5dba3e9d53859a932f *src/qs/qs.c
c0ffe200944d4cc3ace073a1028bfccdbb957875 *src/qs/qs_64bit.c
5f18c87dd1774d62a77d2ea586109c4159401d70 *src/qs/qs_fp.c
b052ff2d8dbc40f3c347e2548e74ed582d95e6ef *src/qs/qs_rx.c
b087ea69dfd8c370b9d43d114e3de4caf5d10775 *src/qs/qstamp.c
717bffc3ab94bff47f54c94b2e1f82ff00949b7e *src/qs/qutest.c
b1d2def9b8f6cde464170af7682ab0f01f4f40f6 *src/qv/CMakeLists.txt
7295ed9e23dbde7787caf3e486f839080f6f47b2 *src/qv/qv.c
405f00d17b9e0a04d239c7ed216ed4dabb9b09f6 *src/qxk/qxk.c
353d1aa3b530af4e90c9c07f08cff4ddca9b1929 *src/qxk/qxk_mutex.c
e992d1204cfceac7fce4c3f699f4f77787b8811e *src/qxk/qxk_sema.c
fd29eed9e089ae2a2d65cd9a615fb7b5111debb7 *src/qxk/qxk_xthr.c
0e330d6ac8fb04f3b7dac15dc2edc45ab69005fd *ports/arm-cm/config/qp_config.h
bbd400817341d34b7aba9f31eaf5804d931b5de1 *ports/arm-cm/qk/armclang/qk_port.c
caaf801e9f7bbcc6b8fb3664d58da2df53f53f51 *ports/arm-cm/qk/armclang/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qk/armclang/qs_port.h
9c0cd53ce9ab526113a585c89e0cd25bc6d12236 *ports/arm-cm/qk/gnu/qk_port.c
caaf801e9f7bbcc6b8fb3664d58da2df53f53f51 *ports/arm-cm/qk/gnu/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qk/gnu/qs_port.h
f79b4f199a4c92dd9423921449c52af9b64d633b *ports/arm-cm/qk/iar/qk_port.c
12dca6dbdc7511af283b5d80fb79d6771e54f5bc *ports/arm-cm/qk/iar/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qk/iar/qs_port.h
8cf14894789bb7c99f0f0940340d28becb1a308d *ports/arm-cm/qv/armclang/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qv/armclang/qs_port.h
6c41eeb2fe40fa017f2e3c2a550bd5758b576ab7 *ports/arm-cm/qv/armclang/qv_port.c
8cf14894789bb7c99f0f0940340d28becb1a308d *ports/arm-cm/qv/gnu/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qv/gnu/qs_port.h
905b5063994ea2ff6ce12a1c8d51006789cb3f45 *ports/arm-cm/qv/gnu/qv_port.c
deb66c87f75b5af52d14ab3a2449a9b68b6f1024 *ports/arm-cm/qv/iar/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qv/iar/qs_port.h
efca09f53ba5dee0b7e93947939ef654ed7d4ff6 *ports/arm-cm/qv/iar/qv_port.c
5172ce6e18f7e2083b042b5dc0fcc4b6ce40a403 *ports/arm-cm/qxk/armclang/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qxk/armclang/qs_port.h
60773cce000c3a00c34194aa415c981d60ab4d05 *ports/arm-cm/qxk/armclang/qxk_port.c
5172ce6e18f7e2083b042b5dc0fcc4b6ce40a403 *ports/arm-cm/qxk/gnu/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qxk/gnu/qs_port.h
e24e90e959d8b28e685c08c34f8b487125da4458 *ports/arm-cm/qxk/gnu/qxk_port.c
3cdf8223edd056f5aaa4254eb6de80d73a9de767 *ports/arm-cm/qxk/iar/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qxk/iar/qs_port.h
e3a4f1f86a0fbe2718381dec81f6e57e58ddab07 *ports/arm-cm/qxk/iar/qxk_port.c
9ab1ac34865644e85d5b7a7c19f58e9d64eaef93 *ports/arm-cm/qutest/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cm/qutest/qs_port.h
71a243c9345c2986d896bff1ae756bcde326cdda *ports/arm-cr/config/qp_config.h
219b6c1c437959ebbc2f5e5430d8b86957d67eac *ports/arm-cr/qk/gnu/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qk/gnu/qs_port.h
1663a960814e4a7a8d2db95aa25aab0ff273823d *ports/arm-cr/qk/iar/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qk/iar/qs_port.h
6989b54951445d8797fc98a5e0bb708e1e0a900a *ports/arm-cr/qk/ti/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qk/ti/qs_port.h
3eadaeda538ccb4bf2458bb39d8412ec1191cd99 *ports/arm-cr/qv/gnu/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qv/gnu/qs_port.h
b177a95edac0d8db21ae9fb45a7147ab13943e0d *ports/arm-cr/qv/iar/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qv/iar/qs_port.h
8cbe00552dce187aaa0add875a9b3920ff200e70 *ports/arm-cr/qv/ti/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/arm-cr/qv/ti/qs_port.h
bf1e8bde3e5a5ec984d840fdb87c7e7d511fd19d *ports/msp430/qk/qp_port.h
15a126600fca9ca9cdacb1384b6c9b56d46d6cd1 *ports/msp430/qk/qs_port.h
6e1183c72de053848d3c6c4e3e5cd758898b0759 *ports/msp430/qv/qp_port.h
15a126600fca9ca9cdacb1384b6c9b56d46d6cd1 *ports/msp430/qv/qs_port.h
319887535b798cbd799a7201cbd6f86acc597dce *ports/msp430/qutest/qp_port.h
15a126600fca9ca9cdacb1384b6c9b56d46d6cd1 *ports/msp430/qutest/qs_port.h
496eac74a77a1280f07e58aeb20603a89fd8bb60 *ports/config/qp_config.h
2ee7f5594f6121705bbc57145175b5c5867e0070 *ports/embos/CMakeLists.txt
c89b93be587f7adcec43930304c9ae5fde0b4481 *ports/embos/qf_port.c
35807bc606a0334ff45d75ae094468242e1bad05 *ports/embos/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/embos/qs_port.h
e65838e1764bd6b4eb73025be1e8116ac28247b2 *ports/freertos/CMakeLists.txt
55387dfccb6f0f2e724c0674635784b85a86595a *ports/freertos/qf_port.c
9ae6e269d706c81aa955a81857e2044a341f3d4f *ports/freertos/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/freertos/qs_port.h
a01e1f6d49ce056ac4e130d54ae4724fda2ebf32 *ports/threadx/CMakeLists.txt
e046b9206a2e8d06465b7240d41622a1a79a260e *ports/threadx/qf_port.c
174dcf1ecf745e195647e1c630593528247a501b *ports/threadx/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/threadx/qs_port.h
847cd324346d1d6c9c81422e99045442edcc7f64 *ports/threadx/README.md
d9b6e1ca7a0215a3e141ae43970781d0f4d0d08f *ports/uc-os2/CMakeLists.txt
f295018c8808aa09f1033654244140c3297b8f2b *ports/uc-os2/qf_port.c
afd0a40b566c9c0672c18fe95f39e5941b1e2bae *ports/uc-os2/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *ports/uc-os2/qs_port.h
4a5da9508e2012b2ca3943b87134163e558964cc *ports/qep-only/CMakeLists.txt
acc6603e5ff3d1bef767c9770a9a80f6dc381898 *ports/qep-only/qp_port.h
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/qep-only/safe_std.h
5d7914dfaf44a9c2552afdd5d8de4cfc3ebbc22a *ports/posix/CMakeLists.txt
d2582a682a4ee053994a3b9d623965c7cd98e498 *ports/posix/qf_port.c
ee091d4bef409dd28113d941833ccfba42976422 *ports/posix/qp_port.h
faaa0c0b286f7acc6265ae50f0671afb838563de *ports/posix/qs_port.c
3a91e923b22fa0cfe3ca12d23d0679e132b21b2c *ports/posix/qs_port.h
6e33b2e5092d117f58c47b632c59420f382ac39f *ports/posix/README.md
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/posix/safe_std.h
039b1e4066eb7eeac3233070ad6aa2cd9f6d1c69 *ports/posix-qv/CMakeLists.txt
5ca7b69ed61ba195867ca3be818ee1eb8ceab51e *ports/posix-qv/qf_port.c
048b213bc1af84b0e3c29fce3c58e21939c3938d *ports/posix-qv/qp_port.h
faaa0c0b286f7acc6265ae50f0671afb838563de *ports/posix-qv/qs_port.c
3a91e923b22fa0cfe3ca12d23d0679e132b21b2c *ports/posix-qv/qs_port.h
ab829eb3deed2bc84b3581610f1664777afd3841 *ports/posix-qv/README.md
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/posix-qv/safe_std.h
1ecb2095e8de486c8111a420b5511a4ea0cb097c *ports/posix-qutest/CMakeLists.txt
5fb0c6b9a07b67d3b74c8b3ca41f03b1dc2dde7d *ports/posix-qutest/qp_port.h
3a91e923b22fa0cfe3ca12d23d0679e132b21b2c *ports/posix-qutest/qs_port.h
18a858d16ae0e769a7993e6dc94bf420f32d49fc *ports/posix-qutest/qutest_port.c
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/posix-qutest/safe_std.h
cfea17ea9ab718e9e4f506e90c4b2fc8c1fea858 *ports/win32/CMakeLists.txt
d628226105618402813ee97a58e54bdbb0058c9a *ports/win32/qf_port.c
5dabd3c775276804fc65ed4395385765e0d9ca0f *ports/win32/qp_port.h
c55c3bff64ad2a47691104a6d927914006286f47 *ports/win32/qs_port.c
7109827ba2c76667d61a445d8a22219a9627b28f *ports/win32/qs_port.h
1cde650008ea5d867daa3bc0f4f4ada7365dacba *ports/win32/qwin_gui.c
4c44c6fe98ae54634a7216a885b091c08f9f1735 *ports/win32/qwin_gui.h
3781ccdce31dea9d08493a801926eb278950786f *ports/win32/README.md
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/win32/safe_std.h
8d589868e287ceb185b4837064c80d4eed8e1a44 *ports/win32-qv/CMakeLists.txt
6658b9e823fe2a031cd26def2c080f8264cf3e0b *ports/win32-qv/qf_port.c
c02fab4c658ecbb53e86256b84a8f61b7f3e20c9 *ports/win32-qv/qp_port.h
c55c3bff64ad2a47691104a6d927914006286f47 *ports/win32-qv/qs_port.c
7109827ba2c76667d61a445d8a22219a9627b28f *ports/win32-qv/qs_port.h
1cde650008ea5d867daa3bc0f4f4ada7365dacba *ports/win32-qv/qwin_gui.c
4c44c6fe98ae54634a7216a885b091c08f9f1735 *ports/win32-qv/qwin_gui.h
b57cec85e2fe5c261270f68acc3ae440802a62bd *ports/win32-qv/README.md
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/win32-qv/safe_std.h
a04f13d2d9f24ef71d95f997d87f8a3ba9862e45 *ports/win32-qutest/CMakeLists.txt
3b580c033d3a0cadc6b2f10fd215d5c30779b3fe *ports/win32-qutest/qp_port.h
7109827ba2c76667d61a445d8a22219a9627b28f *ports/win32-qutest/qs_port.h
30af4a5587b6efdfc7bd914962ba9b8f93c27d6b *ports/win32-qutest/qutest_port.c
54391d2a37ed3bce69e90ccfd8615ca736628c3e *ports/win32-qutest/safe_std.h
848a30efa3274ff30fb72059f926fe7963ab2321 *zephyr/CMakeLists.txt
10764710e545dd4d2ce0ddf032711df7f9191937 *zephyr/Kconfig
2eb2a922e18b4760a68151ebee1b6282d20b4692 *zephyr/module.yml
2dcf544afc6feb5dbb743a39576a96121b49ac2e *zephyr/qf_port.c
109c291df50110f185adc17bcdf8becc0a79346c *zephyr/qp-zephyr.jpg
1bdb624c82e926095052e4629cd1a8f44bce93d3 *zephyr/qp_port.h
86c87e41ed3ef19e785585e145e95efa50dbec21 *zephyr/qs_port.h
ab487299b61fea18e2926913048a4498b3bfa4b4 *zephyr/README.md

Some files were not shown because too many files have changed in this diff Show More