QP实时嵌入式框架之QM
内容提要
QM是一款基于模型设计和自动代码生成的软件工具,将软件分解为事件驱动组件模块,并以图形方式设计与这些组件相关联的分层状态机。QM具有简单、内置QP框架和捕捉物理设计等特点,能够生成高质量的代码并灵活控制源代码结构。设计目标是尊重设计决策、简化状态图绘制并引入新的表示法来表示内部转换。
延伸解读
QM的定位:轻量级、代码中心的建模工具
与市场上许多高级建模工具不同,QM刻意保持简单和低级别。它不引入平台无关模型、平台特定模型或复杂的模型转换,而是将设计直接映射到C或C++代码,状态机动作也直接用C/C++编写。这种以代码为中心的方式减少了抽象层,让开发者能更直接地控制生成代码,适合追求简洁和可追溯性的嵌入式项目。
内置QP框架与严格前向工程
QM内置了QP框架系列,而不是支持开放式框架和编程语言,这简化了代码生成规则。同时,QM是严格的前向工程工具,不应编辑生成的代码,也不支持往返工程。这意味着所有修改都应在模型中进行,从而保持模型与代码的一致性,避免手动改代码带来的同步问题。
物理设计作为模型的一部分
QM允许将代码的物理设计(如目录划分、头文件和实现文件)作为模型的一个组成部分。这种独特方法让开发者能灵活控制源代码结构,减少对生成代码的手动更改。并且QM提供了在模型和生成代码之间快速切换的机制,方便将变更直接应用于模型而非代码。
简化状态图绘制:避免伪状态与新表示法
QM在绘制分层状态图时避免使用UML中的伪状态(如初始伪状态或选择点),转而使用更高级别的初始转换和选择段原语,这简化了状态图,无需单独定位和连接伪状态。此外,QM为内部转换引入了新的表示法,允许实际绘制内部转换,并能将内部转换或常规状态转换附加到单个选择点,弥补了标准UML的缺陷。
Q&A
QM是什么?它支持哪些操作系统?
QM(QP Modeler)是一款免费、基于模型设计(MBD)和自动代码生成的软件工具,用于基于分层状态机(UML状态图)和事件驱动的QP实时嵌入式软件框架。它支持Windows、Linux和MacOS主机。
QM的主要设计目标是什么?
QM的主要设计目标是简单和最大限度地减少与工具斗争的需要。具体包括:将软件分解为事件驱动组件(活动对象),以图形方式设计分层状态机,自动生成高质量且可追溯的代码,尊重设计决策,简化状态图绘制,并引入新的表示法来表示内部转换。
QM如何将设计映射到代码?它支持哪些编程语言?
QM明确地将设计直接映射到C或C++代码,状态机执行的所有动作都直接用C或C++输入到模型中。它没有平台无关模型(PIM)、平台特定模型(PSM)、复杂的模型转换或动作语言。QM从根本上说是面向对象的工具,与目标编程语言无关,但生成代码时直接针对C或C++。
QM在状态图绘制方面有什么特别之处?
QM在状态图绘制方面具有创新性:它不使用“伪状态”(如初始伪状态或选择点),而是使用更高级别的初始转换和选择段原语,这极大地简化了状态图,无需单独定位伪状态再连接。此外,QM为内部转换引入了新的表示法,允许实际绘制内部转换(标准UML中内部转换只是状态体中的文本),并能将内部转换或常规状态转换附加到单个选择点,弥补了标准UML的缺陷。
QM如何控制生成的代码结构?
QM是市场上独特的基于模型的设计工具,可以将代码的物理设计作为模型的一个组成部分,即将代码划分为目录和文件(如头文件.h和实现文件.c或.cpp)。这种独特的方法可以灵活控制源代码结构,减少对生成的代码进行手动更改。此外,QM提供了在模型和生成的代码之间快速来回切换的机制,以便任何更改都可以方便地直接应用于模型而不是代码。
QM内置了哪些框架?这对代码生成有什么好处?
QM内置了QP框架系列(事件驱动的实时嵌入式框架),而不是支持开放式的框架和编程语言。QP框架提供了明确定义的“框架扩展点”,旨在将框架定制到应用程序中,从而为生成代码提供明确定义的规则。这大大简化了QM的使用,因为框架是内置的,无需额外配置。