欢迎来到亿配芯城! | 免费注册
你的位置:MICREL(麦瑞)半导体IC芯片全系列-亿配芯城 > 话题标签 > 状态机

状态机 相关话题

TOPIC

前言 功能业务代码写多了,回看代码会发现用if-else if-else用的越来越多,因为有很多场景需要区分,不同场景下的功能不一样,因此需要通过if做判断,场景一旦多了起来起来,用if-else if-else就会越来越多。 这里的if-else if-else通常是用来区分不同场景下的功能实现,和上篇提到的表驱动编程还不太一样。 为了避免这种情况,本编介绍一种开发方法--状态机编程。 为什么需要状态机编程?相信很多人在实现if判断的时候,偶尔会出现不小心漏掉或者写错一些触发条件,导致功能出
为实用的软件系统编写状态机并不是一件十分轻松的事情,特别是当状态机本身比较复杂的时候尤其如此,许多有过类似经历的程序员往往将其形容为“毫无创意”的过程,因为他们需要将大量的时间与精力倾注在如何管理好状态机中的各种状态上,而不是程序本身的运行逻辑。 作为一种通用的软件设计模式,各种软件系统的状态机之间肯定会或多或少地存在着一些共性,因此人们开始尝试开发一些工具来自动生成有限状态机的框架代码,而在Linux下就有一个挺不错的选择──FSME(FiniteState Machine Editor)。
首先运行fsme命令来启动状态机编辑器,然后单击工具栏上的“New”按钮来创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:事件(Event)、输入(Input)、输出(Output)、状态(State)和转换(Transition),在界面左边的树形列表中可以找到其中的四种。 状态建模 在FSME界面左边的树形列表中选择“States”项,然后按下键盘上的Insert键来插入一个新的状态,接着在右下方的“Name”文本框中输入状态的名称,再在右上方的绘图区域单击该状态所要放置
生成状态机框架 使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"Root"项,然后在右下角的"Name"文本框中输入状态机的名字"DoorFSM",再从"Initial State"下拉列表中选择状态"Opened"作为状态机的初始化状态,如图6所示。 设置初始属性 在将状态机模型保存为door.fsm文件之后,使用下面的命令可以生成包含有状态机定义的头文件: [xiaowp@l
定制状态机 目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求来进行定制,为状态机加入与软件系统本身相关的那些处理逻辑。在FSME中,与具体应用相关的操作称为输出(Output),它们实际上就是一些需要用户给出具体实现的虚函数,自动生成的状态机引擎负责在进入或者退出某个状态时调用它们。 仍然以控制城门的那个状态机为例,假设我们希望在进入每个状态时都添加一部分处理逻辑。首在FSME界面左边的树形列表
  • 共 1 页/5 条记录