Event-driven finite state machine
Encyclopedia
In computation
Computation
Computation is defined as any type of calculation. Also defined as use of computer technology in Information processing.Computation is a process following a well-defined model understood and expressed in an algorithm, protocol, network topology, etc...

, 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).


/********************************************************************/
  1. include


/********************************************************************/
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;
}
}
}

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK