跑起来和plecs的结果一样
This commit is contained in:
parent
6cefb9dae5
commit
58d2918d06
|
@ -7,7 +7,7 @@ aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/baseFSM SRC_FSM_OOP)
|
||||||
|
|
||||||
|
|
||||||
# set(keytest 789)
|
# set(keytest 789)
|
||||||
# set(child_parent 789)
|
set(child_parent 789)
|
||||||
if(DEFINED keytest)
|
if(DEFINED keytest)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
include_directories(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest)
|
||||||
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest SRC_FSM_USR)
|
aux_source_directory(${PROJECT_SOURCE_DIR}/FSM_OOP/keytest SRC_FSM_USR)
|
||||||
|
|
|
@ -92,9 +92,7 @@ void stepBaseFSM(FSM *pFSM)
|
||||||
// 进子状态机,必须从默认状态开始
|
// 进子状态机,必须从默认状态开始
|
||||||
if(childFSMTable[nextState] != NULL){
|
if(childFSMTable[nextState] != NULL){
|
||||||
FSM *cFSM = childFSMTable[nextState];
|
FSM *cFSM = childFSMTable[nextState];
|
||||||
int cFSMNextState = cFSM->privateVars->defaultState;
|
Step(cFSM);
|
||||||
cFSM->privateVars->fcns.enterActionTable[cFSMNextState](cFSM->data);
|
|
||||||
cFSM->privateVars->curState = cFSMNextState;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pFSM->privateVars->curState = nextState;
|
pFSM->privateVars->curState = nextState;
|
||||||
|
|
|
@ -73,6 +73,7 @@ static void initDataLoader(ParentFSM *pFSM){ // 必须重新实现
|
||||||
*/
|
*/
|
||||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||||
|
addSelectNextStateFcn(Idle);
|
||||||
addSelectNextStateFcn(A);
|
addSelectNextStateFcn(A);
|
||||||
addSelectNextStateFcn(B);
|
addSelectNextStateFcn(B);
|
||||||
addSelectNextStateFcn(C);
|
addSelectNextStateFcn(C);
|
||||||
|
@ -131,7 +132,7 @@ void bindChildFSM(FSM *pFSM, FSM *cFSM){
|
||||||
*/
|
*/
|
||||||
ParentFSM *createParentFSM(){
|
ParentFSM *createParentFSM(){
|
||||||
ParentFSM *pFSM;
|
ParentFSM *pFSM;
|
||||||
pFSM = (ParentFSM *)newBaseFSM(Count_State, DEFAULT_STATE);
|
pFSM = (ParentFSM *)newBaseFSM(Count_State);
|
||||||
|
|
||||||
// 重新实现的函数
|
// 重新实现的函数
|
||||||
pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step;
|
pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step;
|
||||||
|
|
|
@ -35,14 +35,17 @@ typedef enum _State
|
||||||
|
|
||||||
Count_State, /**< 必须在结尾,用来统计状态数量 */
|
Count_State, /**< 必须在结尾,用来统计状态数量 */
|
||||||
} State;
|
} State;
|
||||||
#define DEFAULT_STATE A /**< 默认状态,Idle状态会先跳转到默认状态 */
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* 下一个状态选择函数 */
|
/* 下一个状态选择函数 */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static State selectNextStateFcn(A)(ParentFSM *data, FSMSignals *signals){
|
static State selectNextStateFcn(Idle)(ParentFSMData *data, FSMSignals *signals){
|
||||||
|
return A;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(A)(ParentFSMData *data, FSMSignals *signals){
|
||||||
if(getSignal(signals, Signal_toB)){
|
if(getSignal(signals, Signal_toB)){
|
||||||
signals->lastTriggeredSignal = Signal_toB;
|
signals->lastTriggeredSignal = Signal_toB;
|
||||||
return B;
|
return B;
|
||||||
|
@ -50,7 +53,7 @@ static State selectNextStateFcn(A)(ParentFSM *data, FSMSignals *signals){
|
||||||
return Idle;
|
return Idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
static State selectNextStateFcn(B)(ParentFSM *data, FSMSignals *signals){
|
static State selectNextStateFcn(B)(ParentFSMData *data, FSMSignals *signals){
|
||||||
if(getSignal(signals, Signal_toA)){
|
if(getSignal(signals, Signal_toA)){
|
||||||
signals->lastTriggeredSignal = Signal_toA;
|
signals->lastTriggeredSignal = Signal_toA;
|
||||||
return A;
|
return A;
|
||||||
|
|
|
@ -73,6 +73,7 @@ static void initDataLoader(ChildFSM *pFSM){ // 必须重新实现
|
||||||
*/
|
*/
|
||||||
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
/* ------------------------------- 添加下一个状态选择函数 ------------------------------ */
|
||||||
|
addSelectNextStateFcn(Idle);
|
||||||
addSelectNextStateFcn(D);
|
addSelectNextStateFcn(D);
|
||||||
addSelectNextStateFcn(E);
|
addSelectNextStateFcn(E);
|
||||||
|
|
||||||
|
@ -123,7 +124,7 @@ static void step(ChildFSM* pFSM){
|
||||||
*/
|
*/
|
||||||
ChildFSM *createChildFSM(){
|
ChildFSM *createChildFSM(){
|
||||||
ChildFSM *pFSM;
|
ChildFSM *pFSM;
|
||||||
pFSM = (ChildFSM *)newBaseFSM(Count_State, DEFAULT_STATE);
|
pFSM = (ChildFSM *)newBaseFSM(Count_State);
|
||||||
|
|
||||||
// 重新实现的函数
|
// 重新实现的函数
|
||||||
pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step;
|
pFSM->base.publicFcns.step = (Avoid_WARNING_Overrider_Fcns)step;
|
||||||
|
|
|
@ -34,14 +34,18 @@ typedef enum _State
|
||||||
|
|
||||||
Count_State, /**< 必须在结尾,用来统计状态数量 */
|
Count_State, /**< 必须在结尾,用来统计状态数量 */
|
||||||
} State;
|
} State;
|
||||||
#define DEFAULT_STATE D /**< 默认状态,Idle状态会先跳转到默认状态 */
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* 下一个状态选择函数 */
|
/* 下一个状态选择函数 */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static State selectNextStateFcn(Idle)(ChildFSMData *data, FSMSignals *signals){
|
||||||
|
if(data->external.x == 1)
|
||||||
|
return D;
|
||||||
|
else
|
||||||
|
return E;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State selectNextStateFcn(D)(ChildFSMData *data, FSMSignals *signals){
|
||||||
static State selectNextStateFcn(D)(ChildFSM *data, FSMSignals *signals){
|
|
||||||
if(getSignal(signals, Signal_toE)){
|
if(getSignal(signals, Signal_toE)){
|
||||||
signals->lastTriggeredSignal = Signal_toE;
|
signals->lastTriggeredSignal = Signal_toE;
|
||||||
return E;
|
return E;
|
||||||
|
@ -49,7 +53,7 @@ static State selectNextStateFcn(D)(ChildFSM *data, FSMSignals *signals){
|
||||||
return Idle;
|
return Idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
static State selectNextStateFcn(E)(ChildFSM *data, FSMSignals *signals){
|
static State selectNextStateFcn(E)(ChildFSMData *data, FSMSignals *signals){
|
||||||
if(getSignal(signals, Signal_toD)){
|
if(getSignal(signals, Signal_toD)){
|
||||||
signals->lastTriggeredSignal = Signal_toD;
|
signals->lastTriggeredSignal = Signal_toD;
|
||||||
return D;
|
return D;
|
||||||
|
|
|
@ -16,6 +16,7 @@ int main(){
|
||||||
pFSM = createParentFSM();
|
pFSM = createParentFSM();
|
||||||
|
|
||||||
registerChildFSM(pFSM, cFSM, 2);
|
registerChildFSM(pFSM, cFSM, 2);
|
||||||
|
((ParentFSMData *)GetData(cFSM))->external.x = 1;
|
||||||
|
|
||||||
for (int k = 0; k < 15; k++)
|
for (int k = 0; k < 15; k++)
|
||||||
{
|
{
|
||||||
|
@ -23,6 +24,10 @@ int main(){
|
||||||
SetSignal(pFSM, i[k]);
|
SetSignal(pFSM, i[k]);
|
||||||
SetSignal(cFSM, j[k]);
|
SetSignal(cFSM, j[k]);
|
||||||
|
|
||||||
|
if(k > 5){
|
||||||
|
((ParentFSMData *)GetData(cFSM))->external.x = 0;
|
||||||
|
}
|
||||||
|
|
||||||
Step(pFSM);
|
Step(pFSM);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue