visualSTATE第八章.ppt
《visualSTATE第八章.ppt》由会员分享,可在线阅读,更多相关《visualSTATE第八章.ppt(56页珍藏版)》请在三一办公上搜索。
1、,第八章基于STM32的状态机建模,第八章目录,8.1简易ATM取款机8.2使用visualSTATE工具链设计、验证状态机8.3 visualSTATE系统在STM32上的模拟实现方案8.4 集成应用程序代码到STM32,概述,在前面的章节中,我们已经讲述了用visualSTATE工具链把一个模型翻译成能集成到目标应用中的代码的方法。本章我们将结合设计实例,具体讲述将visualSTATE生成的代码集成到没有移植嵌入式操作系统的STM32中的具体的应用方法。,8.1简易ATM取款机8.2使用visualSTATE工具链设计、验证状态机8.3 visualSTATE系统在STM32上的模拟实现
2、方案8.4 集成应用程序代码到STM32,第八章目录,8.1.1 软、硬件环境,(1)IAR visualSTATE 6.2(2)IAR Embeded Workbench for ARM 5.4集成开发环境(3)ARM微处理器EK-STM32F(4)PC机(5)超级终端(hypertrm)超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序。通过这些程序,我们可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。,8.1.2 案例分析,由于消费的需要,我们会经常使用取款机取款,对ATM取款机的功能也有所了解,它包括:账户查询、取款、转账、改密本章中的案
3、例为了方便介绍,只涉及了简易的取款功能,其他功能可以通过在服务主界面状态内增加新的功能状态得以实现。,8.1.1 软、硬件环境,案例:具有简易功能的ATM取款机的模拟实现设计任务说明设计一个具有简易功能的ATM取款机,可一次输入密码、取款(不可透支)以及余额查询。系统功能要求插卡后,ATM检查用户输入的密码正确与否。若输入密码正确,ATM转向服务界面,用户此时可以取款;否则,ATM返回欢迎界面;只有在取款金额不大于账户金额时,用户方可取款。用户输入取款金额,当没有选择确定时,用户可以按操作返回;一旦输入取款金额并且确定,则出钞门打开,此时用户不可进行返回操作。,8.1.3 状态机的建模分析,整
4、体构思由于本案例是模拟实现具有简易功能的ATM取款机,所以输入密码和输入取款金额等操作我们可以通过超级终端来模拟实现(超级终端通过串口线和STM32的串口USART2连接起来,与其进行通信);输入密码、取款金额等操作我们可以通过STM32上的各个开关来模拟实现;而ATM所处的各种状态,我们则可以通过STM32的灯和LCD显示器来模拟实现(STM32通过USB接口线和PC机连接起来)。所以本案例的实现需要两台PC机,一台(为方便叙述,称为PC1)用来通过超级终端和STM32来通信,另一台PC机(PC2)用来设计状态机并运行应用程序,其中一台PC机应该具有串口。,8.1.3 状态机的建模分析,我们
5、可以按照第5章所讲的设计状态机的六个步骤,来一步一步地设计状态机。此处,我们就不再详细讲述,只给出总的分析结果。在设计过程中,我们要考虑ATM系统正常运行时需要的并发状态数。系统由服务界面、插卡区、出钞口三个部分组成,故而我们需要3个并发状态:服务界面状态插卡区状态出钞口状态,8.1.3 状态机的建模分析,按流程设计状态机第一步:插卡。系统的初始状态为:服务界面处于欢迎状态,插卡区处于无卡状态,出钞口处于关闭状态。当接收到插卡的触发时,服务界面进入输入密码状态,插卡区处于有卡状态。第二步:检验。服务界面进入输入密码状态。当接收到KeyEnter的触发时,系统对输入密码进行判断,并对其做出响应。
6、若输入密码正确,则进入服务主界面;若输入密码错误,则回到欢迎状态,插卡区回到无卡状态。,8.1.3 状态机的建模分析,第三步:选择服务。在服务主界面,当接收到某服务的触发时,进入相应服务的界面,此处假设进入取款服务。本系统为方便设计,只设计了一种服务;其他服务可在服务主界面状态进行扩充。第四步:取款。在取款界面,当接收到取款金额的触发时,判断是否透支。若不可进行交易,则回到取款界面;若可进行交易,则进入取款状态,出钞口进入打开状态。若用户将钱取走,则关闭出钞口,扣除取款金额,并回到服务主界面。第五步:退卡。当接收到退出的触发时,系统将卡弹出,服务界面回到欢迎状态,插卡区变成无卡状态。需要注意的
7、是:在输入密码与取款状态时,退出触发需无效。,8.1.3 状态机的建模分析,优化设计为了简化密码输入正误与透支判断的设计,我们可以增加一个有效性状态。正常状态时,有效性状态始终处于无效。当有判断的触发时,若判断为真,则变成有效状态,并产生一个有效信号;有效信号一触发,有效性状态立即回到无效状态。经过前面几个的设计,我们最终得到状态机系统:上图所示的ATM取款机状态机中,前三个域rATMOperationStatus域、rCardStatus域、rCashDoorStatus域所对应的分别为ATM服务界面的状态图、ATM插卡区的状态图、ATM出钞口的状态图;而第四个域rCheckStatus域中
8、的状态机正是我们在优化设计之后所对应的状态机。,8.1简易ATM取款机8.2使用visualSTATE工具链设计、验证状态机8.3 visualSTATE系统在STM32上的模拟实现方案8.4 集成应用程序代码到STM32,第八章目录,8.2.1 visualSTATE Designer设计状态图,在上面的分析中,我们将状态机分为四个并行域来设计,每个域最后设计所得的结果如下:ATM服务界面的状态图:其所包含的状态有:Welcominterface状态(处于欢迎界面状态);CheckUser状态(处于检查用户密码正确与否的状态);Service状态(处于服务状态);而Service状态又包含:
9、Main状态(处于服务主界面状态)GetCash状态(取款状态);GetCash状态作为一个超状态,它包括:Editing状态(检查取款金额的有效性状态)和Cashing状态(正在取款状态)。,8.2.1 visualSTATE Designer设计状态图,b其包含的事件有:evKeyEnter()(“确认”操作);evKeyExit()(“退出”操作);evGetCash()(“取款”操作);evKeyBack()(“返回”操作);c其所包含的动作有:VS_VOID WelcomeInterface()(显示主界面信息);VS_BOOL CheckPassword()(检查用户密码的正确性,
10、此处函数定义为布尔类型,所以在后面对应地定义了一个内部变量作为该函数的返回值,如果密码正确,则取值为1,否则为0);,8.2.1 visualSTATE Designer设计状态图,VS_VOID InputPasswordInterface()(输入密码界面);VS_VOID MainServiceInterface()(服务主界面);VS_VOID GetCashRequire()(选择取款金额界面);VS_BOOL CheckAccount()(检查用户取款金额的有效性);VS_VOID CashDoorOpen()(出钞口开);当密码输入正确时,发出信号sChecked,用来触发状态转
11、向有效状态当输入取款信息有效时,发出信号sChecked,用来触发状态转向有效状态;当取款信息有效时,发出信号sOpenDoor,用来触发出钞门打开,取款;d内部变量(Internal variables)此处我们定义了一个布尔类型的内部变量,其初始值为0(VS_BOOL bValid=0),它用来检查用户密码和取款金额的有效性。,8.2.1 visualSTATE Designer设计状态图,ATM插卡区的状态图:a其所包含的状态有:NoCard状态(处于没插入卡状态);CardPresent状态(处于有卡状态);b其包含的事件有:evCardInserted()(“插入信用卡”操作);ev
12、KeyExit()(“退出”操作);c其所包含的动作有:VS_VOID GetAccount()(获取账户信息);VS_VOID EjectCard()(退卡);,8.2.1 visualSTATE Designer设计状态图,ATM出钞口的状态图:a其所包含的状态有:Closed状态(出钞口处于关状态);Open状态(出钞口处于开状态);b其包含的事件有:evCashTaken()(事件“取钱”发生);c其所包含的动作有:VS_VOID CashDoorClosed()(动作“出钞门关”);VS_VOID DeductAccount()(取款之后,减账户金额);,8.2.1 visualST
13、ATE Designer设计状态图,ATM检查状态的状态图,a其所包含的状态有:Invalid状态(处于无效状态,比如取款金额输入有误、密码输入有误等);Valid状态(处于有效状态);b其包含的事件有:evCardInserted()(“插入信用卡”操作)evKeyExit()(“退出”操作);c其所包含的动作有:当输入信息有效时(即内部变量bValid!=0),发出信号sPass;当输入信号无效时,发出信息sFail。信号的发生用来触发其他转换的发生,这也是其在同步中的应用的具体表现。,8.2.2 状态机验证、仿真,有关在visualSTATE中动态验证状态图,我们在前面已经做了较详细的说
14、明,本章只将通过验证的图示以及在前面的验证中没遇到的验证图示给出。visualSTATE Verification中验证状态机如图所示的是本设计通过了visualSTATE Verification中的所有验证。说明了本设计中不存在死循环、相互冲突的转换等。,8.2.2 状态机验证、仿真,visualSTATE Validator中模拟仿真状态机在Validator中结合Graphical Animation交互的模拟仿真状态机,是一种很直观的验证状态机的方法。在对本案例的设计中,我们为了检查密码和其它信息的有效性,定义了布尔类型的函数,并设置其返回值为布尔类型的内部变量。下面我们结合图示来说
15、明这种方式的模拟仿真的实现。当我们打开visualSTATE Validator后,我们选择“Debug-Auto Empty Signal Queues”,这种模式在有信号发生时会自动触发事件的发生,而不需要通过双击信号来仿真实现。下面我们按照和前面的章节所类似的操作来开始模拟仿真系统。,8.2.2 状态机验证、仿真,首先,我们双击事件“SE_RESET”,初始化系统。接着,我们双击事件“evCardInserted”,将信用卡插入取款机。双击事件“evKeyEnter”,在系统中输入密码,此时将会出现画面,如果我们在对话框的“Return value for CheckPassword()
16、”一栏中,写入“0”,说明密码输入有误,单击“OK”,那么此时系统回到欢迎状态,插卡区回到无卡状态。反过来,如果我们在对话框的“Return value for CheckPassword()”一栏中,写入“1”,说明密码输入正确,单击“OK”,则系统进入服务主界面,这样我们就可以在服务主界面中进行取款、查询余额等操作了。在此,我们就不一一演示了,读者可按照我们学过的方法进行验证。,8.2.3 visualSTATE Coder中生成代码,在visualSTATE Navigator中,右键单击系统,选择“Options-Coder generation”在出现的对话款中,选择“Generat
17、e for C-SPYLink”一项;然后单击对话框左边的“ATM_easy”,选择C-SPYLink标签来设置其选项,我们选择Enable full instrumentation、Enable sample buffer和Enable sample buffer live readout选项,单击“OK”。然后选择visualSTATE Navigator中的CODER GENERATION一项,生成代码,其产生的代码报告如图所示。,8.2.3 visualSTATE Coder中生成代码,值得注意的代码有:CSpyLink.cATM_easySEMTypes.hATM_easySEMBD
18、ef.hATM_easy.cATM_easy.hATM_easyAction.hATM_easyData.cATM_easySEMLibB.hATM_easySEMLibB.c,8.2.3 visualSTATE Coder中生成代码,我们应该特别注意ATM_easySEMLibB.c中的如下几个函数void ATM_easySEM_InitAll(void):功能:初始化visualSTATE系统的一个函数,我们必须在调用visualSTATE的其他函数之前调用它。ATM_easySEM_InitAll(void)函数还可以调用初始化信号队列、内部变量以及外部变量的函数。unsigned c
19、har ATM_easySEM_Deduct(SEM_EVENT_TYPE EventNo):功能:这个函数用来接收由给定事件、内部当前状态向量以及visualSTATE系统规则所决定的动作表达式。所有的动作表达式都是通过连续调用函数SEM_GetOutput或一次调用函数SEM_GetOutputAll来检测的。若再次调用ATM_easySEM_Deduct,则必须之前先调用函数SEM_NextState或SEM_NextStateChg,来使系统进入一个新的状态。,8.2.3 visualSTATE Coder中生成代码,下图说明了visualSTATE产生的代码文件和Basic API文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- visualSTATE 第八
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5452440.html