56 #error "Source file included in a project NOT based on the QK kernel"
59Q_DEFINE_THIS_MODULE(
"qk")
63#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
64#error qpc version 7.3.0 or higher required
82 == (uint_fast8_t)(~QK_priv_.lockCeil_dis));
86 if (ceiling > QK_priv_.lockCeil) {
90 QS_2U8_PRE_((uint8_t)QK_priv_.lockCeil, (uint8_t)ceiling);
97 QK_priv_.lockCeil = ceiling;
99 QK_priv_.lockCeil_dis = (uint_fast8_t)(~ceiling);
116 if (prevCeil != 0xFFU) {
122 == (uint_fast8_t)(~QK_priv_.lockCeil_dis));
124 && (QK_priv_.lockCeil > prevCeil));
129 QS_2U8_PRE_((uint8_t)QK_priv_.lockCeil, (uint8_t)prevCeil);
133 QK_priv_.lockCeil = prevCeil;
135 QK_priv_.lockCeil_dis = (uint_fast8_t)(~prevCeil);
139 if (QK_sched_() != 0U) {
150uint_fast8_t QK_sched_(
void) {
154 &QK_priv_.readySet_dis));
156 if (QPSet_isEmpty(&QK_priv_.readySet)) {
161 p = QPSet_findMax(&QK_priv_.readySet);
164 QK_priv_.actThre == (uint_fast8_t)(~QK_priv_.actThre_dis));
167 if (p <= QK_priv_.actThre) {
172 == (uint_fast8_t)(~QK_priv_.lockCeil_dis));
175 if (p <= QK_priv_.lockCeil) {
180 == (uint_fast8_t)(~QK_priv_.nextPrio_dis));
181 QK_priv_.nextPrio = p;
183 QK_priv_.nextPrio_dis = (uint_fast8_t)(~QK_priv_.nextPrio);
194void QK_activate_(
void) {
197 uint_fast8_t
const prio_in = QK_priv_.actPrio;
198 uint_fast8_t p = QK_priv_.nextPrio;
201 (prio_in == (uint_fast8_t)(~QK_priv_.actPrio_dis))
202 && (p == (uint_fast8_t)(~QK_priv_.nextPrio_dis)));
206 #if (defined QF_ON_CONTEXT_SW) || (defined Q_SPY)
207 uint_fast8_t pprev = prio_in;
210 QK_priv_.nextPrio = 0U;
212 QK_priv_.nextPrio_dis = (uint_fast8_t)(~0U);
215 uint_fast8_t pthre_in;
224 pthre_in = (uint_fast8_t)a->
pthre;
226 (uint_fast8_t)(~(uint_fast8_t)a->
pthre_dis & 0xFFU));
233 uint_fast8_t
const pthre = (uint_fast8_t)a->
pthre;
235 (uint_fast8_t)(~(uint_fast8_t)a->
pthre_dis & 0xFFU));
238 QK_priv_.actPrio = p;
239 QK_priv_.actThre = pthre;
241 QK_priv_.actPrio_dis = (uint_fast8_t)(~p);
242 QK_priv_.actThre_dis = (uint_fast8_t)(~pthre);
245 #if (defined QF_ON_CONTEXT_SW) || (defined Q_SPY)
254 #ifdef QF_ON_CONTEXT_SW
264 QEvt const *
const e = QActive_get_(a);
269 #if (QF_MAX_EPOOL > 0U)
279 &QK_priv_.readySet_dis));
282 QPSet_remove(&QK_priv_.readySet, p);
284 QPSet_update_(&QK_priv_.readySet, &QK_priv_.readySet_dis);
288 if (QPSet_isEmpty(&QK_priv_.readySet)) {
293 p = QPSet_findMax(&QK_priv_.readySet);
301 == (uint_fast8_t)(~QK_priv_.lockCeil_dis));
304 if (p <= QK_priv_.lockCeil) {
315 QK_priv_.actPrio = prio_in;
316 QK_priv_.actThre = pthre_in;
318 QK_priv_.actPrio_dis = (uint_fast8_t)(~QK_priv_.actPrio);
319 QK_priv_.actThre_dis = (uint_fast8_t)(~QK_priv_.actThre);
322 #if (defined QF_ON_CONTEXT_SW) || (defined Q_SPY)
329 QS_2U8_PRE_(prio_in, pprev);
341 #ifdef QF_ON_CONTEXT_SW
355 QF_bzero_(&QK_priv_,
sizeof(QK_priv_));
362 QPSet_update_(&QK_priv_.readySet, &QK_priv_.readySet_dis);
363 QK_priv_.actPrio_dis = (uint_fast8_t)(~0U);
364 QK_priv_.nextPrio_dis = (uint_fast8_t)(~0U);
365 QK_priv_.actThre_dis = (uint_fast8_t)(~0U);
366 QK_priv_.lockCeil_dis = (uint_fast8_t)(~QK_priv_.lockCeil);
369 for (uint_fast8_t tickRate = 0U;
370 tickRate <
Q_DIM(QTimeEvt_timeEvtHead_);
373 QTimeEvt_ctorX(&QTimeEvt_timeEvtHead_[tickRate],
411 QK_priv_.lockCeil = 0U;
413 QK_priv_.lockCeil_dis = (uint_fast8_t)(~0U);
417 if (QK_sched_() != 0U) {
442 QEvt const * *
const qSto,
443 uint_fast16_t
const qLen,
445 uint_fast16_t
const stkSize,
446 void const *
const par)
456 && (stkSto == (
void *)0));
460 me->
prio = (uint8_t)(prioSpec & 0xFFU);
461 me->
pthre = (uint8_t)(prioSpec >> 8U);
462 QActive_register_(me);
464 QEQueue_init(&me->
eQueue, qSto, qLen);
473 if (QK_sched_() != 0U) {
QActive * QActive_registry_[QF_MAX_ACTIVE+1U]
uint_fast8_t QSchedStatus
#define Q_UNUSED_PAR(par_)
@ Q_USER_SIG
offset for the user signals (QP Application)
Internal (package scope) QP/C interface.
#define QK_ISR_CONTEXT_()
#define QF_INT_DISABLE()
Disable interrupts.
#define QF_INT_ENABLE()
Enable interrupts.
@ QS_QF_RUN
QF_run() was entered.
@ QS_SCHED_IDLE
scheduler restored the idle task
@ QS_SCHED_LOCK
scheduler was locked
@ QS_SCHED_UNLOCK
scheduler was unlocked
@ QS_SCHED_NEXT
scheduler started next task
QS/C package-scope interface.
QP Functional Safety (FuSa) Subsystem.
#define Q_ASSERT_INCRIT(id_, expr_)
#define Q_REQUIRE_INCRIT(id_, expr_)
Active object class (based on the QHsm implementation strategy)
QACTIVE_EQUEUE_TYPE eQueue
struct QAsmVtable const * vptr
void(* init)(QAsm *const me, void const *const e, uint_fast8_t const qsId)
void(* dispatch)(QAsm *const me, QEvt const *const e, uint_fast8_t const qsId)
Private attributes of the QK kernel.