# FSM **Repository Path**: baiyongchen/FSM ## Basic Information - **Project Name**: FSM - **Description**: FSM(Finite State Machine)有限状态机,可以在TXT文件中设计:当前状态-事件-新状态-动作 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-06-16 - **Last Updated**: 2025-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### FSM(Finite State Machine)项目说明 #### 开发环境 eclipse_java #### 编程方法 1. 运行eclipse_java 2. File-Import-General-Existing Projects into Workspace-next-browse-FSM-确定-fsmPrj-finish #### 打jar包nunniFSMGen.jar命令如下 * DOS提示符下进入D:盘 * 进入目录CD D:\FSM\fsmPrj\bin * jar -cvfm stateGen.jar META-INF\MANIFEST.MF com * 其中MANIFEST.MF里面定义了jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar stateGen.jar来运行该jar文件。 #### FSM在嵌入式项目中的使用方法 ``` 复制该文件夹D:\FSM\state到项目目录 修改state.txt 运行generateC.bat的内容为: java -jar stateGen.jar -v -o c state.txt 双击运行它,则可以产生如下6个文件: state.h state.c stateFSM.h stateFSM.c stateMSG.h stateMSG.c 在main.c中 ... #include "stateFSM.h" #include "stateMSG.h" ... fsm = stateFSMCreate();//启动状态机 eBeer = true;//产生事件 ... 在state.c中,编写事件代码 若事件代码耗时太长,可借助一个变量的true/false把执行代码的权限降低给main的while循环中来运行. 函数stateMSGloop()需要安排在一个1ms定时中断中运行 其中只有state.c是需要用户完善的,其它文件不必做任何改动 state.c文件在state.txt修改后,运行generateC.bat会自动追加新的内容,已有内容不被覆盖 state.txt中可以加入以//开始的注释行信息 状态不受事件影响的行不必写出来,软件会自动补全其代码到stateFSM.c中 实例如下: //说明:前缀含义s:state, e:event, a:action Context state InitialState sPowerOff ErrorState sError //当前状态--------------发生事件----------------新状态------------------执行动作------------备注 sSleep eWrong - !//感叹号的作用是调用error函数,否则会有Warn信息 sSleep eNoise sAwake aSleepNoise sSleep eBeer - aBurp sAwake eNoise - aAwakeNoise sAwake eBeer sSleep aAwakeBeer ```