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 { ST_RADIO, ST_CD } STATES; typedef enum { EVT_MODE, EVT_NEXT } EVENTS; EVENTS readEventFromMessageQueue(void); /********************************************************************/ int main(void) { /* Default state is radio */ STATES state = ST_RADIO; int stationNumber = 0; int trackNumber = 0; /* Infinite loop */ while(1) { /* Read the next incoming event. Usually this is a blocking function. */ EVENTS event = readEventFromMessageQueue(); /* Switch the state and the event to execute the right transition. */ switch(state) { case ST_RADIO: switch(event) { case EVT_MODE: /* Change the state */ state = ST_CD; break; case EVT_NEXT: /* Increase the station number */ stationNumber++; break; } break; case ST_CD: switch(event) { case EVT_MODE: /* Change the state */ state = ST_RADIO; break; case EVT_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.