生成狀態(tài)機(jī)框架
使用FSME不僅能夠進(jìn)行可視化的狀態(tài)機(jī)建模,更重要的是它還可以根據(jù)得到的模型自動(dòng)生成用C++或者Python實(shí)現(xiàn)的狀態(tài)機(jī)框架。首先在FSME界面左邊的樹(shù)形列表中選擇"Root"項(xiàng),然后在右下角的"Name"文本框中輸入狀態(tài)機(jī)的名字"DoorFSM",再?gòu)?Initial State"下拉列表中選擇狀態(tài)"Opened"作為狀態(tài)機(jī)的初始化狀態(tài),如圖6所示。
設(shè)置初始屬性

在將狀態(tài)機(jī)模型保存為door.fsm文件之后,使用下面的命令可以生成包含有狀態(tài)機(jī)定義的頭文件:
[xiaowp@linuxgam code]$ fsmc door.fsm -d -o DoorFSM.h
進(jìn)一步還可以生成包含有狀態(tài)機(jī)實(shí)現(xiàn)的框架代碼:
[xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp
如果想對(duì)生成的狀態(tài)機(jī)進(jìn)行驗(yàn)證,只需要再手工編寫(xiě)一段用于測(cè)試的代碼就可以了:
/*
* TestFSM.cpp
* 測(cè)試生成的狀態(tài)機(jī)框架
*/
#include "DoorFSM.h"
int main()
{
DoorFSM door;
door.A(DoorFSM::Close);
door.A(DoorFSM::Lock);
door.A(DoorFSM::Unlock);
door.A(DoorFSM::Open);
}
有限狀態(tài)機(jī)是由事件來(lái)進(jìn)行驅(qū)動(dòng)的,在FSME生成的狀態(tài)機(jī)框架代碼中,方法A()可以被用來(lái)向狀態(tài)機(jī)發(fā)送相應(yīng)的事件,從而提供狀態(tài)機(jī)正常運(yùn)轉(zhuǎn)所需要的"動(dòng)力"。狀態(tài)機(jī)負(fù)責(zé)在其內(nèi)部維護(hù)一個(gè)事件隊(duì)列,所有到達(dá)的事件都會(huì)先被放到事件隊(duì)列中進(jìn)行等候,從而能夠保證它們將按照到達(dá)的先后順序被依次處理。在處理每一個(gè)到達(dá)的事件時(shí),狀態(tài)機(jī)都會(huì)根據(jù)自己當(dāng)前所處的狀態(tài),檢查與該狀態(tài)對(duì)應(yīng)的轉(zhuǎn)換條件是否已經(jīng)被滿足,如果滿足的話則激活相應(yīng)的狀態(tài)轉(zhuǎn)換過(guò)程。
使用下面的命令能夠?qū)⑸傻臓顟B(tài)機(jī)框架和測(cè)試代碼編譯成一個(gè)可執(zhí)行文件:
[xiaowp@linuxgam code]$ g++ DoorFSM.cpp TestFSM.cpp -o fsm
由于之前在用fsmc命令生成狀態(tài)機(jī)代碼時(shí)使用了-d選項(xiàng),生成的狀態(tài)機(jī)框架中會(huì)包含一定的調(diào)試信息,包括狀態(tài)機(jī)中每次狀態(tài)轉(zhuǎn)換時(shí)的激活事件、轉(zhuǎn)換前的狀態(tài)、所經(jīng)歷的轉(zhuǎn)換、轉(zhuǎn)換后的狀態(tài)等,如下所示:
[xiaowp@linuxgam code]$ ./fsm
DoorFSM:event:'Close'
DoorFSM:state:'Opened'
DoorFSM:transition:'closeDoor'
DoorFSM:new state:'Closed'
DoorFSM:event:'Lock'
DoorFSM:state:'Closed'
DoorFSM:transition:'lockDoor'
DoorFSM:new state:'Locked'
DoorFSM:event:'Unlock'
DoorFSM:state:'Locked'
DoorFSM:transition:'unlockDoor'
DoorFSM:new state:'Unlocked'
DoorFSM:event:'Open'
DoorFSM:state:'Unlocked'
DoorFSM:transition:'openDoor'
DoorFSM:new state:'Opened'
-
框架
+關(guān)注
關(guān)注
0文章
404瀏覽量
18501 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
501瀏覽量
29352 -
python
+關(guān)注
關(guān)注
58文章
4889瀏覽量
90330
發(fā)布評(píng)論請(qǐng)先 登錄
如何利用Linux下的工具來(lái)自動(dòng)生成實(shí)用的狀態(tài)機(jī)框架?
[開(kāi)源框架] 極簡(jiǎn)信號(hào)/狀態(tài)機(jī)框架 NorthFrame
狀態(tài)機(jī)舉例
狀態(tài)機(jī)代碼生成工具
使用ModelSim自動(dòng)生成狀態(tài)機(jī)FSM的狀態(tài)轉(zhuǎn)換圖
FPGA:狀態(tài)機(jī)簡(jiǎn)述
什么是狀態(tài)機(jī)?狀態(tài)機(jī)5要素
MCU裸機(jī)編程的狀態(tài)機(jī)框架--第一部分
基于單片機(jī)的極簡(jiǎn)圖形化狀態(tài)機(jī)框架NorthFrame
如何構(gòu)建基于狀態(tài)機(jī)的軟件系統(tǒng)
狀態(tài)機(jī)自動(dòng)生成工具FSME
自動(dòng)生成程序狀態(tài)機(jī)代碼狀態(tài)機(jī)建模方法
如何生成狀態(tài)機(jī)框架
評(píng)論