Event-driven finite-state machine
In computation, a finite-state machine (FSM) is event driven if the transition from one state to another is triggered by an event or a message. This is in contrast to the parsing-theory origins of the term finite-state machine where the machine is described as consuming characters or tokens.
Often these machines are implemented as threads or processes communicating with one another as part of a larger application. For example, a telecommunication protocol is most of the time implemented as an event-driven finite-state machine.
Example in C
This code describes the state machine for a very basic car radio system. It is basically an infinite loop that reads incoming events. The state machine is only 2 states: radio mode, or CD mode. The event is either a mode change from radio to cd back and forth, or a go to next (next preset for radio or next track for CD).
/********************************************************************/
#include <stdio.h>
/********************************************************************/
typedef enum {
RADIO, CD
} STATES;
int readEventFromMessageQueue(void);
/********************************************************************/
int main(void)
{
/* Default state is radio */
int state = RADIO;
stationNumber=0;
trackNumber=0;
/* Infinite loop */
while( 1 )
{
/* Read the next incoming event. Usually this is a blocking function. */
event = readEventFromMessageQueue()
/* Switch the state and the event to execute the right transition. */
switch( state )
{
case RADIO:
switch(event)
{
case mode:
/* Change the state */
state = CD;
break;
case next:
/* Increase the station number */
stationNumber++;
break;
}
break;
case CD:
switch(event)
{
case mode:
/* Change the state */
state = RADIO;
break;
case next:
/* Go to the next track */
trackNumber++;
break;
}
break;
}
}
}
See also
Further reading
- Peatman, John B. (1977). Microcomputer-based Design. New York: McGraw-Hill, Inc. ISBN 0-07-049138-0.
- Brookshear, J. Glenn (1989). Theory of Computation: Formal Languages, Automata, and Complexity. Redwood City, California: Benjamin/Cummings Publish Company, Inc. ISBN 0-8053-0143-7.