QP是什么,为什么在国内不为我们所熟悉?
关注、星标公众号,直达精彩内容
来源:技术让梦想更伟大
作者:李肖遥
为了创建一个可用的软件,你不得不和每个修改,每个特征,每个微小的调节做斗争,直到别人满意为止。没有捷径可走。有运气的成分,但你的成功不是幸运,而是由于你的尽力争取。
-- Dave Winer
不知道标题是否合适,或者说符合现实情况,但是从最近的反应情况来看,我们对qp的了解确实是较少,在工作上应用方面就更少了。
国外已经应用的很多了,霍尼韦尔等很多大厂都应用了,国内大牛anymcu
翻译有中文版,源码核心代码不多。不过我看到他的网站有勘误表已经不能访问了,不知道邮箱有没有机会被翻牌,如果实在有搞不懂的可以试试。
那为什么我国读者并不熟悉呢?我们来了解一下QP框架或者说是量子程序设计到底是什么,有什么作用和特别之处,写的不好勿喷,多多交流。
它是什么?
QP框架诞生于硅谷,是个量子力学博士创立的,非常好的实现了层次式状态机,得到了近二十年来嵌入式领域最大突破的称号。
QP是一种轻量级的实时嵌入式框架 Real-Time Embedded Framework (RTEF)
,提供架构复用和并发编程,可以完成更高概念性完整性的安全代码,并显着提高软件质量,说白了就是用好了就很好用。
而且QP通过分层状态机(UML状态图)指定了活动对象的行为(Don’t call me; I’ll call you.)
。该框架使用C语言对UML状态机进行手动编码,并且可以通过基于QM模型的免费设计工具自动生成代码。
围绕着实时嵌入式框架(RTEF)这一个独特的平台,如下图所示,可以完成更完整更严格的代码质量控制。
作用是什么?
QP框架的主要目标有以下几点。
提供基于活动对象的可重用事件驱动的体系结构,与基于传统实时操作系统的常规共享状态并发相比,它实际上更加安全,可扩展,并且易于理解,如下。
保持数据隔离并绑定到线程。
通过消息(事件对象)异步在线程之间进行通信。
线程应该花费生命周期来响应传入的事件。
为分层状态机提供一种易于使用的编码技术,以实现活动对象的行为。
通常,这些动作由两个因素决定:事件的性质
和当前的上下文
,即涉及系统的过去事件的顺序。
为活动对象提供有效且线程安全的异步机制进行通信,例如直接事件传递、发布、订阅。
提供事件驱动的计时服务(时间事件)。
提供一些用于运行QP应用程序的内置实时内核,例如协作QV内核,抢先式非阻塞QK内核和抢先式阻塞QXK内核。
为基于软件跟踪(QUTest)的应用程序提供单元测试支持。
为第三方RTOS和台式机操作系统提供可移植性层和即用型端口 QP框架几乎可以与任何传统的实时操作系统(RTOS)一起使用。当前支持的第三方RTOS内核是:
embOS FreeRTOS ThreadX uC/OS-II OSEK/VDX RTOS ERIKA Enterprise 为通过QM建模工具进行建模和自动生成代码提供目标。
设计一个子机以捕获qm中的常见行为如图所示
自动生成代码
有什么特别之处?
QP实时嵌入式框架将面向对象与特定的并发模型结合在一起,有很多优势,如下几点。
面向对象
尽管它是用ANSI-C编写的,但QP/C基本上是一个面向对象的框架,该框架本身和从该框架派生的应用程序基本上由类组成,并且只有类可以具有状态机,与他们相关联。当然这里也需要了解一下C语言的面向对象编程了。
轻量级
QP框架占用空间非常小,尤其是在RAM中,与最小的实时操作系统(RTOS)内核相比,QP所需的资源更少,整个QP代码要求少于5KB的代码和数据,这也降低了实现抽象概念的困难程度。
同时,QP还提供了比常规RTOS高得多的抽象级别。使用QP,可以在活动对象,状态机和事件级别上进行工作,而不是RTOS的“裸”线程。
分层状态机
活动对象的行为在QP中通过分层状态机(UML状态图)进行指定。该框架支持使用C/C++对UML状态机进行手动编码,以及通过基于QM的图形化设计(MBD)工具进行全自动代码生成,状态机就像没有道路基础设施的汽车。
内置内核
QP框架可以在裸机单芯片微控制器上运行,完全替代了传统的RTOS内核获得的所有功能,并且专门设计用于将事件驱动的活动对象与传统的代码混合。
以STM32F4-Discovery board
为示例,演示的内置内核对比如下:
与ARM-Keil,GNU-ARM和IAR-ARM工具链的合作QV
具有ARM-Keil,GNU-ARM和IAR-ARM工具链的抢占式,运行完成QK
具有ARM-Keil,GNU-ARM和IAR-ARM工具链的双模式(运行至完成/阻止)QXK
互通性
QP还可以与许多传统的RTOS和桌面OS,例如Windows和Linux一起使用。这样就能够集成各种通信堆栈TCP/IP,USB,CAN等
,而且可以阻止任务代码的其他中间件。
总结
本文需要了解一下uml建模的知识,经过15年的持续开发,QP也渐渐的成为了嵌入式软件市场上最成熟,最受欢迎的此类解决方案。
并且广泛用于医疗设备,消费电子产品,有线和无线电信,工业自动化,运输,航空航天,机器人技术等领域。
而且对于复杂的逻辑处理能极大的简化代码,官方指导书中给了几个例子,由浅入深,带领大家设计出完备的状态机,框架有c和cpp多个版本,完全开源,其中c语言版本也是采用面向对象思想设计的。
总之,不论是不是搞嵌入式的,这种思想都值得深入学习。
关注公众号『技术让梦想更伟大』,后台回复关键字:『Qt』『C语言基础』『C语言难点』『C++』『Linux』『freertos』『指针』『数据结构与算法』『经验技巧篇』『疑问篇』『基础理论篇』『实战篇』『架构篇』『模块化编程』『状态机』『实用工具』『心声社区』『期刊』『视频』······等,查看更多精选内容。
关注我的微信公众号,回复“加群”按规则加入技术交流群。
这是我另一个技术号,程序员的编程学习基地,注重编程思想,欢迎关注!
点击“阅读原文”查看更多分享。