天天看點

QP架構 介紹

原文連結: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架構的主要目标有以下幾點。

  • 提供基于活動對象的可重用事件驅動的體系結構,與基于傳統實時作業系統的正常共享狀态并發相比,它實際上更加安全,可擴充,并且易于了解,如下。
  1. 保持資料隔離并綁定到線程。
  2. 通過消息(事件對象)異步線上程之間進行通信。
  3. 線程應該花費生命周期來響應傳入的事件。
  • 為分層狀态機提供一種易于使用的編碼技術,以實作活動對象的行為。

通常,這些動作由兩個因素決定:

事件的性質

目前的上下文

,即涉及系統的過去事件的順序。

  • 為活動對象提供有效且線程安全的異步機制進行通信,例如直接事件傳遞、釋出、訂閱。
  • 提供事件驅動的計時服務(時間事件)。
  • 提供一些用于運作QP應用程式的内置實時核心,例如協作QV核心,搶先式非阻塞QK核心和搶先式阻塞QXK核心。
QP架構 介紹
QP架構 介紹
QP架構 介紹
  • 為基于軟體跟蹤(QUTest)的應用程式提供單元測試支援。
QP架構 介紹
  • 為第三方RTOS和桌上型電腦作業系統提供可移植性層和即用型端口 QP架構幾乎可以與任何傳統的實時作業系統(RTOS)一起使用。目前支援的第三方RTOS核心是:
    • embOS
    • FreeRTOS
    • ThreadX
    • uC/OS-II
    • OSEK/VDX RTOS ERIKA Enterprise
  • 為通過QM模組化工具進行模組化和自動生成代碼提供目标。

設計一個子機以捕獲qm中的常見行為如圖所示

QP架構 介紹

自動生成代碼

QP架構 介紹

有什麼特别之處?

QP實時嵌入式架構将面向對象與特定的并發模型結合在一起,有很多優勢,如下幾點。

面向對象

盡管它是用ANSI-C編寫的,但QP/C基本上是一個面向對象的架構,該架構本身和從該架構派生的應用程式基本上由類組成,并且隻有類可以具有狀态機,與他們相關聯。當然這裡也需要了解一下C語言的面向對象程式設計了。

QP架構 介紹

輕量級

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也漸漸的成為了嵌入式軟體市場上最成熟,最受歡迎的此類解決方案。

QP架構 介紹

并且廣泛用于醫療裝置,消費電子産品,有線和無線電信,工業自動化,運輸,航空航天,機器人技術等領域。

QP架構 介紹

而且對于複雜的邏輯處理能極大的簡化代碼,官方指導書中給了幾個例子,由淺入深,帶領大家設計出完備的狀态機,架構有c和cpp多個版本,完全開源,其中c語言版本也是采用面向對象思想設計的。

總之,不論是不是搞嵌入式的,這種思想都值得深入學習。

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

繼續閱讀