QP/C++ framework.
Namespaces | |
namespace | QF |
hierarchical event processor and active object framework | |
namespace | QK |
preemptive, non-blocking kernel | |
namespace | QS |
"QP/Spy" software tracing (target-resident components) | |
namespace | QV |
cooperative, non-preemptive kernel | |
namespace | QXK |
preemptive, dual-mode (non-blocking / blocking) kernel | |
Classes | |
class | QActive |
QP::QActive active object class (based on the QP::QHsm-style implementation strategy) More... | |
class | QActiveDummy |
Dummy Active Object class for testing (inherits QP::QActive) More... | |
class | QEQueue |
Native QF Event Queue class. More... | |
class | QEvt |
Event class. More... | |
struct | QFreeBlock |
Structure representing a free block in the Native QF Memory Pool. More... | |
class | QHsm |
Hierarchical State Machine abstract base class (ABC) More... | |
union | QHsmAttr |
Attribute of for the QP::QHsm class (Hierarchical State Machine) More... | |
class | QHsmDummy |
Dummy HSM class for testing (inherits QP::QHsm) More... | |
class | QMActive |
QMActive active object (based on QP::QMsm implementation) More... | |
class | QMPool |
Native QF memory pool class. More... | |
class | QMsm |
QM 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 |
Priority Set of up to QF_MAX_ACTIVE elements. More... | |
struct | QSpyId |
QS ID type for applying local filtering. More... | |
class | QTicker |
"Ticker" Active Object class (inherits QP::QActive) More... | |
class | QTimeEvt |
Time Event class (inherits QP:QEvt) More... | |
class | QXMutex |
Blocking, Priority-Ceiling Mutex 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 | QSignal = std::uint16_t |
QSignal represents the signal of an event. | |
using | QState = std::uint_fast8_t |
Type returned from state-handler functions. | |
using | QStateHandler = QState(*)(void *const me, QEvt const *const e) |
Pointer to state-handler function. | |
using | QActionHandler = QState(*)(void *const me) |
Pointer to an action-handler function. | |
using | QXThreadHandler = void(*)(QXThread *const me) |
Pointer to an extended thread-handler function. | |
using | QEQueueCtr = std::uint16_t |
using | QPSetBits = std::uint32_t |
using | QTimeEvtCtr = std::uint32_t |
using | QPrioSpec = std::uint16_t |
Priority specification for Active Objects in QP. | |
using | QSchedStatus = std::uint_fast16_t |
The scheduler lock status used in some real-time kernels. | |
using | QSubscrList = QPSet |
Subscriber List (for publish-subscribe) | |
using | QMPoolSize = std::uint16_t |
The data type to store the block-size based on the macro QF_MPOOL_SIZ_SIZE. | |
using | QMPoolCtr = std::uint16_t |
The data type to store the block-counter based on the macro QF_MPOOL_CTR_SIZE. | |
using | QSCtr = std::uint16_t |
QS ring buffer counter and offset type. | |
using | QSTimeCtr = std::uint32_t |
QS time stamp type, which determines the dynamic range of QS time stamps. | |
using | QSpyFunPtr = void(*)() |
function pointer type for fun_dict_pre_() | |
Functions | |
void | QEvt_refCtr_inc_ (QEvt const *const e) noexcept |
increment the refCtr_ of an event e | |
void | QEvt_refCtr_dec_ (QEvt const *const e) noexcept |
decrement the refCtr_ of an event e | |
void | TEST (char const *title) |
void | QUIT_fail_ (char const *cond, char const *module, int line) |
void | onRunTests (void) |
Variables | |
constexpr char const | versionStr [] {QP_VERSION_STR} |
the current QP version number string based on QP_VERSION_STR | |
constexpr enum_t | Q_USER_SIG {4} |
Type returned from state-handler functions. | |
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 |
constexpr std::uint8_t | QS_FRAME = 0x7EU |
Frame character of the QS output protocol. | |
constexpr std::uint8_t | QS_ESC = 0x7DU |
Escape character of the QS output protocol. | |
constexpr std::uint8_t | QS_ESC_XOR = 0x20U |
Escape modifier of the QS output protocol. | |
constexpr std::uint8_t | QS_GOOD_CHKSUM = 0xFFU |
Escape character of the QS output protocol. | |
char const | BUILD_DATE [12] = __DATE__ |
the calendar date of the last translation of the form: "Mmm dd yyyy" | |
char const | BUILD_TIME [9] = __TIME__ |
the time of the last translation of the form: "hh:mm:ss" | |
constexpr std::uint_fast16_t | QXTHREAD_NO_TIMEOUT {0U} |
No-timeout when blocking on semaphores, mutextes, and queues. | |
struct QP::QFreeBlock |
Definition at line 95 of file qf_pkg.hpp.
Class Members | ||
---|---|---|
QFreeBlock *volatile | m_next | link to the next free block |
union QP::QHsmAttr |
This union represents possible values stored in the 'state' and 'temp' attributes of the QP::QHsm class.
Class Members | ||
---|---|---|
QStateHandler | fun | pointer to a state handler function |
QActionHandler | act | pointer to an action-handler function |
QXThreadHandler | thr | pointer to an thread-handler function |
QMState const * | obj | pointer to QMState object |
QMTranActTable const * | tatbl | transition-action table |
struct QP::QMState |
This class groups together the attributes of a QP::QMsm state, such as the parent state (state nesting), the associated state handler function and the exit action handler function. These attributes are used inside the QP::QMsm::dispatch() and QP::QMsm::init() functions.
Class Members | ||
---|---|---|
QMState const * | superstate | superstate of this state |
QStateHandler const | stateHandler | state handler function |
QActionHandler const | entryAction | entry action handler function |
QActionHandler const | exitAction | exit action handler function |
QActionHandler const | initAction | init action handler function |
struct QP::QMTranActTable |
Class Members | ||
---|---|---|
QMState const * | target | target of the transition |
QActionHandler const | act[1] | array of actions |
using QP::QSignal = typedef std::uint16_t |
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 = typedef std::uint_fast8_t |
using QP::QStateHandler = typedef QState (*)(void * const me, QEvt const * const e) |
using QP::QActionHandler = typedef QState (*)(void * const me) |
using QP::QXThreadHandler = typedef void (*)(QXThread * const me) |
using QP::QEQueueCtr = typedef std::uint16_t |
Definition at line 77 of file qequeue.hpp.
using QP::QPSetBits = typedef std::uint32_t |
using QP::QTimeEvtCtr = typedef std::uint32_t |
using QP::QPrioSpec = typedef std::uint16_t |
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 and QXK, 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::QSchedStatus = typedef std::uint_fast16_t |
using QP::QSubscrList = typedef QPSet |
This data type represents a set of Active Objects that subscribe to a given signal. The set is represented as priority-set, where each bit corresponds to the unique QF-priority of an AO (see QP::QPrioSpec).
using QP::QMPoolSize = typedef std::uint16_t |
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 73 of file qmpool.hpp.
using QP::QMPoolCtr = typedef std::uint16_t |
The dynamic range of this data type determines the maximum number of blocks that can be stored in the pool.
Definition at line 89 of file qmpool.hpp.
using QP::QSTimeCtr = typedef std::uint32_t |
using QP::QSpyFunPtr = typedef void (*)() |
enum QP::QSpyPre : std::int8_t |
This enumeration specifies the record types used in the QP components. You can specify your own record types starting from QP::QS_USER offset. Currently, the maximum of all records cannot exceed 125.
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 unhandled 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 found next task to execute |
QS_SCHED_IDLE | scheduler became idle |
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 number of predefined signals |
enum QP::QSpyGroups : std::int16_t |
Enumerator | |
---|---|
QS_ALL_RECORDS | all 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 |
enum QP::QSpyIdOffsets : std::int16_t |
enum QP::QSpyIdGroups : std::int16_t |
enum QP::QSpyRxRecords : std::uint8_t |
This enumeration specifies the record types for the QS receive channel
Definition at line 52 of file qs_pkg.hpp.
|
inlinenoexcept |
Definition at line 112 of file qf_pkg.hpp.
|
inlinenoexcept |
Definition at line 117 of file qf_pkg.hpp.
void QP::TEST | ( | char const * | title | ) |
void QP::QUIT_fail_ | ( | char const * | cond, |
char const * | module, | ||
int | line | ||
) |
void QP::onRunTests | ( | void | ) |
|
constexpr |
|
constexpr |
Definition at line 105 of file qf_pkg.hpp.
|
constexpr |
Definition at line 106 of file qf_pkg.hpp.
|
constexpr |
Definition at line 107 of file qf_pkg.hpp.
|
constexpr |
Definition at line 73 of file qs_pkg.hpp.
|
constexpr |
Definition at line 76 of file qs_pkg.hpp.
|
constexpr |
The escaped byte is XOR-ed with the escape modifier before it is inserted into the QS buffer.
Definition at line 83 of file qs_pkg.hpp.
|
constexpr |
Definition at line 86 of file qs_pkg.hpp.
char const QP::BUILD_DATE = __DATE__ |
Definition at line 32 of file include/qstamp.cpp.
char const QP::BUILD_TIME = __TIME__ |
Definition at line 33 of file include/qstamp.cpp.