Example and exercise. A FSM with pointers

Dependencies:   mbed

Committer:
Jamess
Date:
Thu May 28 19:14:02 2015 +0000
Revision:
0:4205137775e5
How to make a FSM (finite state machine) with pointer in C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jamess 0:4205137775e5 1 /*****************************************************************/
Jamess 0:4205137775e5 2 /* How to use State Machines in C */
Jamess 0:4205137775e5 3 /* Switch|Case */
Jamess 0:4205137775e5 4 /*****************************************************************/
Jamess 0:4205137775e5 5
Jamess 0:4205137775e5 6 //Librarys:
Jamess 0:4205137775e5 7 #include "mbed.h"
Jamess 0:4205137775e5 8
Jamess 0:4205137775e5 9 //Configuration:
Jamess 0:4205137775e5 10
Jamess 0:4205137775e5 11 DigitalOut myled(LED1);
Jamess 0:4205137775e5 12 Serial pc(USBTX,USBRX);
Jamess 0:4205137775e5 13
Jamess 0:4205137775e5 14 //Functions:
Jamess 0:4205137775e5 15 void SendThings(void); // Sends Something to the computer
Jamess 0:4205137775e5 16 void LedON(void); // Turns RED LED ON
Jamess 0:4205137775e5 17 void LedOF(void); // Turns RED LED OFF
Jamess 0:4205137775e5 18 void PrepThings(void); // Prepares Something
Jamess 0:4205137775e5 19 //Function Pointer:
Jamess 0:4205137775e5 20 void (*state)()=SendThings;;
Jamess 0:4205137775e5 21
Jamess 0:4205137775e5 22
Jamess 0:4205137775e5 23 int main() {
Jamess 0:4205137775e5 24
Jamess 0:4205137775e5 25 //State Machine
Jamess 0:4205137775e5 26 while(1) {
Jamess 0:4205137775e5 27 (*state)();
Jamess 0:4205137775e5 28 wait(1);
Jamess 0:4205137775e5 29 }
Jamess 0:4205137775e5 30 }
Jamess 0:4205137775e5 31 void SendThings(void){
Jamess 0:4205137775e5 32 pc.printf("Sedingthings");
Jamess 0:4205137775e5 33 state=LedON;
Jamess 0:4205137775e5 34 }
Jamess 0:4205137775e5 35 void LedON(void){
Jamess 0:4205137775e5 36 pc.printf("ON");
Jamess 0:4205137775e5 37 state=LedOF;
Jamess 0:4205137775e5 38 }
Jamess 0:4205137775e5 39 void LedOF(void){
Jamess 0:4205137775e5 40 pc.printf("OFF");
Jamess 0:4205137775e5 41 state=PrepThings;
Jamess 0:4205137775e5 42 }
Jamess 0:4205137775e5 43 void PrepThings(void){
Jamess 0:4205137775e5 44 pc.printf("preparing");
Jamess 0:4205137775e5 45 state=SendThings;
Jamess 0:4205137775e5 46 }