#include "stateMachine.h"/// <summary>/// 初始化事件/// </summary>/// <param name="pEvent"></param>/// <param name="Action"></param>/// <param name="eventId"></param>void SmEventInit(smEvent_t* pEvent, void (*Action)(smEvent_t* thisEvent), uint8_t eventId){pEvent->Action = Action;pEvent->id = eventId;pEvent->curState = SM_EVENT_ENTER;pEvent->nextEventId = eventId;}/// <summary>/// 初始化状态机核心/// </summary>/// <param name="pSM"></param>/// <param name="list"></param>/// <param name="eventCount"></param>void SmInit(smCore_t* pSM, smEvent_t* list, uint8_t eventCount){int i = 0;pSM->curEventId = 0;pSM->eventList = list;pSM->eventListCount = eventCount;for ( i = 0; i < eventCount; i++){if (pSM->eventList[i].id != i || pSM->eventList[i].Action == NULL){//id号必须按照数组顺序添加while (1);}}}/// <summary>/// 状态机轮询/// </summary>/// <param name="pSM"></param>void SmProcess(smCore_t* pSM){int nextId;smEvent_t* curEvent = &pSM->eventList[pSM->curEventId];if (pSM->curEventId != pSM->eventList[pSM->curEventId].nextEventId && pSM->eventList[pSM->curEventId].curState == SM_EVENT_EXIT){nextId = pSM->eventList[pSM->curEventId].nextEventId;pSM->eventList[nextId].curState = SM_EVENT_ENTER;pSM->eventList[nextId].nextEventId = pSM->eventList[nextId].id;pSM->curEventId = nextId;curEvent = &pSM->eventList[nextId];curEvent->Action(curEvent);return;}else if (pSM->curEventId != pSM->eventList[pSM->curEventId].nextEventId && pSM->eventList[pSM->curEventId].curState == SM_EVENT_EXEC){pSM->eventList[pSM->curEventId].curState = SM_EVENT_EXIT;curEvent->Action(curEvent);return;}else if (curEvent->curState == SM_EVENT_ENTER){curEvent->curState = SM_EVENT_EXEC;curEvent->Action(curEvent);return;}curEvent->Action(curEvent);}/// <summary>/// 设置下个状态机的状态/// 设置下个状态机的状态/// </summary>/// <param name="event"></param>/// <param name="nextEventId"></param>void SmSetNextEvent(smEvent_t *event,uint8_t nextEventId){event->nextEventId = nextEventId;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。