QP/C++ framework. More...
Namespaces | |
namespace | QF |
QF Active Object Framework. | |
namespace | QK |
preemptive, non-blocking kernel | |
namespace | QS |
QP/Spy software tracing (target-resident components) | |
namespace | QV |
non-preemptive kernel | |
namespace | QXK |
preemptive, dual-mode (non-blocking / blocking) kernel | |
Classes | |
class | QActive |
Active object class (based on the QHsm implementation strategy) More... | |
class | QActiveDummy |
Dummy Active Object for testing. More... | |
class | QAsm |
Abstract State Machine class (state machine interface) More... | |
union | QAsmAttr |
Attribute of for the QP::QAsm class (Abstract State Machine). More... | |
class | QEQueue |
Native QP event queue. More... | |
class | QEvt |
Event class. More... | |
struct | QFreeBlock |
Structure representing a free block in QP::QMPool. More... | |
class | QHsm |
Hierarchical State Machine class (QHsm-style state machine implementation strategy) More... | |
class | QHsmDummy |
Dummy HSM class for testing. More... | |
class | QMActive |
Active object class (based on QMsm implementation strategy) More... | |
class | QMPool |
Native QF Memory Pool. More... | |
class | QMsm |
Hierarchical State Machine class (QMsm-style state machine implementation strategy) More... | |
struct | QMState |
State object for the QP::QMsm class (QM State Machine). More... | |
struct | QMTranActTable |
Transition-Action Table for the QP::QMsm State Machine. More... | |
class | QPSet |
Set of Active Objects of up to QF_MAX_ACTIVE elements. More... | |
struct | QSpyId |
QS ID type for applying local filtering. More... | |
class | QSubscrList |
Subscriber List (for publish-subscribe) More... | |
class | QTicker |
"Ticker" Active Object class More... | |
class | QTimeEvt |
Time Event class. More... | |
class | QXMutex |
Blocking Mutex of the QXK preemptive kernel. More... | |
class | QXSemaphore |
Counting Semaphore of the QXK preemptive kernel. More... | |
class | QXThread |
eXtended (blocking) thread of the QXK preemptive kernel More... | |
Typedefs | |
using | QEQueueCtr = std::uint16_t |
using | QSchedStatus = std::uint_fast8_t |
using | QMPoolSize = std::uint16_t |
using | QMPoolCtr = std::uint16_t |
using | QSignal = std::uint16_t |
using | QState = std::uint_fast8_t |
using | QStateHandler = QState (*)(void * const me, QEvt const * const e) |
using | QActionHandler = QState (*)(void * const me) |
using | QXThreadHandler = void (*)(QXThread * const me) |
using | QPrioSpec = std::uint16_t |
using | QTimeEvtCtr = std::uint32_t |
using | QPSetBits = std::uint32_t |
using | QSpyFunPtr = void (*)() |
using | QSTimeCtr = std::uint32_t |
Functions | |
std::uint_fast8_t | QF_LOG2 (QP::QPSetBits x) noexcept |
void | QEvt_refCtr_inc_ (QEvt const *const e) noexcept |
void | QEvt_refCtr_dec_ (QEvt const *const e) noexcept |
Decrement the refCtr of a const event (requires casting const away) | |
Variables | |
constexpr char const | versionStr [] {QP_VERSION_STR} |
constexpr enum_t | Q_USER_SIG {4} |
constexpr std::uint8_t | TE_IS_LINKED = 1U << 7U |
constexpr std::uint8_t | TE_WAS_DISARMED = 1U << 6U |
constexpr std::uint8_t | TE_TICK_RATE = 0x0FU |
char const | BUILD_DATE [12] = __DATE__ |
char const | BUILD_TIME [9] = __TIME__ |
constexpr QTimeEvtCtr | QXTHREAD_NO_TIMEOUT {0U} |
QP/C++ framework.
using QP::QEQueueCtr = std::uint16_t |
The data type to store the ring-buffer counters based on the macro QF_EQUEUE_CTR_SIZE.
The dynamic range of this data type determines the maximum length of the ring buffer managed by the native QF event queue.
Definition at line 55 of file qequeue.hpp.
typedef std::uint_fast16_t QP::QSchedStatus = std::uint_fast8_t |
The scheduler lock status for QK::schedLock() and QK::schedUnlock()
The scheduler lock status for QP::QXK::schedLock() and QP::QXK::schedUnlock()
using QP::QMPoolSize = std::uint16_t |
The data type to store the block-size based on the macro QF_MPOOL_SIZ_SIZE.
The dynamic range of this data type determines the maximum size of blocks that can be managed by the native QF event pool.
Definition at line 58 of file qmpool.hpp.
using QP::QMPoolCtr = std::uint16_t |
The data type to store the block-counter based on the macro QF_MPOOL_CTR_SIZE.
The dynamic range of this data type determines the maximum number of blocks that can be stored in the pool.
Definition at line 68 of file qmpool.hpp.
using QP::QSignal = std::uint16_t |
The signal of event QP::QEvt
The relationship between an event and a signal is as follows. A signal in UML is the specification of an asynchronous stimulus that triggers reactions, and as such is an essential part of an event. (The signal conveys the type of the occurrence–what happened?) However, an event can also contain additional quantitative information about the occurrence in form of event parameters.
using QP::QState = std::uint_fast8_t |
using QP::QStateHandler = QState (*)(void * const me, QEvt const * const e) |
using QP::QActionHandler = QState (*)(void * const me) |
using QP::QXThreadHandler = void (*)(QXThread * const me) |
using QP::QPrioSpec = std::uint16_t |
Priority specification for Active Objects in QP.
Active Object priorities in QP are integer numbers in the range [1..QF_MAX_ACTIVE], whereas the special priority number 0 is reserved for the lowest-priority idle thread. The QP framework uses the direct priority numbering, in which higher numerical values denote higher urgency. For example, an AO with priority 32 has higher urgency than an AO with priority 23.
QP::QPrioSpec allows an application developer to assign two priorities to a given AO (see also Q_PRIO()):
In the QP native preemptive kernels, like QK, the "preemption-threshold" priority is used as to implement the "preemption-threshold scheduling" (PTS). It determines the conditions under which a given thread can be preempted by other threads. Specifically, a given thread can be preempted only by another thread with a higher priority than the "preemption-threshold" of the original thread.
using QP::QTimeEvtCtr = std::uint32_t |
Data type to store the block-size defined based on the macro QF_TIMEEVT_CTR_SIZE.
The dynamic range of this data type determines the maximum block size that can be managed by the pool.
using QP::QPSetBits = std::uint32_t |
using QP::QSpyFunPtr = void (*)() |
using QP::QSTimeCtr = std::uint32_t |
enum QP::QSpyPre : std::int8_t |
pre-defined QS record IDs
Enumerator | |
---|---|
QS_EMPTY | QS record for cleanly starting a session. |
QS_QEP_STATE_ENTRY | a state was entered |
QS_QEP_STATE_EXIT | a state was exited |
QS_QEP_STATE_INIT | an initial transition was taken in a state |
QS_QEP_INIT_TRAN | the top-most initial transition was taken |
QS_QEP_INTERN_TRAN | an internal transition was taken |
QS_QEP_TRAN | a regular transition was taken |
QS_QEP_IGNORED | an event was ignored (silently discarded) |
QS_QEP_DISPATCH | an event was dispatched (begin of RTC step) |
QS_QEP_UNHANDLED | an event was un-handled due to a guard |
QS_QF_ACTIVE_DEFER | AO deferred an event. |
QS_QF_ACTIVE_RECALL | AO recalled an event. |
QS_QF_ACTIVE_SUBSCRIBE | an AO subscribed to an event |
QS_QF_ACTIVE_UNSUBSCRIBE | an AO unsubscribed to an event |
QS_QF_ACTIVE_POST | an event was posted (FIFO) directly to AO |
QS_QF_ACTIVE_POST_LIFO | an event was posted (LIFO) directly to AO |
QS_QF_ACTIVE_GET | AO got an event and its queue is not empty. |
QS_QF_ACTIVE_GET_LAST | AO got an event and its queue is empty. |
QS_QF_ACTIVE_RECALL_ATTEMPT | AO attempted to recall an event. |
QS_QF_EQUEUE_POST | an event was posted (FIFO) to a raw queue |
QS_QF_EQUEUE_POST_LIFO | an event was posted (LIFO) to a raw queue |
QS_QF_EQUEUE_GET | get an event and queue still not empty |
QS_QF_EQUEUE_GET_LAST | get the last event from the queue |
QS_QF_NEW_ATTEMPT | an attempt to allocate an event failed |
QS_QF_MPOOL_GET | a memory block was removed from memory pool |
QS_QF_MPOOL_PUT | a memory block was returned to memory pool |
QS_QF_PUBLISH | an event was published to active objects |
QS_QF_NEW_REF | new event reference was created |
QS_QF_NEW | new event was created |
QS_QF_GC_ATTEMPT | garbage collection attempt |
QS_QF_GC | garbage collection |
QS_QF_TICK | QTimeEvt tick was called. |
QS_QF_TIMEEVT_ARM | a time event was armed |
QS_QF_TIMEEVT_AUTO_DISARM | a time event expired and was disarmed |
QS_QF_TIMEEVT_DISARM_ATTEMPT | attempt to disarm a disarmed QTimeEvt |
QS_QF_TIMEEVT_DISARM | true disarming of an armed time event |
QS_QF_TIMEEVT_REARM | rearming of a time event |
QS_QF_TIMEEVT_POST | a time event posted itself directly to an AO |
QS_QF_DELETE_REF | an event reference is about to be deleted |
QS_QF_CRIT_ENTRY | critical section was entered |
QS_QF_CRIT_EXIT | critical section was exited |
QS_QF_ISR_ENTRY | an ISR was entered |
QS_QF_ISR_EXIT | an ISR was exited |
QS_QF_INT_DISABLE | interrupts were disabled |
QS_QF_INT_ENABLE | interrupts were enabled |
QS_QF_ACTIVE_POST_ATTEMPT | attempt to post an evt to AO failed |
QS_QF_EQUEUE_POST_ATTEMPT | attempt to post evt to QEQueue failed |
QS_QF_MPOOL_GET_ATTEMPT | attempt to get a memory block failed |
QS_SCHED_PREEMPT | scheduler asynchronously preempted a task |
QS_SCHED_RESTORE | scheduler restored preempted task |
QS_SCHED_LOCK | scheduler was locked |
QS_SCHED_UNLOCK | scheduler was unlocked |
QS_SCHED_NEXT | scheduler started next task |
QS_SCHED_IDLE | scheduler restored the idle task |
QS_ENUM_DICT | enumeration dictionary entry |
QS_QEP_TRAN_HIST | a tran. to history was taken |
QS_QEP_TRAN_EP | a tran. to entry point into a submachine |
QS_QEP_TRAN_XP | a tran. to exit point out of a submachine |
QS_TEST_PAUSED | test has been paused |
QS_TEST_PROBE_GET | reports that Test-Probe has been used |
QS_SIG_DICT | signal dictionary entry |
QS_OBJ_DICT | object dictionary entry |
QS_FUN_DICT | function dictionary entry |
QS_USR_DICT | user QS record dictionary entry |
QS_TARGET_INFO | reports the Target information |
QS_TARGET_DONE | reports completion of a user callback |
QS_RX_STATUS | reports QS data receive status |
QS_QUERY_DATA | reports the data from "current object" query |
QS_PEEK_DATA | reports the data from the PEEK query |
QS_ASSERT_FAIL | assertion failed in the code |
QS_QF_RUN | QF_run() was entered. |
QS_SEM_TAKE | a semaphore was taken by a thread |
QS_SEM_BLOCK | a semaphore blocked a thread |
QS_SEM_SIGNAL | a semaphore was signaled |
QS_SEM_BLOCK_ATTEMPT | a semaphore blocked was attempted |
QS_MTX_LOCK | a mutex was locked |
QS_MTX_BLOCK | a mutex blocked a thread |
QS_MTX_UNLOCK | a mutex was unlocked |
QS_MTX_LOCK_ATTEMPT | a mutex lock was attempted |
QS_MTX_BLOCK_ATTEMPT | a mutex blocking was attempted |
QS_MTX_UNLOCK_ATTEMPT | a mutex unlock was attempted |
QS_PRE_MAX | the # predefined signals |
enum QP::QSpyGroups : std::int16_t |
QS-TX record groups for QS_GLB_FILTER()
Enumerator | |
---|---|
QS_ALL_RECORDS | all maskable QS records |
QS_SM_RECORDS | State Machine QS records. |
QS_AO_RECORDS | Active Object QS records. |
QS_EQ_RECORDS | Event Queues QS records. |
QS_MP_RECORDS | Memory Pools QS records. |
QS_TE_RECORDS | Time Events QS records. |
QS_QF_RECORDS | |
QS_SC_RECORDS | Scheduler QS records. |
QS_SEM_RECORDS | Semaphore QS records. |
QS_MTX_RECORDS | Mutex QS records. |
QS_U0_RECORDS | User Group 100-104 records. |
QS_U1_RECORDS | User Group 105-109 records. |
QS_U2_RECORDS | User Group 110-114 records. |
QS_U3_RECORDS | User Group 115-119 records. |
QS_U4_RECORDS | User Group 120-124 records. |
QS_UA_RECORDS | All User records. |
enum QP::QSpyUserOffsets : std::int16_t |
QS user record group offsets for QS_GLB_FILTER()
Enumerator | |
---|---|
QS_USER | the first record available to QS users |
QS_USER0 | offset for User Group 0 |
QS_USER1 | offset for User Group 1 |
QS_USER2 | offset for User Group 2 |
QS_USER3 | offset for User Group 3 |
QS_USER4 | offset for User Group 4 |
enum QP::QSpyIdOffsets : std::int16_t |
QS ID offsets for QS_LOC_FILTER()
Enumerator | |
---|---|
QS_AO_ID | offset for AO priorities |
QS_EP_ID | offset for event-pool IDs |
QS_EQ_ID | offset for event-queue IDs |
QS_AP_ID | offset for Application-specific IDs |
enum QP::QSpyIdGroups : std::int16_t |
QS ID groups for QS_LOC_FILTER()
Enumerator | |
---|---|
QS_ALL_IDS | all QS IDs |
QS_AO_IDS | AO IDs (priorities) |
QS_EP_IDS | event-pool IDs |
QS_EQ_IDS | event-queue IDs |
QS_AP_IDS | Application-specific IDs. |
|
noexcept |
Definition at line 100 of file qf_act.cpp.
|
inlinenoexcept |
Increment the refCtr of a const event (requires casting const
away)
Backward Traceability
Definition at line 92 of file qp_pkg.hpp.
|
inlinenoexcept |
Decrement the refCtr of a const event (requires casting const
away)
Backward Traceability
Definition at line 96 of file qp_pkg.hpp.
|
constexpr |
|
constexpr |
Definition at line 88 of file qp_pkg.hpp.
|
constexpr |
Definition at line 89 of file qp_pkg.hpp.
|
constexpr |
Definition at line 90 of file qp_pkg.hpp.
char const QP::BUILD_DATE = __DATE__ |
Definition at line 46 of file qstamp.cpp.
char const QP::BUILD_TIME = __TIME__ |
Definition at line 47 of file qstamp.cpp.
|
constexpr |