可视化状态机直接生成代码

2023-11-13

状态机在设计某些功能的时候使用广泛,目前网上状态机自动生成工具有几种,分别如下所示:

FsmCrater:

FsmCrater
案例:[有限状态机代码生成器 FsmCrater]

SMC(The State Machine Compiler) :

SMC
官网:http://smc.sourceforge.net/
案例:状态机生成工具——SMC

Qfsm:

qfsm
官网:http://qfsm.sourceforge.net/

本文介绍:使用Qfsm结合SMC直接从状态机生成代码:

第一步、分别从qfsm和smc官网下载:qfsm-0.54.exe与Smc.jar软件及工具

qfsm-0.54.exe 下载
Smc.jar下载

第二步、qfsm-0.54.exe软件后如下图所示,具体使用请阅读官方文档:
在这里插入图片描述
第三步、按投币玩游戏逻辑绘制下面状态机,***在Entry和Exit的条件中,必须加括号,***否则生成代码会报错
在这里插入图片描述
**注新建文件是使用Free Text类型,否则无法生成Smc.jar可以使用的.sm文件
在这里插入图片描述
在这里插入图片描述
第四步、将输出的play.sm文件放到Smc.jar文件夹下,使用下面命令即可自动生成代码:本人C语言使用
最多,所以只生成C代码。

java -jar ./Smc.jar -c play.sm

Smc.jar功能强大,配合dot可生成png图形,生成代码如下所示,
在这里插入图片描述
第五步:将生成的状态机代码应用到自己的工程中,如图所示,创建工程
在这里插入图片描述
需要注意的是,在play_sm.h中

struct door;//该结构体需要用户自己定义,切格式固定,
struct door{
    struct fsmContext _fsm; //在main中定义如下
};

在play_sm.c中的几个函数也需要用户实现,如下:

int door_enter_act_push(struct door *ctxt)
{
    printf("the door enter act push\r\n");
}

int door_exit_act_push(struct door *ctxt)
{
    printf("the door exit act push\r\n");
}
int door_entry_act_put(struct door *ctxt)
{
    printf("the door enter act put\r\n");
}
int door_exit_act_put(struct door *ctxt)
{
    printf("the door exit act put\r\n");
}

调试结果如下所示:
在这里插入图片描述测试代码在GitHub上,请自行下载

https://github.com/LaddinWu/test_Qfsm.git
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可视化状态机直接生成代码 的相关文章

  • HCIP——OSPF知识点

    目录 一 OSPF协议的简介 二 OSPF的五种数据包 三 OSPF协议的7种状态机 四 OSPF 的工作过程 五 OSPF的基础配置 六 扩展配置 七 OSPF的LSA 八 OSPF的不规则区域 一 OSPF协议的简介 Ospf 开放式最

