为了创建一个可用的软件,你不得不和每个修改,每个特征,每个微小的调节做斗争,直到别人满意为止。没有捷径可走。有运气的成分,但你的成功不是幸运,而是由于你的尽力争取。

-- 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框架的主要目标有以下几点。

  • 提供基于活动对象的可重用事件驱动的体系结构,与基于传统实时操作系统的常规共享状态并发相比,它实际上更加安全,可扩展,并且易于理解,如下。

  1. 保持数据隔离并绑定到线程。

  2. 通过消息(事件对象)异步在线程之间进行通信。

  3. 线程应该花费生命周期来响应传入的事件。

  • 为分层状态机提供一种易于使用的编码技术,以实现活动对象的行为。

通常,这些动作由两个因素决定:事件的性质当前的上下文,即涉及系统的过去事件的顺序。

  • 为活动对象提供有效且线程安全的异步机制进行通信,例如直接事件传递、发布、订阅。

  • 提供事件驱动的计时服务(时间事件)。

  • 提供一些用于运行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语言版本也是采用面向对象思想设计的。

总之,不论是不是搞嵌入式的,这种思想都值得深入学习。

1.其实,机器人的发展与嵌入式系统密不可分~

2.HarmonyOS到底是不是Android套皮?

3.代码防御性编程的十条技巧~

4.几种基于RTOS的实用工具

5.单片机编程如何查看版本之间代码的不同?

6.从硬件转向软件设计,请牢记这十大技巧!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

QP是什么,为什么在国内不为我们所熟悉?相关推荐

  1. 国内的服务器的优势就是,国产芯片服务器的优势是什么

    互联网技术的发展如今已经进入到了移动互联网并行的一个重要阶段,而其中非常关键的服务器设备技术性能等方面也得到了巨大的发展,如今国产芯片服务器的出现更是指引着国内互联网技术发展进入新的阶段,因此如今专业 ...

  2. 网易云信智码超清转码技术实践

    智码超清背景介绍 随着 5G.AI 技术发展,视频行业迎来一个高速的增长期,视频在网络带宽的占 2019 年为 43%,预计到 2025 年占比将高达 76%,仍然保持着高速的增长,其中有大部分是超高 ...

  3. C语言如何实现动态数组?

    提出问题 请问在c语言里如何实现动态大小的数组啊,比如说int a[N];,这里N的值可以在程序中定,或者有什么方法可以实现类似的功能?总之只要在编译时不用制定数组大小就行. 分析问题 嵌入式系统的内 ...

  4. 构建政务服务区块链 助推数据共享和业务协同

    一.问题和需求 随着"互联网+政务服务"不断深化,跨部门.跨系统的数据共享和业务协同需求日益迫切.传统的解决方案一般是建立统一的数据中心(政务服务平台或数据共享平台),各个数据提供 ...

  5. 最火的前端开发框架Bootstrap使用教程学习!

    Bootstrap,来自Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 它由Twitter的 ...

  6. jquery和bottstrap

    jquery jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口:具有高效灵活的css选择器,并且可对CSS选择器进行扩展:拥有便捷的插件扩展机制和丰富的插件.同时,jQuer ...

  7. 科学人格和科学能力的培养

    n要有明确的科学方向,明确的研究对象 n从系统看问题,从部件做工作 n选择2-3种偏前沿的刊物,作为自己研究工作的参照物,不断跟踪 n做1.2.3件事,做好1件事,决不要做10件事 n交几个学术界朋友 ...

  8. bootstrap中表格大小设置_bootstrap 设置table - td宽度问题

    展开全部 1.//对于 Bootstrap 3.0 For Bootstrap 3.0: // class="col-md-*"  其中的*表示列的宽度 With twitter ...

  9. 简单易上手的Bootstrap

    什么是Bootstrap? Bootstrap是一个web框架.Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT ...

最新文章

  1. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
  2. 【安全漏洞】简要分析复现了最近的ProxyShell利用链
  3. 从内涵段子到皮皮虾,娱乐App为何不能一鱼两吃?
  4. CTF-压缩包密码CRC爆解工具安装
  5. 面试题37:两个链表的第一个公共结点
  6. 在Android开发中怎样使用Application类
  7. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)
  8. npm报错core-js@2.6.12: core-js@<3 is no longer maintained and not recommended for usage due to the num
  9. python 回溯法 子集树模板 系列 —— 4、数字组合问题
  10. hdu1023-----卡特兰数
  11. java建设银行支付_基于JAVA的建设银行账目管理系统的设计
  12. 2009程序员考试大纲
  13. 百度中文手写输入法linux版,[Linux]百度输入法Linux版 V1.0.1.0 [2020.05.19]
  14. win10使用vnc远程树莓派
  15. python爬虫:xpath解析
  16. python之json模块
  17. metrics 指标分析——你不在意的p99和p999
  18. 潭州教育学python怎么样_在潭州教育学原画两个月的感受
  19. 小孩学计算机的电视剧,小时候在教育频道看的一个电视剧,好像是叮当演的,讲一堆小孩学唱戏之类的...
  20. tpshop开源商城为什么不能免费商用运营

热门文章

  1. 基于RoomPlan,苹果房间扫描AR效果震惊
  2. amq web管理界面参数含义
  3. 基于ZebraPrinter 的ZPL 命令 --Android篇
  4. Linux系统运维必备技能
  5. 十分钟读懂游戏研发、发行、渠道那些事儿
  6. Ubuntu16.04安装ROS教程
  7. SIM800_基本指令调试笔记
  8. Hadoop2.x配置-Ubuntu18.04-Vm虚拟机
  9. SAP PA获利分析案例教程前台操作
  10. OSI七层模型及各层作用