APP下载

状态机在嵌入式系统设计中的应用*

2016-11-10王春武程礼邦刘春玲王立忠

单片机与嵌入式系统应用 2016年9期
关键词:运算符状态机流程图

王春武,程礼邦,刘春玲,王立忠

状态机在嵌入式系统设计中的应用*

王春武,程礼邦,刘春玲,王立忠

(吉林师范大学信息技术学院,四平136000)

为了使嵌入式系统软件更易于编写,并且提高可维护性,本文将有限状态机引入到嵌入式系统设计中。以工程实例为背景,首先利用程序流程图对算法进行描述,然后提出了状态机建模的基本步骤和使用方法,最后通过对比得出了状态机在描述算法上的优势。

FSM;嵌入式系统;流程图

引 言

流程图作为一种表达算法的图形化工具,常用于嵌入式系统程序开发过程,其通过特定的图形和线段使复杂的算法变得形象直观,脉络清晰,避免了歧义性,易于理解和产生代码[1]。但是复杂的程序会导致流程图的篇幅过大,以及流程线的无约束性会导致流程的任意转向,从而造成程序阅读和修改上的困难,不利于结构化程序的设计[2]。针对此问题,结合多年的嵌入式系统设计和教学经验,提出将数字电路中的有限状态机思想引入到嵌入式系统设计中,从具体工程实例出发,讨论状态划分、激励和响应表达、转化为具体程序的方法,并通过与流程图对比,说明该方法的优势。

1 状态机的概念

有限状态机(Finite State Machine,FSM)简称状态机,它是由一系列状态节点、状态连接线、激励信号和响应信号组成[3]的有向图。在激励信号的作用下,状态机将响*基金项目:吉林省职业教育与成人教育教学改革研究重点课题(2014ZCY249);吉林省教育厅“十二五”科学技术研究项目(2014[489])。应一系列事件而运行,从而实现在有限状态节点之间的有序转换。FSM包含4个要素,即现态、次态激励、响应。其中,当前状态节点称为现态,下一状态节点称为次态,导致状态发生变化的信号称为激励,产生的动作称为响应[4]。在状态机运行时,任何时候FSM只能处于给定状态中的一个,当接收到一个激励事件时,状态机则产生一个响应输出,与此同时也可能伴随着状态的转移。因此,状态的转移和输出不仅与输入事件有关,而且还与状态机在前一时刻的状态有关。

2 状态机建模

嵌入式系统设计中涉及到的实例一般可分解为若干个有限状态,同时系统一般会在外部触发下产生相应的动作,这一特点非常适合采用状态机对系统进行事件分析。在建立状态机时,首先需要对系统的工作状态进行全面分析,以耦合度最小为原则,合理划分系统的状态。然后,找出在不同状态下的所有激励信号和响应动作,并利用带箭头的线段标注状态转移方向,其中激励和响应信号用“/”隔开,标注在转移线段上。状态机建立完成后,需要认真校验所有状态、激励和响应信号的完整性,以确保状态和状态转移线的正确性和冗余性。最后,对照状态图,以激励信号作为判断条件,将状态图中的动作转化为具体执行代码。

3 流程图与状态机方案对比

为了说明状态机的优势,以STM32F103VET6处理器为控制核心,配合矩阵式按键和LCD1602液晶模块,以计算器的设计为工程背景,对比流程图和状态机在算法描述上的优劣性。

经过对计算器的运算规则进行归纳可知,计算过程可以抽象为式(1),即按照双目运算规则,首先完成数值n1的录入,然后确定运算符号op,再继续录入数值n2,最后输入“=”号或运算符完成一次运算过程。若要连续运算,则可将本次运算结果保存至n1,再重复以上步骤[5-6]。

3.1流程图表示法

利用流程图表达具体的算法如图1所示,设变量n用于保存每次按键的信息,则算法可以描述为:

①复位时,系统初始化显示变量n1的初值为0;

②运行时,若按下的n是数值键,则依据式(2)更新n1,否则转至步骤③;

③保存运算符到变量op中,并设定n2初值为0,转至步骤④;

④若按下的n是数值键,则依据式(3)更新n2,否则转至步骤⑤;

⑤依据式(1)完成运算,判断按键情况,若按下的n是运算符,则在完成计算后转至步骤④,否则,说明按下了“=”,转至步骤⑥;

⑥若n是数值键,则更新n1并转至步骤②,否则更新op并转至步骤④。

