There are two common approaches for implementing an event based state machine.
- Using conditional statements
- Using lookup table
Using conditional statements
This is a very simple approach. A switch-case statement or if-else statement is used to check each state. Within each state, another conditional statement is added to check the event triggered. A handler is then added for that state/event combination. Alternatively, we could swap the order and check the event first and then the state. If there is a state change involved, the handler returns the new state.
A sample implementation for the state machine is shown below.
Table based approach
In this approach, the state machine is coded in a table with one dimension as states and the other as events. Each element in the table has the handler for the state/event combination. The table could be implemented in C using a two-dimensional array of function pointers.
An example implementation for the coffee vending machine is shown below.
No comments:
Post a Comment