当前位置:首页 > 公众号精选 > 技术让梦想更伟大
[导读]关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥前言关于软件开发中的大事,已经有很多墨水了。其中之一是从高级模型(例如,从状态机)的自动代码生成,在此前的文章中说到了QM是一个自动生成代码的工具,这样的代码就好用吗?你是否用过或者写过这样的代码自动生成脚本,如果代...



来源:技术让梦想更伟大


作者:李肖遥


前言

关于软件开发中的大事,已经有很多墨水了。其中之一是从高级模型(例如,从状态机)的自动代码生成,在此前的文章中说到了QM是一个自动生成代码的工具,这样的代码就好用吗?


你是否用过或者写过这样的代码自动生成脚本,如果代码可以生成,生成的代码又不好用只能参考,是不是有点鸡肋呢?


本想说到这个问题,但是在此之前,我们又有必要先了解一下QM这个软件,它是怎么自动生成代码的,原理是什么,好不好用。


QM是什么?

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


有什么作用?

QM 基于模型的设计工具的主要目标是:


  • 将软件分解为称为活动对象的事件驱动组件


  • 以图形方式设计与这些活动对象关联的分层状态机


  • 自动生成具有生产质量且可从您的设计中完全追溯的代码


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


QM看起来如何?

QM是一个跨平台的桌面应用程序,以下显示了QM中执行的典型活动:


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

QM有什么特别之处?

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


简单

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


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


内置 QP 框架

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


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


捕捉物理设计

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


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


不再是“与工具作斗争”

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


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


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


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


后记

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


‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

本文将讨论常见的调试问题以及预防和检查这些故障问题的一些方法。从历史角度上来看,嵌入式应用代码的调试流程可以分为两类。第一类调试流程是回答 “我的代码现在执

关键字: 嵌入式系统 调试 系统软件 实时嵌入式

摘要:为满足对安全关键领域日益增长的可靠性需求,提出一种基于松耦合多处理器体系结构的双机容错实时嵌入式系统设计方案。该方案无缝整合了计算机硬件级、操作系统级、应

关键字: 嵌入式系统 系统设计 双机 实时嵌入式

摘要:介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现了μC/OS-II在摩托罗拉处理器MPC555上的移植,介绍了移植后OS的应用方法。 关键词:μC/OS-I...

关键字: 移植 实时嵌入式 嵌入式操作系统 μC/OS-II

嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。人们要求实时嵌入式产品能够提供更为强劲的计算能力,以满足无

关键字: 实时系统 混合任务 动态电压调节 实时嵌入式

摘要:介绍PB0技术及其特点,这种技术支持软件重用和动态可重配置;分析其应用于航空航天器等实时装入式软件开发过程中的优势与困难。关键词:软件重用 动态可重配置 实时装

关键字: 嵌入式软件 软件开发 实时嵌入式 实时系统

21ic讯 为满足日益挑剔的最终用户的需求,消费电子、工业级汽车信息娱乐市场迅猛发展,系统设计人员需要性能更高的处理器,此类处理器要运行丰富的用户界面,同时不影响实时

关键字: 显示器 飞思卡尔 实时嵌入式 I.MX
关闭
关闭