3.2状态机表示法

根据状态机的思想可知,该系统能够划分为3个基本状态0~2,其中0态代表为n1赋值状态,1态代表为n2赋值状态,2态代表为过渡状态。按键作为系统的激励信号可分为3种情况,即数字键、“=”号键和运算符(“+”、“-”、“*”、“/”)。利用状态图表达具体的算法如图2所示,具体运算步骤为:

①初始化n1为0;

②0态下接收到数字键,按照式(2)更新n1,状态不变;

③0态下接收到运算符,则保存运算符到op,同时转到1态;

④1态下接收到数字键,按照式(3)更新n2,状态不变;

⑤1态下接收到“=”,则按照式(1)计算结果,并保存到n1,同时转到2态;

⑥1态下接收到运算符,则按照式(1)计算结果,并保存到n1,更新运算符到op,n2清零,状态不变;

⑦2态下接收到数字键,更新n1=n,同时转到0态;

⑧2态下接收到运算符,更新运算符到op,同时转到1态。

状态机模型建立后,在按键识别程序中,以激励信号作为判断条件,将状态图中的动作转化为具体执行代码如下:

图1 计算器控制流程图

voidkey(){ //按键识别程序

n=get_press();//扫描矩阵式按键,并获得按键信息(0~

//9,+,-,*,/,=)

if(state==0){

if(n>=0&&n<=9) //n是数字

n1*=10+n; //构造新数

图2 计算器的状态机

对比图1和图2,虽然采用流程图和状态机均能完成算法表达,但利用状态图描述算法能够使状态变换过程更清晰、表达方式更简洁,更有利于明确设计思路。在编写代码过程中,基于流程图的程序中需要加入嵌套式多分支结构,代码结构复杂,编写容易出错,增加了阅读和调试的难度。而在基于状态机模型的程序中,只以激励信号作为触发条件,在不同状态下执行不同的响应,代码结构清晰紧凑,阅读和调试容易。当然,利用状态机的设计思想,还可以进一步丰富该系统的功能,如加入“CE”键控制以及带优先级的四则混合运算的设计等。

结 语

针对流程图存在的不足,本文提出将有限状态机引入到嵌入式系统设计中,并从具体工程实例出发,详细介绍了状态机的建模流程,对比得出了状态机在表达算法上的优势。实践中,利用工程实例验证了状态机模型的正确性和可靠性。利用状态机方法能够有效降低系统的复杂性,提升软件的质量和可靠性,具有很强的工程价值和实际意义。

[1]冯爽.关于数据流程图画法原则的研究[J].河北科技大学学报,2012,33(4):343-346.

[2]许晓春,杜晓晨,梅琳,等.一种改进的程序流程图—层次流程图HFG[J].南京大学学报:自然科学版,2002,38(2):158-165.

[3]秦国栋.有限状态机的嵌入式Linux按键驱动设计[J].学习园地,2010(4):79-81.

[4]何剑宇,刘兢兢.有限状态机建模在嵌入式按键设计中的应用[J].沈阳师范大学学报:自然科学版,2012,30(2):168 171.

[5]吴芳琴.基于单片机的简易计算器设计[J].电子世界,2015(19):53-54.

[6]吴立勇,丁作文.基于Android系统的手机计算器的设计与实现[J].电子技术,2014(4):58-60.

王春武(副教授),研究方向为信号检测技术与自动化装置。

(责任编辑:薛士然 收修改稿日期:2016-03-21)

Application of Finite State Machine in Embedded System

Wang Chunwu,Cheng Libang,Liu Chunling,Wang Lizhong
(College of Information and Technology,Jilin Normal University,Siping 136000,China)

In order to make the software of the embedded system easy to write and improve the maintainability of the software,the finite state machine is introduced into the design of embedded system.Based on the engineering example,the program flow chart is used to describe the algorithm,then the basic steps of the state machine model and the use of the method are proposed.Finally,the advantage of the state machine in the description of the algorithm is summarized.

FSM;embedded system;flow chart

TP368.1

A

猜你喜欢

运算符状态机流程图
老祖传授基本运算符
基于有限状态机的交会对接飞行任务规划方法
用手机插头的思路学习布尔运算符
三段式状态机在单片机中的实现
专利申请审批流程图
专利申请审批流程图
C语言中自增(自减)运算符的应用与分析
宁海县村级权力清单36条
《天津医药》稿件处理流程图
基于反熔丝FPGA的有限状态机加固设计