sm001 A state machine in CTransporting a struct from state to state. You can move info around betwen the states All include in the C source below is just for printing and sleep raw sm001.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NRPARM 4
typedef struct stateTp {
int parm[NRPARM];
void (*ptr2state)(struct stateTp * stateInfo);
} stateTp;
void init(stateTp * stateInfo);
void ledOn(stateTp * stateInfo);
void ledOff(stateTp * stateInfo);
void init(stateTp * stateInfo)
{
printf("\ninit\n");
stateInfo->parm[0]++;
sleep(1);
stateInfo->ptr2state = ledOn;
return;
}
void ledOn(stateTp * stateInfo)
{
printf("\nledOn\n");
stateInfo->parm[1]++;
sleep(1);
stateInfo->ptr2state = ledOff;
return;
}
void ledOff(stateTp * stateInfo)
{
printf("\nledOff\n");
stateInfo->parm[2]++;
sleep(1);
stateInfo->ptr2state = ledOn;
return;
}
int enVar;
int *ptr2enVar;
void dumpVars(stateTp * stateInfo)
{
printf("\ndumpVars in state variable");
for (int i = 0; i < NRPARM; i++) {
printf("%i ", stateInfo->parm[i]);
}
}
int main()
{
stateTp curState;
curState.ptr2state = init;
for (int i = 0 ; i < NRPARM; i++) {
curState.parm[i] = 0;
}
printf("\nstarting state machine\n");
while (1) {
printf("\nback in scheduler");
dumpVars(&curState); // debug :-)
(*curState.ptr2state)(&curState);
}
}
|