良许Linux教程网 干货合集 QP实时嵌入式框架之QM

QP实时嵌入式框架之QM

引言

关于软件开发中的重要事项,已经有很多文献探讨过了。其中之一就是从高级模型(例如状态机)中进行自动代码生成。在之前的文章中,我们提到了QM是一个用于自动生成代码的工具,但这样生成的代码真的好用吗?

你是否曾经使用过或者编写过这种代码生成脚本?如果生成的代码并不好用,只能作为参考,那么这样的自动生成代码又有些鸡肋了吧?

本文本想讨论这个问题,但在此之前,我们有必要先了解一下QM这个软件是如何进行代码自动生成的,它的原理是什么,以及它的实用性如何。

QM是什么?

QM(QP Modeler)是一款免费软件,它是一款基于模型设计(MBD)和自动代码生成的工具。它用于基于分层状态机(UML状态图)和事件驱动的QP实时嵌入式软件框架(RTEF),同时QM可在Windows、Linux和MacOS主机上使用。

它有什么作用?

QM作为一个基于模型的设计工具,主要有以下目标:

  • 将软件分解为由事件驱动组件(称为活动对象)组成的模块。
  • 以图形方式设计与这些活动对象相关联的分层状态机。
  • 自动生成高质量的代码,其设计完全可以追溯到你的模型。

QM从根本上说是一个面向对象的工具,与目标编程语言无关。面向对象意味着QM模型由类组成,并且只有类才能拥有与其相关联的状态机。

QM的外观如何?

QM是一个跨平台的桌面应用程序,下面展示了QM中进行的典型活动的截图:

  • 在 QM 中使用分层状态机
image-20240120204233069
image-20240120204233069
  • 在 QM 中生成代码
image-20240120204316511
image-20240120204316511
  • 设计一个子机器来捕获 QM 中的常见行为
image-20240120204320546
image-20240120204320546
  • 自定义 QM 用户界面(深色主题)

QM有什么特别之处?

QM的主要设计目标是简单和最大限度地减少与工具斗争的需要,下面描述的几种方式实现了这一点。

简单

与当今市场上的大多数其他高级建模工具相比,QM更简单、以代码为中心且级别相对较低(不是贬义的)。

这意味着QM明确地将设计直接映射到C或C++代码,状态机执行的所有动作都直接用 C 或 C++ 输入到模型中;没有“平台无关模型”(PIM)、“平台特定模型”(PSM)、复杂的“模型转换”或“动作语言”。

内置 QP 框架

与大多数其他能够生成代码的工具一样,QM创建的模型基于事件驱动的实时嵌入式框架,这样的框架提供了明确定义的“框架扩展点”,旨在将框架定制到应用程序中,从而为生成代码提供明确定义的规则。

image-20240120204416517
image-20240120204416517

然而,QM的大部分简单性在于:它带有内置的 QP 框架系列,而不是支持开放式的框架和编程语言,另一个简化方面是 QM 是一种严格的前向工程工具(不应编辑生成的代码),不尝试支持往返工程。

捕捉物理设计

QM是市场上独特的基于模型的设计工具,可以将代码的物理设计作为模型的一个组成部分,即将代码划分为目录和文件,例如头文件 (.h) 和实现文件(.c 或 .cpp 文件)。

image-20240120204419885
image-20240120204419885

这种独特的方法可以使我们灵活控制源代码结构,减少了对生成的代码进行手动更改,此外,QM提供了在模型和生成的代码之间快速来回切换的机制,以便任何更改都可以方便地直接应用于模型而不是代码。

不再是“与工具作斗争”

QM的主要设计目标是尽可能地尊重设计决策,不仅在生成代码的物理设计方面,而且在安排状态和路由转换的确切细节方面。

比如当我们花了很多时间安排状态和路由转换之后,如果突然改变图表排列的工具或者有新的变更需求,那么肯定会有很多麻烦的事情。

在QM中绘制分层状态图需要考虑很多,且具有创新性,例如,QM 不使用“伪状态”,比如初始伪状态或选择点;相反,QM 分别使用更高级别的初始转换和选择段原语;这极大地简化了状态图,我们不需要单独定位伪状态然后连接它们。

image-20240120204425656
image-20240120204425656
image-20240120204423260
image-20240120204423260

此外,QM 为内部转换引入了新的表示法,它允许实际绘制内部转换(在标准 UML 表示法中,内部转换只是状态体中的文本)。这种表示法能够将内部转换或者常规状态转换附加到单个选择点,弥补了标准UML的缺陷。

后记

自动生成代码工具很多,大家可以自行了解,当然QP中QM的使用也就很关键了,本文先介绍一下其表,在下一篇中将回到深层次一点的问题,欢迎持续关注。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部