随机推荐

  • 3D渲染速度慢,花重金买显卡还是用云渲染更划算

    3D渲染对建筑师和设计师来说并不陌生 3D渲染的过程中出现渲染卡顿 特殊材质难以渲染 或者本地配置不足 本地渲染资源不够时 常常会影响工作效率 本文比较了3D渲染时 为提高工作效率 买显卡还是用云渲染更划算 希望对大家有帮助 3D渲染速度慢
  • 电脑麦克风输入没声音,如何解决

    文章目录 一 麦克风输入没声音的原因 二 解决办法 1 打开麦克风隐私权限 2 设置更换输入设备 3 打开麦克风设置 4 更新声卡驱动 重启电脑 5 设备损坏 更换设备 一 麦克风输入没声音的原因 麦克风没声音 麦克风设置问题或硬件损坏问题
  • 【数据集】浙大动态人类3d数据集LightStage

    LightStage LightStage是一个多视图数据集 在NeuralBody中提出 该数据集使用具有 20 同步摄像头的多摄像头系统捕获多个动态人类视频 人类执行复杂的动作 包括旋转 太极 手臂摆动 热身 拳击和踢腿 我们提供使用E
  • innodb存储引擎

    文章目录 1 innodb存储引擎概述 2 innodb体系架构 2 1后台线程 2 2内存 1 缓冲池 2 LRU list 和 Flush list 和Free list 3 重做日志缓冲 4 额外的内存池 2 4Checkpoint技
  • 在AIX4.3.3 ; AIX5.1 和 AIX5.2上安装OpenSSH

    在AIX4 3 3 AIX5 1 和 AIX5 2上安装OpenSSH 在AIX4 3 3 AIX5 1 和 AIX5 2上安装OpenSSH 一 在IBM AIX4 3 3 上安装OpenSSH At 4 3 3 the openSSH
  • 一战上岸北京211 初试+复试 408错题笔记

    趁着现在还记着点复试的内容我先把复试的内容捋一遍 先是政治问题 都是大概意思 假如导师给你分配的事情比较多 你心情会发生什么样的变化 怎么看待近两年中国的抗疫历程 我国把人民生命健康放在第一位说明了什么 怎么看待网络打赏行为 应该还有一个问
  • 树莓派Ubuntu20.04安装ros系统

    第一位大佬的博文 第二位大佬的博文 首先设置软件源 这里可以是官方源也可以是镜像 由于我官方源就成功了 所以没用镜像源 sudo sh c echo deb http packages ros org ros ubuntu lsb rele
  • AI实战训练营(Class 5)MMPretrain代码实战

    AI实战训练营 Class 5 MMPretrain代码实战 1 安装MMPretrain 首先安装openmim工具 从源码安装mmpretrain 通过下面的命令安装多模态版本的 mmpretrain 2 熟悉MMPretrain 猫狗
  • Traceback (most recent call last): File "", line 1, in ImportError: No module named

    在学习python的过程中会遇到如下错误 gt gt gt import mytest Traceback most recent call last File
  • RabbitMQ 消息可靠性投递+消费

    RabbitMQ 消息可靠性投递 消费 任何消息中间件发消息投递的可靠性都是开发者选择的重要参考依据 我们希望的是发送的每一条消息都是可以被消费者正确处理的 但是没有哪个消息中间件可以保证消息一定 100 投递成功 那么如果消息投递失败我们
  • 使用最新版本Android NDK-r21 编译 opencv-3.3.1 + opencv_contrib-3.3.1

    由于新版本的NDK跟旧版本NDK编译的opencv存在兼容问题 所以需要使用最新的NDK重新编译opencv 方法步骤如下 Android NDK r21 编译 opencv 3 3 1 opencv contrib 3 3 1 1 sud
  • Github使用学习笔记(三)

    第三节任务 一不小心把代码改残了 我该如何回退到曾经的版本 一 git log查看所有历史版本 发现commit的版本号还是很长的 二 回退版本 直接使用 git reset hard 版本号 就好 版本号也可以不写齐全 直接选择前几位写下
  • [LeetCode-14]-Longest Common Prefix (最长公共前缀)

    文章目录 题目相关 Solution 题目相关 题目解读 查找一个字符串数组的公共前缀 原题描述 原题链接 Write a function to find the longest common prefix string amongst
  • 下一代MOM,这你让MES+MRP情何以堪?

    MOM是Manufacturing Operation Management的缩写 中文就是制造运营管理 这个词是美国仪器 系统和自动化协会 Instrumentation System and Automation Society ISA
  • IDEA软件安装与配置

    一 IDEA简介 1 IDEA介绍 IDEA 全称 IntelliJ IDEA 是java语言开发的集成环境 IntelliJ在业界被公认为最好的java开发工具之一 尤其在智能代码助手 代码自动提示 重构 J2EE支持 各类版本工具 gi
  • H5开发的CRM手机移动端销售漏斗图

  • leetcode算法题--把数字翻译成字符串

    原题链接 https leetcode cn problems ba shu zi fan yi cheng zi fu chuan lcof envType study plan v2 envId coding interviews 其实
  • form基础表单总结

    一 form表单用户搜集用户输入内容 form表单的相关属性 1 action 此属性表示提交表单时要执行的操作 通常是将表单数据提交到服务器处理表单数据的文件脚本中 2 target 此属性表示在提交表单之后 服务器相应数据在何处显示 默
  • Vue指令之v-for和key属性—码虫

    Vue指令之v for和key属性 迭代数组 ul li 索引 i 姓名 item name 年龄 item age li ul 迭代对象中的属性 div val key i div 迭代数字 p 这是第 i 个P标签 p 2 2 0 的版
  • 可视化状态机直接生成代码

    状态机在设计某些功能的时候使用广泛 目前网上状态机自动生成工具有几种 分别如下所示 FsmCrater FsmCrater 案例 有限状态机代码生成器 FsmCrater SMC The State Machine Compiler SMC