状态机 | 如何从零开始构建一个QM项目

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

QM建模工具是一种强大的工具,提供了交互式GUI模式和命令行模式两种操作方式。可以在Windows、Linux和MacOS上运行。可以从零开始构建一个QM项目,并在桌面上运行并将结果打印到屏幕上。可以添加包、类、时间事件、状态机等模型项。可以生成代码,添加目录和文件。可以编辑文件和编译工程。

🔎

延伸解读

QM 的跨平台与双模式操作

QM 建模工具支持 Windows、Linux 和 MacOS,并提供交互式 GUI 和命令行两种模式。这意味着开发者可以根据习惯选择操作方式,例如在 Windows 上通过双击快捷方式或拖放模型文件启动 GUI,或在命令行下生成可执行文件。跨平台特性使得同一模型可以在不同系统上构建和运行,降低了环境迁移成本。

从零构建项目的关键步骤

文章演示了从新建模型开始,依次添加包、类、时间事件和状态机的完整流程。包用于组织模型项,类承载状态机行为,时间事件周期性触发状态转换。通过绘制状态图并定义状态与转换,最终生成代码。这一步骤化方法适合初学者理解 QM 的项目结构,但需注意每一步都依赖前一步的正确配置。

代码生成的反转控制与混合编程

QM 将代码生成“颠倒”过来,允许开发者自定义生成代码的结构、目录名、文件名及包含元素,并能将手写代码与生成代码混合。这提供了灵活性,但也要求开发者清楚代码生成指令(如 $declare、$define)的作用。文章示例中,用户需手动添加 BSP 函数和 main 函数,说明生成代码并非完全自动,仍需补充平台相关实现。

桌面运行与编译的注意事项

文章以“闪烁”应用为例,通过 printf 输出 LED 状态,并展示了在 Windows 命令提示符下生成 blinky.exe 的方法。这表明 QM 项目可以针对桌面操作系统编译运行,但需要自行实现板级支持包(BSP)函数,如 BSP_ledOn、BSP_ledOff 和时钟节拍处理。若移植到其他平台,这些底层函数需相应调整,否则无法正常编译或运行。

❓

Q&A

QM建模工具支持哪些操作系统和操作模式?

QM建模工具支持Windows、Linux和MacOS操作系统,并提供交互式GUI模式和命令行模式两种操作方式。

如何在Windows上启动QM建模工具?

在Windows上,可以双击桌面上的快捷方式启动QM,也可以将QM模型文件拖放到QM快捷方式上来启动。

从零开始创建QM项目时,需要选择哪些初始配置?

新建Model时,选择默认的qpc框架类型,选择自定义路径,模型模板选择None,以便从头开始构建模型。

在QM中,包和类的作用分别是什么?

包用于将其他模型项组合到更高级别的单元中,最常见的用途是将类分组在一起;类用于实现行为,是状态机的基础。

QM如何生成代码?可以自定义哪些方面?

QM将代码生成“颠倒”,用户可以确定生成的代码结构、目录名、文件名以及每个文件中包含的元素,也可以将自己的代码与生成的代码混合,并控制生成代码的多少。

在QM中如何添加时间事件并配置其触发状态机?

在Model Explorer中右键单击类(如Blinky:QActive),选择Add Attribute添加时间事件属性,然后在状态机中通过转换动作调用QTimeEvt_armX来周期性触发。

🏷️

标签

➡️

继续阅读