QP状态机的优势以及QM的使用

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

本文介绍了如何使用QM绘制状态机图,以及现代分层状态机(HSMs)的优势和通过状态机生成代码的方法。QM是一个免费的基于模型的设计和自动代码生成工具,适用于嵌入式软件开发。与传统的有限状态机相比,分层状态机具有状态嵌套的优势,可以实现状态共享和复用。文章还介绍了QM中的状态机基类和不同的状态机实现策略。建议使用QMsm/QMActive风格的状态机,但需要商业许可证才能生成代码。

🔎

延伸解读

分层状态机的核心优势

文章指出,分层状态机(HSMs)相比经典有限状态机(FSM)的最大优势在于状态嵌套。通过允许子状态仅定义与超状态不同的行为,HSMs 促进了状态共享和事件复用,避免了 FSM 中常见的重复状态和繁琐转换。这种结构让状态图更简洁,尤其适合事件驱动的嵌入式系统。

两种状态机实现策略的取舍

QM 支持 QHsm/QActive 和 QMsm/QMActive 两种风格。前者代码可读性高,适合手动编码,但需在运行时注意退出/进入/初始动作的顺序;后者由 QM 在代码生成时生成完整过渡序列,效率更高,实验显示速度约两倍,且 dispatch() 堆栈空间少约 70%,但需要商业许可证才能生成代码。

使用 QM 的实践要点

在 QM 中,状态机必须与 QHsm 的直接或间接子类关联。选择实现策略时,除了在类属性表中更改超类属性,还需在构造函数中调用正确的超类构造函数,例如 QActive_ctor() 或 QMActive_ctor()。状态机工具箱仅在状态图处于活动 MDI 窗口且模型解锁时启用,用于添加状态、转换等形状。

❓

Q&A

QM软件是什么?它主要用于什么领域?

QM是一个免费的基于模型的设计(MBD)和自动代码生成工具,用于基于分层状态机(UML状态图)和事件驱动的实时嵌入式软件以及实时嵌入式框架(RTEF)。它专门为简化分层状态机(HSMs)绘制以及高效生成具有生产质量的代码而设计。

分层状态机(HSMs)相比传统有限状态机(FSM)有什么优势?

分层状态机(HSMs)相比经典有限状态机(FSM)最重要的优势是分层状态嵌套,这避免了重复,而重复在传统FSM中不可避免,也是FSM中状态转换繁琐的主要原因。状态嵌套允许子状态仅定义与超状态的差异,从而促进状态共享和状态与事件的复用。

在QM中,状态机基类QHsm提供了哪些基本接口?

QHsm基类提供基本接口init()和dispatch(),分别用于初始化状态机和向其分配事件。

QHsm/QActive风格和QMsm/QMActive风格的状态机有什么区别?

QHsm/QActive风格最初为手动编码设计,代码可读性和可维护性高,但需要在运行时注意退出/进入/初始动作的序列。QMsm/QMActive风格更有效,速度约是QHsm风格的两倍,对dispatch()操作使用的堆栈空间少约70%,但需要QM工具作为高级状态机编译器协助生成完整的过渡序列,生成的代码不适合手动编码或维护。

使用QMsm/QMActive风格的状态机有什么限制?

QMsm/QMActive样式的实现策略需要商业许可证证书才能生成代码。

在QM中如何向类添加状态机?

在Model Explorer中右键单击要向其添加状态机的类,然后从弹出菜单中选择Add State Machine。

🏷️

标签

➡️

继续阅读