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

    文章

    266

    浏览量

    16974
  • 状态机
    +关注

    关注

    2

    文章

    430

    浏览量

    26928
  • python
    +关注

    关注

    51

    文章

    4100

    浏览量

    82770
收藏 人收藏

    评论

    相关推荐

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

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

    状态机代码生成工具

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

    状态机原理及用法

    状态机原理及用法状态机原理及用法状态机原理及用法
    发表于 03-15 15:25 54次下载

    MCU裸机编程的状态机框架--第一部分

    状态机框架--第一部分1 状态机的概念1.1 状态机的要素1.2 状态迁移表1.3 状态机思路实现一个时钟程序1.4 状态机应用的注意事项1.5 更复杂的状态机FSM编程是裸机编程
    发表于 12-09 13:21 17次下载
    MCU裸机编程的<b>状态机</b><b>框架</b>--第一部分

    状态模式(状态机)

    状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章《c语言设计模式–状态模式(状态机)》(来源:embed linux
    发表于 12-16 16:53 5次下载
    <b>状态</b>模式(<b>状态机</b>)

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

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

    状态机举例

    状态机举例 你可以指定
    发表于 03-28 15:18 842次阅读

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

    状态机FSM,状态转换控制着整个程序的流程,为了理解程序,我们经常需要把状态机状态转换图画出来,这样看起来很直观,但是,有没有办法自动生成状态转换图呢?
    发表于 02-10 15:39 1.3w次阅读
    使用ModelSim自动<b>生成</b><b>状态机</b>FSM的<b>状态</b>转换图

    状态机概述 如何理解状态机

    状态机的基本概述以及通过简单的实例理解
    的头像 发表于 01-02 18:03 9584次阅读
    <b>状态机</b>概述  如何理解<b>状态机</b>

    FPGA:状态机简述

    状态机简介 状态机分类 Mealy 型状态机 Moore 型状态机 状态机描述 一段式状态机 二段式状态机 三段式状态机 状态机优缺点 总结 扩展-四段式状态机 01. 前言
    的头像 发表于 11-05 17:58 5815次阅读
    FPGA:<b>状态机</b>简述

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

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

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

    状态机的软件系统,以及如何利用Linux下的工具来自动生成实用的状态机框架
    的头像 发表于 09-14 10:55 1017次阅读

    状态机自动生成工具FSME

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

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

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

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,状态机被广泛应用于各种场景,如CPU指令集、内存控制器、总线控制器等。
    的头像 发表于 10-19 10:27 50次阅读