预装载器小改了一下,添加了溢出标志

This commit is contained in:
godcreator 2024-04-19 13:07:09 +08:00
parent f117584608
commit 9edbabb063
11 changed files with 43 additions and 16 deletions

View File

@ -6,7 +6,7 @@ include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM)
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
set(keytest 789)
# set(keytest 789)
# set(child_parent 789)
if(DEFINED keytest)
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)

View File

@ -135,8 +135,6 @@ void constructFSM(FSM* pFSM){
/*
public
*/
int getFSMCurState(FSM *pFSM){
return pFSM->privateVars.curState;
}
@ -156,18 +154,30 @@ void registerChildFSM(FSM *parent, FSM *child, int index){
parent->privateVars.childFSM[index] = child;
}
const void *getData(FSM* pFSM){
const void *_getData(FSM* pFSM){
return (const void *)pFSM->data;
}
void *_preloadIn(FSM *pFSM){
return pFSM->privateVars.preloader.in;
}
void _preloaderGetReady(FSM *pFSM){
if(pFSM->privateVars.preloader.isReady){
pFSM->privateVars.preloader.isOverflow = 1;
}
pFSM->privateVars.preloader.isReady = 1;
}
int _getPreloaderOverFlag(FSM *pFSM){
return pFSM->privateVars.preloader.isOverflow;
}
void _clearPreloaderOverFlag(FSM *pFSM){
pFSM->privateVars.preloader.isOverflow = 0;
}
FSMVtbl *_vptrFSM(FSM* pFSM){
return &pFSM->vtbl;

View File

@ -60,6 +60,7 @@ typedef struct _FSMDataLoader
{
void *in;
int isReady;
int isOverflow;
size_t preloadSize;
}FSMDataLoader;

View File

@ -8,6 +8,9 @@ typedef struct _FSM FSM;
#define Step(pFSM) _vptrFSM((FSM *)pFSM)->step((FSM *)pFSM)
#define PreloaderGetReady(pFSM) _preloaderGetReady((FSM *)pFSM);
#define GetPreloaderOverFlag(pFSM) _getPreloaderOverFlag((FSM *)pFSM)
#define ClearPreloaderOverFlag(pFSM) _clearPreloaderOverFlag((FSM *)pFSM)
#define GetData(pFSM) _getData((FSM*)pFSM)
typedef struct _FSMHandler FSMHandler;
@ -22,15 +25,19 @@ typedef struct _FSMVtbl {
void (*initDataLoader)(FSM *pFSM); // 子类必须重新实现
}FSMVtbl;
/* --------------------------------- 状态机信息获取 -------------------------------- */
int getFSMCurState(FSM *pFSM);
int getFSMCurEvent(FSM *pFSM);
void setChildNum(FSM *pFSM, int num);
void registerChildFSM(FSM *parent, FSM *child, int index);
const void *getData(FSM* pFSM);
const void *_getData(FSM* pFSM);
/* ---------------------------------- 预装载器 ---------------------------------- */
void *_preloadIn(FSM *pFSM);
void _preloaderGetReady(FSM *pFSM);
int _getPreloaderOverFlag(FSM *pFSM);
void _clearPreloaderOverFlag(FSM *pFSM);
FSMVtbl *_vptrFSM(FSM* pFSM);

View File

@ -23,7 +23,7 @@ int main(){
ChildFSM_Input(cFSM)->arrindex = i;
PreloaderGetReady(cFSM);
ChildFSMData* data = getData((FSM *)(cFSM));
ChildFSMData* data = _getData((FSM *)(cFSM));
printf(" %d ", data->arrindex);

View File

@ -29,8 +29,13 @@ const static char *keyStr[] =
typedef struct _keyFSMData
{
/* ----------------------------------- 输入 ----------------------------------- */
KeyIn in;
/* ----------------------------------- 输出 ----------------------------------- */
KeyOutSignal out;
/* ---------------------------------- 内部变量 ---------------------------------- */
int countDelay;
int countMultiDown;
}KeyFSMData;

View File

@ -26,10 +26,11 @@ int main(){
for (int i = 0; i < NUM; i++)
{
printf("第%d次: ",i+1);
const KeyFSMData* data = getData((FSM *)keyFSM);
const KeyFSMData* data = _getData((FSM *)keyFSM);
*KeyFSM_Input(keyFSM) = testin[i];
PreloaderGetReady(keyFSM);
ClearPreloaderOverFlag(keyFSM);
Step(keyFSM);
if(data->out){

View File

@ -15,7 +15,11 @@ int main(){
TemplateFSM_Input(pFSM)->arrindex = i;
PreloaderGetReady(pFSM);
printf("%d," ,i);
const TemplateFSMData* data = GetData(pFSM);
int ovflag = GetPreloaderOverFlag(pFSM);
printf("%d, 溢出情况:%d" ,i, ovflag);
Step(pFSM);
printf("\n");

View File

@ -4,7 +4,6 @@
#define TemplateFSM_Input(pFSM) ((TemplateFSMIn *)_preloadIn((FSM *)pFSM))
typedef struct _templateFSMIn
{
int arrindex;

View File

@ -117,8 +117,8 @@ const static char *eventStr[] = {
"E2D",
};
static void printFSM(TemplateFSM* pFSM){
FSM_LOG(" \t\tTemplateFSM: ");
FSM_LOG("上次事件:%s, 当前状态:%s, 动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)]);
FSM_LOG(" \tTemplateFSM: ");
FSM_LOG("上次事件:%s, 当前状态:%s, 预装载器溢出:%d ,动作:", eventStr[getFSMCurEvent((FSM *)pFSM)], stateStr[getFSMCurState((FSM *)pFSM)], _getPreloaderOverFlag((FSM *)pFSM));
}

BIN
按键状态图2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB