QP由QuantumLeaps公司开发异于传统顺序式系统(前后台架构即main+ISR)和传统多任务系统(操作系统)的事件驱动型状态机框架,实现了在C语言下的面向对象编程,该框架支持有限状态机FSM和层次式状态机HSM。
QP大体的框架如下图
对于开发者使用该框架的开发步骤如下:
1.理解整个项目需求
2.顺序图,划分出具有行为的活动对象并且将系统的资源分配到各个活动对象中,降低对象间的耦合,整理出各个活动对象间的事件交换
3.信号和事件的枚举,各个活动对象间的事件交换和自身对象下的触发信号事件。信号是只有触发信号而事件是带有参数的信号触发例如串口接收不仅有串口接收这一触发事件并且还有与之一起的数据
4.各个活动对象下的具体状态机实现
5.初始化并启动应用程序 给事件列队分配内存,初始化活动对象分配优先级最后启动QP将系统控制权交给QP管理,QP则根据你的事件触发来执行各个活动对象下的状态机
6.调试
如下图所示
更多关于QP的资料请看点击http://www.state-machine.com/psicc2/index.html,里面有电子版本的PSiCC2-CN文档详细介绍了整个QP框架
接下来要说我们开发板上使用到是QpNano,她是由事件驱动型框架下的裁剪版本,顾名思义,是针对资源有限的单片机。如低端的8位和16位单片机8051,PIC,AVR,MSP,STM8等当然也适应于32位处理器。
她有以下优点:
1.完全支持层次式状态嵌套
2.支持8个并发活动对象
3.支持触发信号和一个可伸缩的参数即触发信号传递给对象时可加入其它的事件参数
4.具有抢占式和合作式的内核
5.带有空闲的回调函数低功耗接口,方面实现低功耗模式
6.整个框架只须1-10KB的ROM和几百字节的RAM空间
......
简单介绍完QP和QpNano后,下面才是我要重点推荐使用QP框架的原因。QP框架允许完全手工编程和使用自动生成代码工具QM。QM(QP™ Modeler)建模是基于QP框架和层次式状态机UML语言图形自动代码生成工具,可以在该软件下实现各个对象的状态机和事件交换,而状态机实现方式是使用UML图形,真正做到应用层使用图形编程,更合适我们的编程思维。
下面介绍如何在StateMachines板上运用QP官网上Blinky(闪灯)的例程之前简单介绍下StateMachines板的资源:
1.使用STM32F030C8T6Cortex-m0处理器
2.板载按键、12864液晶屏、字库、数码管、串口转USB,LED灯
Blink例程是一个LED闪灯程序,是学习QP、QM最基本的例程,以下是使用qm_3.3.0-win64下建立Blinky模型:
第一步在QM中新建工程
如下图所示在File菜单下点击New Modle新建一个QM工程,然后在弹出的页面F