状态机
来源:互联网 发布:网络远程教育 编辑:程序博客网 时间:2024/06/05 11:14
//header
typedef struct { POWERMODING_STATE_TYPE stateId;//状态名 void (*onStateEnter)();//进入状态 void (*stateSigProc)(POWERMODING_SIGNAL pmSignal);//状态处理 void (*onStateExit)();//退出状态} PMStateType;/*不同状态*/typedef struct { PMStateType pmSleepState; PMStateType pmActiveState; PMStateType pmSlientState;PMStateType pmNullState; PMStateType *pCurPmState;} PMStateMachineType;typedef enum { PWR_STATE_NO_PRESS = 0, PWR_STATE_SHORTPRESS_ON, PWR_STATE_LONGPRESS_ON,} PWR_STATE_TYPE;
//initalize and process
void onEnterPMSleepState();void onExitPMSleepOffState();void sigProcPMSleepOffState(POWERMODING_SIGNAL sig);//void onEnterPMActiveState();void onExitPMActiveState();void sigProcPMActiveState(POWERMODING_SIGNAL sig);//void onEnterPMSlientState();void onExitPMSlientState();void sigProcPMSlientState(POWERMODING_SIGNAL sig);void onEnterPMNULLState();void onExitPMNULLState();void sigProcPMNULLState(POWERMODING_SIGNAL sig);void Initialize_StateMachine(void);
<span style="font-family: Arial, Helvetica, sans-serif;">void Initialize_StateMachine(void)//</span>
{ PMStateMachineType *pStm = &pmStateMachine; pStm->pmSleepState.stateId = PM_SLEEP_STATE; pStm->pmSleepState.onStateEnter = onEnterPMSleepState; pStm->pmSleepState.onStateExit = onExitPMSleepState; pStm->pmSleepState.stateSigProc = sigProcPMSleepState; pStm->pmActiveState.stateId = PM_ACTIVE_STATE; pStm->pmActiveState.onStateEnter = onEnterPMActiveState; pStm->pmActiveState.onStateExit = onExitPMActiveState; pStm->pmActiveState.stateSigProc = sigProcPMActiveState; pStm->pmSlientState.stateId = PM_SLIENT_STATE; pStm->pmSlientState.onStateEnter = onEnterPMSlientState; pStm->pmSlientState.onStateExit = onExitPMSlientState; pStm->pmSlientState.stateSigProc = sigProcPMSlientState;
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">//receive event and jump</span>
static void powerModingMainLoop()//arguement{ TaskSignal tSignals; static uint32_t test = 0; //PMStateMachineType *pStm = &pmStateMachine; //ServiceSignalRegister(TESTSERVICE_SIGNAL_TEST1); while(1) { /* wait for events indefinitely and clear after end of function */ tSignals = TaskWaitEventWithTimeout(&powerModingStubInstance, ( EVENT_PM_TIMER_TICK_10MS | EVENT_PM_ACC_ON | EVENT_PM_ACC_OFF | EVENT_PM_LOW |//6v<=power voltage<=9v EVENT_PM_ULTRA_LOW |//9v<power voltage<=17 EVENT_PM_TEMP_INVLIAD | EVENT_PM_PWK_SHORT_PRESSED | EVENT_PM_PWK_LONG_PRESSED | EVENT_PM_CAN_SLEEP_REQ //no message tx/rx on CAN Bus ), (uint16_t) OS_WAITFOREVER); //Signal Handling test = tSignals; if (tSignals & EVENT_PM_TIMER_TICK_10MS) {//TracePrintf(MOD_TRACE, TRACE_INFO, "EVENT_PM_TIMER_TICK_10MS\n\r"); VehicleSignalAccScan(); VehicleSignalVoltageScan(); VehicleSignalTempScan(); //2 TODO:temperature?? Process_StateMachine(PM_SIG_TIMER_TICK_10MS); } else if (tSignals & EVENT_PM_ACC_ON) { Process_StateMachine(PM_SIG_ACC_ON); } else if (tSignals & EVENT_PM_ACC_OFF) { Process_StateMachine(PM_SIG_ACC_OFF); } else if (tSignals & EVENT_PM_LOW) { Process_StateMachine(PM_SIG_LOW); } else if (tSignals & EVENT_PM_ULTRA_LOW) { Process_StateMachine(PM_SIG_ULTRA_LOW); } else if (tSignals & EVENT_PM_TEMP_INVLIAD) { Process_StateMachine(PM_SIG_TEMP_INVLIAD); } else if (tSignals & EVENT_PM_PWK_SHORT_PRESSED) { Process_StateMachine(PM_SIG_PWK_SHORT_PRESSED); } else if (tSignals & EVENT_PM_PWK_LONG_PRESSED) { Process_StateMachine(PM_SIG_PWK_LONG_PRESSED); } else if(tSignals & EVENT_PM_CAN_SLEEP_REQ) { Process_StateMachine(PM_SIG_CAN_SLEEP);// } }}
0 0
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 状态机
- 时间戳
- Web Service (二) CXF自动发布Web Service(No Spring)
- Linux 使用wget 命令下载JDK的方法
- 进化了这么久,大家都辛苦了
- 全屏切换效果
- 状态机
- 已有git项目是以*.git项目导入gitlab中去
- 开博第一天
- maven反射生成实体类
- STL中map与hash_map容器的选择收藏
- ubuntu编译环境配置
- 浅谈php serialize()与unserialize()的用法
- 公司上市几轮投资分别是什么
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int