0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何生成状态机框架

麦辣鸡腿堡 来源:车端 作者:车端 2023-09-13 16:54 次阅读

生成状态机框架

使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"Root"项,然后在右下角的"Name"文本框中输入状态机的名字"DoorFSM",再从"Initial State"下拉列表中选择状态"Opened"作为状态机的初始化状态,如图6所示。

设置初始属性

图片

在将状态机模型保存为door.fsm文件之后,使用下面的命令可以生成包含有状态机定义的头文件:

[xiaowp@linuxgam code]$ fsmc door.fsm -d -o DoorFSM.h

进一步还可以生成包含有状态机实现的框架代码:

[xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp

如果想对生成的状态机进行验证,只需要再手工编写一段用于测试的代码就可以了:

/*
* TestFSM.cpp
* 测试生成的状态机框架
*/

#include "DoorFSM.h"

int main()
{
DoorFSM door;
door.A(DoorFSM::Close);
door.A(DoorFSM::Lock);
door.A(DoorFSM::Unlock);
door.A(DoorFSM::Open);
}

有限状态机是由事件来进行驱动的,在FSME生成的状态机框架代码中,方法A()可以被用来向状态机发送相应的事件,从而提供状态机正常运转所需要的"动力"。状态机负责在其内部维护一个事件队列,所有到达的事件都会先被放到事件队列中进行等候,从而能够保证它们将按照到达的先后顺序被依次处理。在处理每一个到达的事件时,状态机都会根据自己当前所处的状态,检查与该状态对应的转换条件是否已经被满足,如果满足的话则激活相应的状态转换过程。

使用下面的命令能够将生成的状态机框架和测试代码编译成一个可执行文件:

[xiaowp@linuxgam code]$ g++ DoorFSM.cpp TestFSM.cpp -o fsm

由于之前在用fsmc命令生成状态机代码时使用了-d选项,生成的状态机框架中会包含一定的调试信息,包括状态机中每次状态转换时的激活事件、转换前的状态、所经历的转换、转换后的状态等,如下所示:

[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'
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    297

    浏览量

    17045
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27182
  • python
    +关注

    关注

    51

    文章

    4676

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    如何利用Linux下的工具来自动生成实用的状态机框架

    (Finite State Machine),是一种应用非常广泛的软件设计模式(Design Pattern)。本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机
    的头像 发表于 11-25 14:15 720次阅读
    如何利用Linux下的工具来自动<b class='flag-5'>生成</b>实用的<b class='flag-5'>状态机</b><b class='flag-5'>框架</b>?

    基于队列的灵活状态机——WTYKAMC@2023框架

    本帖最后由 yk74110 于 2024-4-18 16:48 编辑 WTYKAMC@2023框架 【简介】 这是一个基于队列的灵活状态机,可以满足队列元素先进先出,先进后出,后进后出
    发表于 11-03 16:11

    QM UML状态机建模实例之Blinky for cortex-m0

    USB,LED灯简单介绍完QP和QpNano后,下面才是我要重点推荐使用QP框架的原因。QP框架允许完全手工编程和使用自动生成代码工具QM。QM(QP™ Modeler)建模是基于QP框架
    发表于 08-15 20:17

    labVIEW状态机在实战中的应用(基础)

    状态机的使用在实战项目中是经常使用到的,可能每个公司所用的LabVIEW测试框架不同,但是状态机的使用一定不可避免,所以要理解一个LabVIEW测试框架。就必须看懂并学会使用
    发表于 12-25 16:53

    [开源框架] 极简信号/状态机框架 NorthFrame

    NorthFrame 单片极简信号/状态机框架讨论QQ群:431600056gitee地址:https://gitee.com/PISCES_X/NorthFrame单片开发中是否
    发表于 02-25 13:52

    什么是状态机状态机是如何编程的?

    什么是状态机状态机是如何编程的?
    发表于 10-20 07:43

    什么是状态机状态机的三种实现方法

    的编程水平呢?学会一种好的编程框架或者一种编程思想,可能会受用终生!比如模块化编程,框架式编程,状态机编程等等,都
    发表于 12-22 06:51

    MCU裸机编程状态机的定义与注意事项是什么

    MCU裸机编程的状态机框架--第一部分1 状态机的概念1.1 状态机的要素1.2 状态迁移表1.3 状态
    发表于 02-14 06:02

    状态机代码生成工具

    状态机代码生成工具状态机代码生成工具状态机代码生成工具状态机
    发表于 11-19 15:12 9次下载

    使用ModelSim自动生成状态机FSM的状态转换图

    HDL代码设计中重要的内容之一就是设计程序的状态机FSM,状态转换控制着整个程序的流程,为了理解程序,我们经常需要把状态机状态转换图画出来,这样看起来很直观,但是,有没有办法自动
    发表于 02-10 15:39 1.5w次阅读
    使用ModelSim自动<b class='flag-5'>生成</b><b class='flag-5'>状态机</b>FSM的<b class='flag-5'>状态</b>转换图

    什么是状态机状态机5要素

    玩单片机还可以,各个外设也都会驱动,但是如果让你完整的写一套代码时,却无逻辑与框架可言。这说明编程还处于比较低的水平,你需要学会一种好的编程框架或者一种编程思想!比如模块化编程、状态机编程、分层思想
    的头像 发表于 07-27 11:23 1.9w次阅读
    什么是<b class='flag-5'>状态机</b>?<b class='flag-5'>状态机</b>5要素

    基于单片机的极简图形化状态机框架NorthFrame

    NorthFrame是基于非UML极简理念的状态机框架。配合NF_FsmDesigner图形化开发工具,可无负担替代传统switch-case状态机开发。
    发表于 02-08 15:44 3次下载
    基于单片机的极简图形化<b class='flag-5'>状态机</b><b class='flag-5'>框架</b>NorthFrame

    如何构建基于状态机的软件系统

    模式(Design Pattern)。本文介绍如何构建基于状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架
    的头像 发表于 09-14 10:55 1288次阅读

    状态机自动生成工具FSME

    状态机中的各种状态上,而不是程序本身的运行逻辑。 作为一种通用的软件设计模式,各种软件系统的状态机之间肯定会或多或少地存在着一些共性,因此人们开始尝试开发一些工具来自动生成有限
    的头像 发表于 09-13 16:45 1078次阅读
    <b class='flag-5'>状态机</b>自动<b class='flag-5'>生成</b>工具FSME

    自动生成程序状态机代码状态机建模方法

    首先运行fsme命令来启动状态机编辑器,然后单击工具栏上的“New”按钮来创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:事件(Event)、输入(Input)、输出(Output
    的头像 发表于 09-13 16:50 733次阅读
    自动<b class='flag-5'>生成</b>程序<b class='flag-5'>状态机</b>代码<b class='flag-5'>状态机</b>建模方法