按键状态机准备在板子上测试
This commit is contained in:
parent
60bdcfe50b
commit
b3c9b79aea
|
@ -115,6 +115,9 @@ FSM* newBaseFSM(int numState, int defaultState){
|
|||
|
||||
pFSM->privateVars.fcns.childFSMStepTable = calloc(numState * numState, sizeof(ChildFSMStepFuncPtr));
|
||||
|
||||
|
||||
|
||||
|
||||
FSMVtbl vtbl = {
|
||||
.reset = resetBaseFSM,
|
||||
.step = stepBaseFSM,
|
||||
|
@ -139,6 +142,16 @@ void constructFSM(FSM* pFSM){
|
|||
pFSM->vtbl.initData(pFSM);
|
||||
pFSM->vtbl.initDataLoader(pFSM);
|
||||
pFSM->vtbl.initSignals(pFSM);
|
||||
|
||||
|
||||
/* ---------------------------------- 检查状态表 --------------------------------- */
|
||||
for (int i = 1; i < pFSM->privateVars.numState; i++) // 跳过Idle状态,Idle状态只能跳转到默认状态
|
||||
{
|
||||
if(!pFSM->privateVars.fcns.selectNextState[i]){
|
||||
FSM_LOG("每个状态都要有一个状态选择函数!\n");
|
||||
assert(0); // 强制退出
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -32,8 +32,8 @@
|
|||
|
||||
typedef struct _FSMHandler FSMHandler;
|
||||
typedef void (*Avoid_WARNING_State_Fcns)(void *data, FSM **childFSM);
|
||||
typedef void (*Avoid_WARNING_Delay_Handlers)(void *data);
|
||||
typedef void (*Avoid_WARNING_Transition_Handler)(void *data, int curState, int *);
|
||||
typedef void (*Avoid_WARNING_Delay_General_Handlers)(void *data);
|
||||
typedef void (*Avoid_WARNING_Transition_Handler)(void *data, int *);
|
||||
typedef void (*Avoid_WARNING_Overrider_Fcns)(FSM *pFsm);
|
||||
typedef int (*Avoid_WARNING_SelectNextState)(void *data, void *signals);
|
||||
typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
||||
|
@ -42,7 +42,9 @@ typedef void (*Avoid_WARNING_void_fcns)(FSMHandler *fcns);
|
|||
#define addSelectNextStateFcn(curstate) fcns->selectNextState[curstate] = (Avoid_WARNING_SelectNextState)selectNextStateFcn(curstate)
|
||||
#define addStateActionFcn(type, state) fcns->type##ActionTable[state] = (Avoid_WARNING_State_Fcns)actionFcn(type, state)
|
||||
#define addTransitionHandler(curstate, nextstate) fcns->transitionTable[index(curstate, nextstate)] = (Avoid_WARNING_Transition_Handler)transitionHandler(curstate, nextstate)
|
||||
#define addDelayHandler(curstate, nextstate) fcns->transitionDelayTable[index(curstate, nextstate)] = (Avoid_WARNING_Delay_Handlers)delayHanlder(curstate, nextstate)
|
||||
#define addDelayHandler(curstate, nextstate) fcns->transitionDelayTable[index(curstate, nextstate)] = (Avoid_WARNING_Delay_General_Handlers)delayHanlder(curstate, nextstate)
|
||||
|
||||
|
||||
|
||||
|
||||
typedef struct _FSM FSM;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* @Author: godcreator02 qq974980621@gmail.com
|
||||
* @Date: 2024-04-20 19:02:11
|
||||
* @LastEditors: godcreator02 qq974980621@gmail.com
|
||||
* @LastEditTime: 2024-04-20 21:15:18
|
||||
* @LastEditTime: 2024-04-23 13:45:50
|
||||
* @FilePath: \vscode\FSM_OOP\keytest\keyFSM.c
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
|
@ -50,6 +50,19 @@ static void resetSignals(KeyFSM *pFSM){
|
|||
}
|
||||
|
||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||
addSelectNextStateFcn(Waiting);
|
||||
addSelectNextStateFcn(DownDebouncing);
|
||||
addSelectNextStateFcn(Downing);
|
||||
addSelectNextStateFcn(Holding);
|
||||
addSelectNextStateFcn(HoldUpDebouncing);
|
||||
addSelectNextStateFcn(UpDebouncing);
|
||||
addSelectNextStateFcn(MultiDownWaiting);
|
||||
addSelectNextStateFcn(MultiDowning);
|
||||
addSelectNextStateFcn(MultiDownDebouncing);
|
||||
|
||||
|
||||
/* ----------------------- 添加状态中事件,action during exit ----------------------- */
|
||||
addStateActionFcn(enter, Waiting);
|
||||
addStateActionFcn(during, DownDebouncing);
|
||||
addStateActionFcn(during, Downing);
|
||||
|
@ -61,7 +74,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
|||
addStateActionFcn(during, MultiDownDebouncing);
|
||||
|
||||
|
||||
|
||||
/* --------------------------- 添加转移函数和转移函数对应的Delay -------------------------- */
|
||||
addTransitionHandler(DownDebouncing, Downing);
|
||||
addDelayHandler(DownDebouncing, Downing);
|
||||
|
||||
|
@ -70,7 +83,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
|||
addTransitionHandler(Downing, Holding);
|
||||
|
||||
|
||||
fcns->transitionGeneralAction = &transitionGeneralAction;
|
||||
fcns->transitionGeneralAction = (Avoid_WARNING_Delay_General_Handlers)transitionGeneralAction;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue