⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtt32.c

📁 这是状态机的一个框架结构的例子,可以作为状态机的基本架构
💻 C
字号:
/******************************************************************** 
 * Quantum Framework RTT32 port implemenatation (C version)
 * (c) Copyright 2001, Miro Samek, Palo Alto, CA
 * All Rights Reserved
 *******************************************************************/
#include "qassert.h"
#include "port.h"

DEFINE_THIS_FILE;

unsigned char pkgRdyMask;

/*.................................................................*/
const char *QFgetVersion() { 
   return "QF/RTT32 version 2.1.0";
}
/*.................................................................*/
void QFosInit__() { 
}
/*.................................................................*/
void QFosCleanup__() { 
}
/*.................................................................*/
void QFbackground() {
   static const unsigned char lbLkup[] = {
      0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
      5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
      6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
      6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 
   };

   while (pkgRdyMask) {
      QActive *a = pkgActive[lbLkup[pkgRdyMask]];
      register QEvent *evt = (QEvent *)QEQueueGet(&a->eQueue__);
      QHsmDispatch((QHsm *)a, evt);     /* dispatch evt to the HSM */
      QFpropagate__(evt);      /* propagate to the next subscriber */ 
   }   
}
/*.................................................................*/
int QActiveStart(QActive *me, unsigned prio, 
                 QEvent **qSto, unsigned qLen,
                 int *stkSto, unsigned stkLen)
{
   REQUIRE(0 < prio && prio <= QF_MAX_ACTIVE &&
           stkSto == 0);      /* DOS does not need per-actor stack */
   me->prio__ = prio;
   QFadd__(me);             /* make QF aware of this active object */ 
   if (!QEQueueCtor(&me->eQueue__, qSto, qLen)) {
      return 0;                                  /* return failure */
   }
   me->eQueue__.osEvent__ = 1 << (prio - 1); /*bit-mask 4 the actor*/
   QHsmInit((QHsm *)me, 0);          /* execute initial transition */
   return !0;                                    /* return success */
}
/*.................................................................*/
void QActiveStop(QActive *me) {
   QFremove__(me);
}
/*.................................................................*/
int QActiveEnqueue__(QActive *me, QEvent *evt) {
   return QEQueuePutFIFO(&me->eQueue__, evt); 
}
/*.................................................................*/
void QActivePostFIFO(QActive *me, QEvent *evt) {
   REQUIRE(evt->useNum == 0);          /* event must not be in use */
   ALLEGE(QEQueuePutFIFO(&me->eQueue__, evt));  /* cannot overflow!*/
}
/*.................................................................*/
void QActivePostLIFO(QActive *me, QEvent *evt) {
   REQUIRE(evt->useNum == 0);          /* event must not be in use */
   ALLEGE(QEQueuePutLIFO(&me->eQueue__, evt));  /* cannot overflow!*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -