事件驅動有限狀態機

在計算機科學中,有限状态机(FSM)是事件驅動的,若從一個狀態到另一個狀態的轉換是由事件或是訊息所驅發的,這和有限状态机一詞出自的語法分析理論相反,其中將状态机描述為消費字元或是記號(tokens)的機器。

多半有限状态机是一個线程或行程,是較大應用程式的一部分,需要和其他程式通訊。例如,電信通訊協定大部份都會用事件驅動有限狀態機來表示。

C語言的例子
以下程式描述一個簡單汽車收音機系統的狀態機,基本上是一個讀取事件的無窮迴圈,狀態機有二個狀態:收音機模式,以及CD模式。其事件有「模式切換」(收音機模式和CD模式之間的切換)以及「下一個」(下一個廣播電台或是CD的下一軌)。

/********************************************************************/
#include

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

相關條目

  • 有限状态机

*

延伸閱讀
*
*

评论 (0)

  • 还没有评论,来抢沙发吧。