芯片资讯
热点资讯
- FPGA排序-冒泡排序(Verilog版)介绍
- Infineon品牌SLE 4432 C芯片IC EEPROM 256BYTE CHIP的技术和方案应用介绍
- 深度解析索尼的多重曝光HDR技术
- FPGA浮点IP内核究竟有哪些优势呢?
- Microchip微芯半导体AT97SC3205T-X3A1C20B芯片FF COM I2C TPM 4.4MM TSS
- 聊一聊MEMS先生的微机电系统
- Melexis品牌MLX81113KDC-BAB-000-RE芯片IC LIN RGB CTRLR 32KB 4CH 8
- pH传感器的工作原理及应用
- Atmel品牌AT17LV65-10JI芯片CONFIG MEMORY, 64KX1, SERIAL的技术和方案应用介绍
- 大疆的低成本高阶智能驾驶方案详解
- 发布日期:2024-01-04 07:34 点击次数:159 定制状态机
目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求来进行定制,为状态机加入与软件系统本身相关的那些处理逻辑。在FSME中,与具体应用相关的操作称为输出(Output),它们实际上就是一些需要用户给出具体实现的虚函数,自动生成的状态机引擎负责在进入或者退出某个状态时调用它们。
仍然以控制城门的那个状态机为例,假设我们希望在进入每个状态时都添加一部分处理逻辑。首在FSME界面左边的树形列表选择"Outputs"项,然后按下键盘上的Insert键来添加一个新的输出, EEPROM带电可擦可编程存储器芯片大全接着在右下方的"Name"文本框中输入相应的名称, ATMEGA系列ATMEL芯片COM再单击"Apply"按钮, 电子元器件PDF资料大全一个新的输出就创建好了, CMOS图像传感器集成电路芯片如图所示。用同样的办法可以添加状态机所需要的所有输出。
添加输出
当所有的输出都定义好之后,芯片交易网IC交易网EEPROM带电可擦可编程存储器芯片大全接下来就可以为状态机中的每个状态绑定相应的输出。首先在FSME界面左侧的"States"项中选择相应的状态,然后从右下角的"Available"列表框中选择与该状态对应的输出,再单击"
图为状态设置输出
由于对状态机模型进行了修改,我们需要再次生成状态机的框架代码,不过这次不需要加上-d参数:
[xiaowp@linuxgam code]$ fsmc door.fsm -o DoorFSM.h[xiaowp@linuxgam code]$ fsmc door.fsm -d -impl DoorFSM.h -o DoorFSM.cpp
我们在新的状态机模型中添加了enterOpend、enterClosed、enterLocked和enterUnlocked四个输出,因此生成的类DoorFSM中会包含如下几个纯虚函数:
virtual void enterOpened() = 0;virtual void enterLocked() = 0;virtual void enterUnlocked() = 0;virtual void enterClosed() = 0;
显然,此时生成的状态机框架不能够再被直接编译了,我们必须从类DoorFSM派生出一个子类,并提供对这几个纯虚函数的具体实现:
/* * DoorFSMLogic.h * 状态机控制逻辑的头文件 */#include "DoorFSM.h"class DoorFSMLogic : public DoorFSM{ protected: virtual void enterOpened(); virtual void enterLocked(); virtual void enterUnlocked(); virtual void enterClosed();};
正如前面所提到过的,这几个函数实际上代表的正是应用系统的处理逻辑,作为例子我们只是简单地输出一些提示信息:
/* * DoorFSMLogic.cpp * 状态机控制逻辑的实现文件 */#include "DoorFSMLogic.h"#include void DoorFSMLogic::enterOpened(){ std::cout }void DoorFSMLogic::enterClosed(){ std::cout }void DoorFSMLogic::enterLocked(){ std::cout }void DoorFSMLogic::enterUnlocked(){ std::cout }
同样,为了对生成的状态机进行验证,我们还需要手工编写一段测试代码:
/* * TestFSM.cpp * 测试状态机逻辑 */#include "DoorFSMLogic.h"int main(){ DoorFSMLogic door; door.A(DoorFSM::Close); door.A(DoorFSM::Lock); door.A(DoorFSM::Unlock); door.A(DoorFSM::Open);}
使用下面的命令能够将生成的状态机框架和测试代码编译成一个可执行文件:
[xiaowp@linuxgam code]$ g++ DoorFSM.cpp DoorFSMLogic.cpp TestLogic.cpp -o logic
运行结果如下所示:
[xiaowp@linuxgam code]$ ./logicEnter Closed state.Enter Locked state.Enter Unlocked state.Enter Opened state.
- 在哪些应用中可以使用EEPROM2024-02-27
- 如何对EEPROM进行编程和擦除操作?2024-02-23
- EEPROM的价格如何?2024-02-21
- EEPROM的可靠性如何?2024-02-14
- EEPROM的功耗如何?2024-02-11
- EEPROM的耐久性如何?2024-02-09