相关文章推荐
喝醉的毛豆  ·  SQLiteLog (1) no such ...·  4 月前    · 
安静的豆浆  ·  c# - Unity ...·  1 年前    · 
急躁的绿茶  ·  django - celery: ...·  1 年前    · 

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

-- 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内核。

  • 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.从硬件转向软件设计,请牢记这十大技巧!

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

    责任编辑:

    声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。