モード変更処理
code:c
//モードを変更する
//main.c
int main(void){
g_modectrl.ucCMode = MODE1;
g_modectrl.ucNMode = MODE1;
g_modectrl.ucLoop = 1;
while(1){
switch(g_modectrl.ucCMode){
case MODE1:
mode1();
break;
case MODE2:
mode2();
break;
case MODE3:
mode3();
break;
};
//モード更新
if(g_modectrl.ucCMode!=g_modectrl.ucNMode){
g_modectrl.ucCMode=g_modectrl.ucNMode;
printf("ucCMode=%d\n",g_modectrl.ucCMode);
}
if(g_modectrl.ucLoop == OFF){
printf("ucLoop=%d\n",g_modectrl.ucLoop);
break;
}
}
}
//main.h
typedef enum{
MODE_INT,
MODE1,
MODE2,
MODE3
}MODE;
typedef enum{
OFF,
ON
}ONOFF;
typedef struct{
int ucCMode;
int ucNMode;
int ucLoop;
}MODECTRL;
extern MODECTRL g_modectrl;
//mode.c
MODECTRL g_modectrl;
void mode1(){
while(g_modectrl.ucCMode == g_modectrl.ucNMode){
printf("mode1\n");
printf("mode1_ucNMode=%d\n",g_modectrl.ucNMode);
g_modectrl.ucNMode = MODE2;
}
}
void mode2(){
printf("mode2\n");
g_modectrl.ucLoop = OFF;
}
void mode3(){
printf("mode3\n");
}
//mode.h
void mode1();
void mode2();
void mode3();
モード遷移確認
code:c
typedef enum{
MODE_INT,
MODE1,
MODE2,
MODE3,
MODE4,
MODE5
}MODE;
typedef enum{
OFF,
ON
}ONOFF;
typedef struct{
int ucCMode;
int ucNMode;
int ucLoop;
}MODECTRL;
void modeInit(MODECTRL *pModeCtrl);
void mode1(MODECTRL *pModeCtrl);
void mode2(MODECTRL *pModeCtrl);
void mode3(MODECTRL *pModeCtrl);
void mode4();
void mode5(MODECTRL *pModeCtrl);
void mode6(MODECTRL *pModeCtrl);
int main(void){
MODECTRL g_modectrl;
modeInit(&g_modectrl);
//while(1){
for(int i = 0;i<3;i++){
switch(g_modectrl.ucCMode){
case MODE1: //ステート:モード1の時
default: //ステート:モード1,2,3以外の時
//mode1(&g_modectrl); //モード1動作
mode5(&g_modectrl);
//g_modectrl.ucLoop = OFF;
break;
case MODE2:
mode2(&g_modectrl);
break;
case MODE3:
mode3(&g_modectrl);
break;
case MODE4:
mode4();
break;
case MODE5:
mode5(&g_modectrl);
break;
};
//モード更新
if(g_modectrl.ucCMode!=g_modectrl.ucNMode){
g_modectrl.ucCMode=g_modectrl.ucNMode;
printf("ucCMode=%d\n",g_modectrl.ucCMode);
}
if(g_modectrl.ucLoop == OFF){ //処理終了
printf("ucLoop=%d\n",g_modectrl.ucLoop);
printf("処理終了");
break;
}
}
}
void modeInit(MODECTRL *pModeCtrl){
int modeselect;
//初期モード選択
modeselect = MODE5;
pModeCtrl->ucCMode = modeselect;
//pModeCtrl->ucCMode = MODE1;
pModeCtrl->ucNMode = modeselect;
//pModeCtrl->ucNMode = MODE1;
pModeCtrl->ucLoop = ON;
}
void mode1(MODECTRL *pModeCtrl){
//現在のモードと次のモードが同じ場合ループ実行
while(pModeCtrl->ucCMode == pModeCtrl->ucNMode){
printf("mode1\n");
printf("mode1_ucNMode=%d\n",pModeCtrl->ucNMode);
pModeCtrl->ucNMode = MODE3;
}
}
void mode2(MODECTRL *pModeCtrl){
printf("mode2\n");
pModeCtrl->ucLoop = OFF;
}
void mode3(MODECTRL *pModeCtrl){
printf("mode3\n");
pModeCtrl->ucNMode = MODE2;
//pModeCtrl->ucLoop = OFF;
}
void mode4(){
MODECTRL g_modectrl;
g_modectrl.ucLoop = OFF;
printf("mode4\n");
mode2(&g_modectrl);
}
void mode5(MODECTRL *pModeCtrl){
printf("mode5\n");
//pModeCtrl->ucLoop = OFF;
mode6(pModeCtrl);
}
void mode6(MODECTRL *pModeCtrl){
printf("mode6\n");
mode2(pModeCtrl);
}