原文連結: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語言版本也是采用面向對象思想設計的。
總之,不論是不是搞嵌入式的,這種思想都值得深入學習。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