이벤트 구동 유한 상태 기계

Event-driven finite-state machine

계산에서, 한 상태에서 다른 상태로의 전환이 사건이나 메시지에 의해 촉발되는 경우 유한 상태 기계(FSM)는 사건을 구동한다.이는 기계가 문자토큰을 소비하는 것으로 묘사되는 유한 상태 기계라는 용어의 파싱 이론적 기원과는 대조적이다.

종종 이러한 기계들은 더 큰 애플리케이션의 일부로 서로 통신하는 스레드나 프로세스로 구현된다.예를 들어, 통신 프로토콜은 대부분 사건 주도형 유한 상태 기계로서 구현된다.

C의 예

이 코드는 매우 기본적인 자동차 라디오 시스템을 위한 주 기계를 설명한다.기본적으로 들어오는 사건을 읽는 무한 루프다.상태 기계는 라디오 모드 또는 CD 모드 중 두 가지 상태일 뿐이다.이벤트는 라디오에서 CD로 앞뒤로 모드를 변경하거나 다음(라디오의 다음 사전 설정 또는 CD의 다음 트랙)으로 이동한다.

/********************************************************************/ #include <stdio.h>  /********************************************************************/ 타이피프 열거하다 {         ST_라디오,         ST_CD } 미국.;  타이피프 열거하다 {         EVT_MODE,         EVT_NEXT } 이벤트;  이벤트 readEventFromMessageQueue(공허하게 하다);  /********************************************************************/ 인트로 본래의(공허하게 하다) {   /* 기본 상태는 라디오 */     미국.  = ST_라디오;   인트로 스테이션 번호 = 0;   인트로 트랙 번호 = 0;    /* 무한 루프 */   하는 동안에 (1)   {     /* 다음 수신 이벤트를 읽으십시오.보통 이것은 차단 기능이다.*/     이벤트 사건 = readEventFromMessageQueue();      /* 상태와 이벤트를 전환하여 올바른 전환을 실행하십시오.*/     바꾸다 ()     {       케이스 ST_라디오:         바꾸다 (사건)         {           케이스 EVT_MODE:             /* 상태 변경 */              = ST_CD;             부숴뜨리다;           케이스 EVT_NEXT:             /* 스테이션 번호 증가 */             스테이션 번호++;             부숴뜨리다;         }         부숴뜨리다;        케이스 ST_CD:         바꾸다 (사건)         {           케이스 EVT_MODE:             /* 상태 변경 */              = ST_라디오;             부숴뜨리다;           케이스 EVT_NEXT:             /* 다음 트랙으로 이동 */             트랙 번호++;             부숴뜨리다;         }         부숴뜨리다;     }   } } 

참고 항목

추가 읽기

  • 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.