56 #error "Source file included in a project NOT based on the QXK kernel"
59Q_DEFINE_THIS_MODULE(
"qxk_xthr")
63#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
64#error qpc version 7.3.0 or higher required
75void QXThread_ctor(
QXThread *
const me,
77 uint_fast8_t
const tickRate)
81 QActive_ctor(&me->
super, tmp.fun);
107 && (
thr->super.super.temp.obj == (
QMState *)0));
110 QXK_priv_.lockHolder != (uint_fast8_t)
thr->super.prio);
115 QXThread_block_(
thr);
135 return thr->timeEvt.super.sig == 0U;
147 wasArmed = QXThread_teDisarm_(me);
148 QXThread_unblock_(me);
174 && (
thr->super.super.temp.obj == (
QMState *)0));
177 QXK_priv_.lockHolder != (uint_fast8_t)
thr->super.prio);
180 if (
thr->super.eQueue.frontEvt == (
QEvt *)0) {
183 thr->super.super.temp.obj
187 QPSet_remove(&QXK_priv_.readySet, (uint_fast8_t)
thr->super.prio);
189 QPSet_update_(&QXK_priv_.readySet, &QXK_priv_.readySet_dis);
210 if (
thr->super.eQueue.frontEvt != (
QEvt *)0) {
211 e =
thr->super.eQueue.frontEvt;
213 thr->super.eQueue.nFree = nFree;
216 if (nFree <= thr->super.eQueue.end) {
219 thr->super.eQueue.frontEvt =
220 thr->super.eQueue.ring[
thr->super.eQueue.tail];
221 if (
thr->super.eQueue.tail == 0U) {
222 thr->super.eQueue.tail =
thr->super.eQueue.end;
224 --
thr->super.eQueue.tail;
229 QS_OBJ_PRE_(&
thr->super);
230 QS_2U8_PRE_(QEvt_getPoolNum_(e), e->
refCtr_);
235 thr->super.eQueue.frontEvt = (
QEvt *)0;
243 QS_OBJ_PRE_(&
thr->super);
244 QS_2U8_PRE_(QEvt_getPoolNum_(e), e->
refCtr_);
263 QXK_priv_.lockHolder != (uint_fast8_t)me->
super.
prio);
265 QPSet_remove(&QXK_priv_.readySet, (uint_fast8_t)me->
super.
prio);
267 QPSet_update_(&QXK_priv_.readySet, &QXK_priv_.readySet_dis);
278 QPSet_insert(&QXK_priv_.readySet, (uint_fast8_t)me->
super.
prio);
280 QPSet_update_(&QXK_priv_.readySet, &QXK_priv_.readySet_dis);
326 uint_fast8_t
const tickRate
342 QTimeEvt_timeEvtHead_[tickRate].act = &me->
timeEvt;
QActive * QActive_registry_[QF_MAX_ACTIVE+1U]
#define Q_ACTION_CAST(action_)
#define QF_CRIT_EXIT_NOP()
void(* QXThreadHandler)(struct QXThread *const me)
Internal (package scope) QP/C interface.
#define QXK_ISR_CONTEXT_()
Check if the code executes in the ISR context.
@ 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/C package-scope interface.
QP Functional Safety (FuSa) Subsystem.
#define Q_ASSERT_INCRIT(id_, expr_)
#define Q_REQUIRE_INCRIT(id_, expr_)
#define QXTHREAD_NO_TIMEOUT
#define QXTHREAD_CAST_(ptr_)
#define QXK_PTR_CAST_(type_, ptr_)
Active object class (based on the QHsm implementation strategy)
State object for the QMsm class (QM State Machine).
struct QTimeEvt *volatile next
eXtended (blocking) thread of the QXK preemptive kernel
Attribute of for the QAsm class (Abstract State Machine).
struct QMState const * obj