通信软件设计-第5章 状态机实例-2011
- 格式:ppt
- 大小:864.00 KB
- 文档页数:80
状态机编程例程
状态机编程是一种用于描述系统行为的方法,它基于一组状态和状态之间的转换规则来实现。
在状态机中,系统的行为由当前状态和输入决定,并且根据定义好的转换规则来进行状态的转移。
在状态机编程中,首先需要定义系统的状态和输入。
状态可以是系统的某种运行状态或者某种条件的判断结果,而输入则是触发状态转移的外部事件或条件。
系统的状态和输入可以根据实际需求进行定义,以满足具体的业务逻辑。
接下来,需要定义状态之间的转换规则。
转换规则描述了在某个状态下,系统接收到某个输入后应该转移到哪个状态。
转换规则可以使用条件语句或者表格来表示,以便清晰地描述状态之间的关系。
在实际编程中,可以使用代码来实现状态机。
首先,需要定义系统的状态和输入,并使用变量来保存当前状态。
然后,根据定义好的转换规则,编写代码来处理输入,并根据当前状态和输入来更新系统的状态。
最后,根据系统的状态来执行相应的操作或输出结果。
状态机编程可以应用于各种场景,例如游戏开发、网络通信、控制系统等。
通过使用状态机编程,可以简化系统的设计和实现,提高代码的可读性和可维护性。
同时,状态机编程也能够更好地反映系统的行为逻辑,使程序的执行流程更加清晰和可预测。
状态机编程是一种用于描述系统行为的方法,它通过定义系统的状
态和输入以及状态之间的转换规则来实现。
在实际编程中,可以使用代码来实现状态机,并根据系统的状态来执行相应的操作。
通过使用状态机编程,可以简化系统的设计和实现,提高代码的可读性和可维护性,同时也能够更好地反映系统的行为逻辑。
用状态机原理进行软件设计池元武展讯通信(上海)有限公司,PLD,上海摘要:本文描述状态机基础理论,以及运用状态机原理进行软件设计和实现的方法。
关键词:有限状态机层次状态机面向对象分析行为继承参考文献[1] Miro Samek, Ph.D《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》[2] OpenFans/viewArticle.html?id=289缩略语名称描述StateMachineFSM FiniteHSM Hierarchical State MachineOOP Object Oriented ProgrammingUML Unified Modeling LanguageLSP Liskov Substitution PrinciplePoC push to talk over cellular目录第1章引言................................................................................................................................................1-1第2章 FSM概念......................................................................................................................................2-12.1 FSM定义.........................................................................................................................................2-12.2 FSM要素.........................................................................................................................................2-12.2.1 State(状态)......................................................................................................................2-12.2.2 Guard(条件)......................................................................................................................2-12.2.3 Event(事件)......................................................................................................................2-12.2.4 Action(动作)....................................................................................................................2-12.2.5 Transition(迁移).......................................................................................................2-22.3 FSM图示.........................................................................................................................................2-2 第3章 FSM设计方法..............................................................................................................................3-13.1 C Parser(注释分析程序)..................................................................................................................3-13.2 Calc(计算器)程序举例.....................................................................................................................3-2 第4章 HSM概念......................................................................................................................................4-14.1 programming-by-difference(按照差异编程)..............................................................................4-14.2 HSM图示.........................................................................................................................................4-14.3 HSM分析和OOP分析...................................................................................................................4-24.3.1 state inheritance and class inheritance(状态层次和类层次)..........4-24.3.2 Entry/Exit Actions and Construction/Destruction(进入/退出状态和构造/析构类).............................................................................................................................................4-34.3.3 programming-by-difference(按照差异编程)....................................................................4-34.3.4 abstraction(抽象)........................................................................................................4-4 第5章 HSM设计方法..............................................................................................................................5-15.1继续进行Calc设计......................................................................................................................5-15.2继承关系是否合理.........................................................................................................................5-35.2.1 Transition迁移执行顺序..............................................................................................5-4 第6章 HSM在实际工程的应用..............................................................................................................6-66.1 PoC Audio Player..............................................................................................................................6-66.2 PoC Call Control...............................................................................................................................6-7 第7章 FSM实现......................................................................................................................................7-17.1 nestted switch statement(嵌套switch)........................................................................................7-17.2 state table(状态表)................................................................................................................7-2-i-7.3 Function Address As State(用函数指针作为状态).....................................................7-37.4 QFSM frame(QFSM框架)..........................................................................................................7-5 第8章 HSM实现......................................................................................................................................8-1第9章附录 (1)-ii-图目录图2-1 Keyboard FSM in UML format 1...............................................................................................2-2 图2-2 Keyboard FSM in UML format 2...............................................................................................2-3 图3-1 C comment parser (CParser) FSM..............................................................................................3-2 图3-2 Basic Calc Example....................................................................................................................3-3 图3-3 Basic Calc FSM..........................................................................................................................3-4 图3-4 Basic Calc FSM add “Result” state............................................................................................3-5 图3-5 Basic Calc FSM add “Result” state and Cancel event................................................................3-6 图3-6 Simple Calc HSM.......................................................................................................................3-7 图 4-2 HSM conception.........................................................................................................................4-2 图5-1 substate of operandX..................................................................................................................5-1 图5-2 Full Calc HSM............................................................................................................................5-3 图5-3 State Tree of Calc.......................................................................................................................5-5 图 6-1 HSM of audio Player..................................................................................................................6-7 图6-2 HSM of Call Control..................................................................................................................6-8-i-第1章引言20多年以前,David Harel创造了状态机理论来描述复杂的交互系统。
状态机电路设计状态机(STATE MACHINE)可以说是一个广义时序电路,触发器,计数器,移位寄存器都算是它的特殊功能的一种.在电子设计自动化应用当中,状态机经常是担任CPU的功能,从某种意义上讲状态机的应用让系统具有了智能化的功能,业界为状态机和CPU的功能一直争论不休,不过事实是更多人倾向于状态机,认为状态机的功能比CPU 强大.下面将带领大家认识一下状态机的基本设计思想.传统的逻辑电路设计在描述状态机的表示上,以状态图(STATE DIAGRAM)方式最为清晰且容易理解.根据输入,输出及状态关系,状态图可以分为:1.输入&状态&输出(输出仅与状态有关)以下面图形为例,若目前状态机处于状态S0时,输入为0则状态机将维持状态S0不变,若输入改为1则下个状态改成状态S1,但不论输入是什么,此时输出均为0.这种输出与状态有关,而与输入无关的状态机类型,称为More状态机.编程实现其功能如下:--***********************状态机*********************重点提示整个状态机的电路描述分成两个PROCESS命令语句完成.第一个PROCESS:负责感测时钟脉冲信号CP在上升沿变化之际,作目前状态(PresentState)切换至下个状态(NextState)的动作.第二个PROCESS:负责感测输入(DIN)值,目前状态(PresentState)值,由CASE-WHEN语句决定输出(OP)和下个状态(NextState)值.--*********************************************************LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;--*********************************************************ENTITY CH6_5_1 ISPORT(CP :IN STD_LOGIC; --CLOCKDIN:IN STD_LOGIC; --I/P SignalOP :OUT STD_LOGIC --O/P Signal);END CH6_5_1;--*********************************************************ARCHITECTURE A OF CH6_5_1 ISTYPE STATE IS (S0,S1,S2,S3); --State Type DeclareSIGNAL PRESENTSTATE :STATE; --Present StateSIGNAL NEXTSTATE :STATE; --Next StateBEGINSWITCHTONEXTSTATE:PROCESS(CP)BEGINIF CP'EVENT AND CP='1' THENPRESENTSTATE<=NEXTSTATE;END IF;END PROCESS SWITCHTONEXTSTATE;CHANGESTATEMODE:PROCESS(DIN,PRESENTSTATE)BEGINCASE PRESENTSTATE ISWHEN S0=> --STATE S0IF DIN='0' THEN --INPUT=0NEXTSTATE<=S0;ELSENEXTSTATE<=S1;END IF;OP<='0'; --OUTPUTWHEN S1=> --STATE S1IF DIN='1' THEN --INPUT=1NEXTSTATE<=S1;ELSENEXTSTATE<=S2;END IF;OP<='0'; --OUTPUTWHEN S2=> --STATE S2IF DIN='1' THEN --INPUT=1NEXTSTATE<=S2;ELSENEXTSTATE<=S3;END IF;OP<='0'; --OUTPUTWHEN S3=> --STATE S3IF DIN='1' THEN --INPUT=1NEXTSTATE<=S0;ELSENEXTSTATE<=S1;END IF;OP<='0'; --OUTPUTWHEN OTHERS=> --Initial StateNEXTSTATE<=S0;OP<='0'; --OUTPUTEND CASE;END PROCESS CHANGESTATEMODE;END A;--*********************************************************程序说明:(1)上述的状态编码方式,使用默认的Binary编码.(2)在第二个PROCESS内的CASE-WHEN语句里,最后一个WHEN OTHERS 作用在电路起始状态,亦即--将状态初始设定为S0.2.输入&状态&输出(输出与状态,输入背景有关)下面图形的动作和上图相似,但是输出是会随输入不同而有所改变,例如目前状态是S3,若输入是0则输出为0且下个状态更换成S1,而输入为1则输出为1且下个状态更换成S0.这种输出与状态及输入皆有关系者,称为Mealy状态机.程序实现功能如下:--***************************************************************************** LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;--***************************************************************************** ENTITY CH6_5_2 IS--CLOCKSTD_LOGIC;:INPORT(CPDIN:INSignal--I/PSTD_LOGIC;:OUTSTD_LOGICOP);END CH6_5_2;--***************************************************************************** ARCHITECTURE A OF CH6_5_2 ISTYPE STATE IS (S0,S1,S2,S3); --State Type Declare--PRESENT:STATE;STATEPRESENTSTATESIGNAL--NEXTSTATE:STATE;NEXTSTATESIGNALBEGINSWITCHTONEXTSTATE:PROCESS(CP) --PRESENTSTATE->NEXTSTATEBEGINIFCP='1'THENCP'EVENTANDPRESENTSTATE<=NEXTSTATE;ENDIF;END PROCESS SWITCHTONEXTSTATE;CHANGESTATEMODE:PROCESS(DIN,PRESENTSTATE)BEGINCASE PRESENTSTATE ISWHEN S0=> --STATE S0--INPUT=0THENIFDIN='0'NEXTSTATE<=S0;OP<='0'; --OUTPUTELSENEXTSTATE<=S1;OP<='1'; --OUTPUTEND IF;WHEN S1=> --STATE S1THEN--INPUT=1IFDIN='1'NEXTSTATE<=S1;OP<='1'; --OUTPUTELSENEXTSTATE<=S2;OP<='0'; --OUTPUTEND IF;WHEN S2=> --STATE S2--INPUT=1THENIFDIN='1'NEXTSTATE<=S2;OP<='0'; --OUTPUTELSENEXTSTATE<=S3;OP<='1'; --OUTPUTEND IF;WHEN S3=> --STATE S3--INPUT=1THENDIN='1'IFNEXTSTATE<=S0;OP<='1'; --OUTPUTELSENEXTSTATE<=S1;OP<='0'; --OUTPUTEND IF;StateWHENOTHERS=> --InitialNEXTSTATE<=S0;OP<='0'; --OUTPUTCASE;ENDEND PROCESS CHANGESTATEMODE;END A;程序说明:程序写法是与CH6_5_!相似,不过在处理输出OP部分,需按照输入的信号情况,作判断输出,这部分可程序的注释部分看出.。