有限状态机代码生成器 FsmCrater

有限状态机代码生成器 FsmCrater V0.1.0

链接:https://pan.baidu.com/s/1B6oPkTwfdvOncIcZ6FfFhw
提取码:icbg

界面预览
有限状态机代码生成器 FsmCrater_第1张图片
生成代码预览.c
有限状态机代码生成器 FsmCrater_第2张图片
生成代码预览.h
有限状态机代码生成器 FsmCrater_第3张图片

快速上手

1、解压即用FsmCrater.exe
有限状态机代码生成器 FsmCrater_第4张图片
首次使用先选择生成器
有限状态机代码生成器 FsmCrater_第5张图片
在tools目录下有一个fsmCrater_C.exe,由于本辣鸡就会C语言,就先弄了一个。
您也可以编写自己的fsmCrater_XXX.exe来实现其他语言的状态机生成器,或者写一个更好的C语言状态机框架
后续会再写一篇文章说明如何写这个fsmCrater_XXX.exe
配置好生成器后以后再打开软件就不用重新配了
有限状态机代码生成器 FsmCrater_第6张图片
new一个工程后就可以摆状态了
顾名思义的两个按钮
注意添加节点时,节点的名称将作为变量名,故只能使用数字、字母、下划线。而说明则会作为注释内容
有限状态机代码生成器 FsmCrater_第7张图片
双击状态转移矩阵(就是红圈里的那个表)中的某个单元格,即可添加/取消从源到目标的连线
有限状态机代码生成器 FsmCrater_第8张图片
状态机构建差不多了,点击生成!
会出现询问是否生成库文件,点是即可
有限状态机代码生成器 FsmCrater_第9张图片
可以看到生成的四个文件:
cfsm_core.c/h即为库文件
fsmapp_newfsm.c/h即为生成的状态机代码
注意!生成后的代码不要着急在里面写用户代码,拷贝到你的工程再干活,否则下次生成就覆盖了!
有限状态机代码生成器 FsmCrater_第10张图片
打开fsmapp_newfsm.h,可以看最底下有调用方法,很简单只需要指定一个初始状态start,然后一直loop这个状态机就好了
有限状态机代码生成器 FsmCrater_第11张图片
打开fsmapp_newfsm.c,该文件分两部分,上面用“状态机: newfsm 自动生成 不要编辑↓” “状态机: newfsm 自动生成 不要编辑↑”括起来的不要编辑,如果想改状态机可以在代码生成器上做修改然后重新生成
有限状态机代码生成器 FsmCrater_第12张图片
状态机: newfsm 用户代码区↓—状态机: newfsm 用户代码区↑ 这个区间的代码是用户实现逻辑的地方
这里以"newfsm"状态机下的"1"状态为例介绍四类函数,写完这四类函数,状态机就可以正常工作了。注意是四类,你总共要写多少函数与状态机的复杂程度有关,所以设计状态机的时候一定想想如何化简
void newfsm_XInitFun(cfsm_modeIndex_Type lastModeIndex)
描述:其他状态转移到X状态时,X状态的初始化动作
输入参数 lastModeIndex:进入该状态前的上一个状态
void newfsm_XLoopFun(void)
描述:状态X的loop函数
cfsm_modeSwitchFlag_type newfsm_ConditionFun_A_to_B(cfsm_modeIndex_Type nextModeIndex)
描述:状态A是否达到向状态B转移的条件判断
输入参数 nextModeIndex:即将转移的下一个状态。实际上这个传入参数一定是B状态,预留这个接口是为了后续用户自己写统一转移函数
输出参数:返回cfsm_modeSwitchFlag_invalid 则没有达到转移条件,返回cfsm_modeSwitchFlag_valid 则达到转移条件
void newfsm_ActionFun_A_to_B(cfsm_modeIndex_Type nextModeIndex)
描述:状态A向状态B转移时要执行的动作
输入参数 lastModeIndex:转移的源状态。实际上这个传入参数一定是A状态,预留这个接口是为了后续用户自己写统一转移函数

有限状态机代码生成器 FsmCrater_第13张图片

你可能感兴趣的:(自编小工具,状态机,代码生成器)