55#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
56#error qpcpp version 7.3.0 or higher required
84std::uint32_t getTestProbe_(
QSpyFunPtr const api)
noexcept {
85 std::uint32_t data = 0U;
86 for (std::uint8_t i = 0U; i < tstPriv_.tpNum; ++i) {
87 if (tstPriv_.tpBuf[i].addr ==
reinterpret_cast<QSFun
>(api)) {
88 data = tstPriv_.tpBuf[i].data;
103 for (std::uint8_t j = i; j < tstPriv_.tpNum; ++j) {
104 tstPriv_.tpBuf[j] = tstPriv_.tpBuf[j + 1U];
116 return (++tstPriv_.testTime);
126 char const *
const module,
134 QS_STR_PRE_((module !=
nullptr) ? module :
"?");
157Q_DEFINE_THIS_MODULE(
"qutest")
169 while (tstPriv_.readySet.notEmpty()) {
170 std::uint_fast8_t
const p = tstPriv_.readySet.findMax();
175 #if (QF_MAX_EPOOL > 0U)
179 tstPriv_.readySet.remove(p);
181 tstPriv_.readySet.update_(&tstPriv_.readySet_dis);
200 bzero_(&QS::tstPriv_,
sizeof(QS::tstPriv_));
204 QS::tstPriv_.readySet.update_(&QS::tstPriv_.readySet_dis);
231 QS::processTestEvts_();
244 QEvt const * * const qSto,
245 std::uint_fast16_t const qLen,
247 std::uint_fast16_t const stkSize,
248 void const * const par)
253 m_prio =
static_cast<std::uint8_t
>(prioSpec & 0xFFU);
254 m_pthre =
static_cast<std::uint8_t
>(prioSpec >> 8U);
257 m_eQueue.init(qSto, qLen);
259 this->
init(par, m_prio);
263#ifdef QACTIVE_CAN_STOP
275 std::uint_fast8_t
const tickRate,
276 void const *
const sender)
286 QS_TEC_PRE_(prev->
m_ctr);
287 QS_U8_PRE_(tickRate);
310 &
static_cast<std::uint8_t
>(~TE_IS_LINKED));
315 QS_U8_PRE_(tickRate);
324 QS_U8_PRE_(tickRate);
330 static_cast<void>(act->POST(t, sender));
358 if (t->
m_ctr == 0U) {
362 &
static_cast<std::uint8_t
>(~TE_IS_LINKED));
389 void const *
const e,
390 std::uint_fast8_t
const qsId)
395 if ((QS::priv_.flags & 0x01U) == 0U) {
396 QS::priv_.flags |= 0x01U;
417 QEvt const *
const e,
418 std::uint_fast8_t
const qsId)
442 void const *
const e,
443 std::uint_fast8_t
const qsId)
449 if ((QS::priv_.flags & 0x01U) == 0U) {
450 QS::priv_.flags |= 0x01U;
469 QEvt const *
const e,
470 std::uint_fast8_t
const qsId)
487 QEvt const *
const e,
488 std::uint_fast16_t
const margin,
489 void const *
const sender)
noexcept
508 if (e->getPoolNum_() != 0U) {
512 std::uint_fast8_t
const rec =
515 QS_BEGIN_PRE_(rec, m_prio)
520 QS_2U8_PRE_(e->getPoolNum_(), e->refCtr_);
535 #if (QF_MAX_EPOOL > 0U)
557 if (e->getPoolNum_() != 0U) {
565 QS_2U8_PRE_(e->getPoolNum_(), e->refCtr_);
580 #if (QF_MAX_EPOOL > 0U)
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
bool fakePost(QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept
void fakePostLIFO(QEvt const *const e) noexcept
void init(void const *const e, std::uint_fast8_t const qsId) override
Active object class (based on the QHsm implementation strategy)
QEvt const * get_() noexcept
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
void postLIFO(QEvt const *const e) noexcept
std::uint_fast8_t getPrio() const noexcept
static QActive * registry_[QF_MAX_ACTIVE+1U]
QACTIVE_EQUEUE_TYPE const & getEQueue() const noexcept
bool post_(QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept
Abstract State Machine class (state machine interface)
static QState top(void *const me, QEvt const *const e) noexcept
std::uint8_t volatile refCtr_
void init(void const *const e, std::uint_fast8_t const qsId) override
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
static QTimeEvt timeEvtHead_[QF_MAX_TICK_RATE]
QTimeEvt * toTimeEvt() noexcept
QTimeEvt *volatile m_next
static void tick1_(std::uint_fast8_t const tickRate, void const *const sender)
QTimeEvtCtr volatile m_ctr
void bzero_(void *const start, std::uint_fast16_t const len) noexcept
constexpr std::uint_fast16_t NO_MARGIN
void gc(QEvt const *const e) noexcept
void onTestPost(void const *sender, QActive *recipient, QEvt const *e, bool status)
@ TE_OBJ
time event object
void QEvt_refCtr_inc_(QEvt const *const e) noexcept
@ QS_QEP_DISPATCH
an event was dispatched (begin of RTC step)
@ QS_ASSERT_FAIL
assertion failed in the code
@ QS_QF_TICK
QTimeEvt tick was called.
@ QS_QF_RUN
QF_run() was entered.
@ QS_QF_TIMEEVT_POST
a time event posted itself directly to an AO
@ QS_TEST_PAUSED
test has been paused
@ QS_QF_TIMEEVT_AUTO_DISARM
a time event expired and was disarmed
@ QS_TEST_PROBE_GET
reports that Test-Probe has been used
@ QS_QF_ACTIVE_POST_ATTEMPT
attempt to post an evt to AO failed
@ QS_QF_ACTIVE_POST_LIFO
an event was posted (LIFO) directly to AO
@ QS_QF_ACTIVE_POST
an event was posted (FIFO) directly to AO
@ QS_QEP_STATE_INIT
an initial transition was taken in a state
#define Q_UNUSED_PAR(par_)
Internal (package scope) QP/C++ interface.
#define QS_FUN_DICTIONARY(fun_)
#define QS_TEST_PROBE_DEF(fun_)
#define QS_TEST_PROBE(code_)
#define QS_TEST_PROBE_ID(id_, code_)
#define QS_LOC_CHECK_(qsId_)
QS/C++ package-scope interface.
QS/C++ port to a 32-bit CPU, generic C++ compiler.
QP Functional Safety (FuSa) Subsystem.
Q_NORETURN Q_onError(char const *const module, int_t const id)
#define Q_ASSERT_INCRIT(id_, expr_)