Händelsestyrd finite-state-maskin
Vid beräkning är en finita-tillståndsmaskin (FSM) händelsedriven om övergången från ett tillstånd till ett annat utlöses av en händelse eller ett meddelande . Detta är i motsats till ursprunget för parsing-teorin för termen finita-tillståndsmaskin där maskinen beskrivs som att den konsumerar tecken eller tokens .
Ofta är dessa maskiner implementerade som trådar eller processer som kommunicerar med varandra som en del av en större applikation. Till exempel är ett telekommunikationsprotokoll för det mesta implementerat som en händelsestyrd finite-state-maskin.
Exempel i C
Denna kod beskriver tillståndsmaskinen för ett mycket grundläggande bilradiosystem. Det är i grunden en oändlig loop som läser inkommande händelser. Tillståndsmaskinen har bara två tillstånd: radioläge eller CD-läge. Händelsen är antingen en lägesändring från radio till cd fram och tillbaka, eller en gå till nästa (nästa förinställning för radio eller nästa spår för cd).
0
0
/************************************************** *******************/ #include <stdio.h> /********************** **********************************************/ typedef enum { ST_RADIO , ST_CD } STATES ; typedef enum { EVT_MODE , EVT_NEXT } HÄNDELSER ; EVENTS readEventFromMessageQueue ( void ); /************************************************** *******************/ int main ( void ) { /* Standardtillstånd är radio */ STATES state = ST_RADIO ; int stationNumber = ; int trackNumber = ; /* Infinite loop */ while ( 1 ) { /* Läs nästa inkommande händelse. Vanligtvis är detta en blockerande funktion. */ EVENTS event = readEventFromMessageQueue (); /* Byt tillstånd och händelse för att utföra rätt övergång. */ switch ( state ) { case ST_RADIO : switch ( händelse ) { case EVT_MODE : /* Ändra tillståndet */ state = ST_CD ; bryta ; case EVT_NEXT : /* Öka stationsnumret */ stationNumber ++ ; bryta ; } bryta ; case ST_CD : switch ( händelse ) { case EVT_MODE : /* Ändra tillståndet */ state = ST_RADIO ; bryta ; case EVT_NEXT : /* Gå till nästa spår */ trackNumber ++ ; bryta ; } bryta ; } } }
Se även
Vidare läsning
- Peatman, John B. (1977). Mikrodatorbaserad design . New York: McGraw-Hill, Inc. ISBN 0-07-049138-0 .
- Brookshear, J. Glenn (1989). Beräkningsteori: formella språk, automater och komplexitet . Redwood City, Kalifornien: Benjamin/Cummings Publish Company, Inc. ISBN 0-8053-0143-7 .