/*..........................................................................*/ static void initialize(void) { uint8_t p; QActive *a; /* set priorities all registered active objects... */ for (p = (uint8_t)1; p <= (uint8_t)QF_MAX_ACTIVE; ++p) { a = QF_ROM_ACTIVE_GET_(p); Q_ASSERT(a != (QActive *)0); /* QF_active[p] must be initialized */ a->prio = p; /* set the priority of the active object */ } /* trigger initial transitions in all registered active objects... */ for (p = (uint8_t)1; p <= (uint8_t)QF_MAX_ACTIVE; ++p) { a = QF_ROM_ACTIVE_GET_(p); #ifndef QF_FSM_ACTIVE QHsm_init(&a->super); /* initial tran. */ #else QFsm_init(&a->super); /* initial tran. */ #endif } QF_INT_DISABLE(); QK_currPrio_ = (uint8_t)0; /* set the priority for the QK idle loop */ p = QK_schedPrio_(); if (p != (uint8_t)0) { QK_sched_(p); /* process all events produced so far */ } QF_INT_ENABLE(); }
/*..........................................................................*/ static void initialize(void) { uint8_t p; QK_currPrio_ = (uint8_t)0; /* set the priority for the QK idle loop */ p = QK_schedPrio_(); if (p != (uint8_t)0) { QK_sched_(p); /* process all events produced so far */ } }
/*..........................................................................*/ void QK_mutexUnlock(QMutex mutex) { QF_CRIT_STAT_ QF_CRIT_ENTRY_(); QS_BEGIN_NOCRIT_(QS_QK_MUTEX_UNLOCK, (void *)0, (void *)0) QS_TIME_(); /* timestamp */ QS_U8_(mutex); /* the original priority */ QS_U8_(QK_ceilingPrio_); /* the current priority ceiling */ QS_END_NOCRIT_() if (QK_ceilingPrio_ > mutex) { QK_ceilingPrio_ = mutex; /* restore the saved priority ceiling */ mutex = QK_schedPrio_(); /* reuse 'mutex' to hold priority */ if (mutex != (uint8_t)0) { QK_sched_(mutex); } } QF_CRIT_EXIT_(); }