QP ("Quantum Platform") 是一個用來構建模塊化實時應用程式的開源框架。它採取事件驅動的方式來調度系統中的各個操作發起者。

QP狀態機框架
開發者Quantum Leaps
程式語言QP/C和QP-nano使用C,QP/C++則使用C++
作業系統家族軟體框架 / 實時作業系統
運作狀態成熟
源碼模式開放原始碼
市場取向嵌入式系統
許可證GPL商業授權(雙授權協議)
官方網站state-machine.com

系統總覽

編輯

QP編程框架家族包括了QP/C,QP/C++,和QP-nano。它們都經由良好的質量控制,並且既有GPLv2開源協議,也可以進行商業許可[1] 。這些框架都能在單片機上運行並能夠替代一個傳統的RTOS,並對每一種常見的MCU都提供了移植好的底層接口。QP/C and QP/C++也能和一個傳統的OS或RTOS一起使用,比如POSIX (Linux, QNX),WindowsVxWorksThreadXuC/OSFreeRTOS等等。

QP中各個活動對象(actors)是由層次化狀態機(UML狀態圖)來表徵的。QP框架支持由C或者C++編寫的UML狀態機,也支持由免費的QM建模工具直接進行自動代碼生成。[2]

設計背景

編輯

活動對象原生支持並自動保證以下並發編程中的最佳實踐:[3]

  • 保證所有的任務數據都應當是本地的,私有的,並且無法從系統的其他部分訪問。
  • 任務鍵的通信應當使用中間事件對象異步進行。使用異步通信可以使各任務真正互相獨立並不互相阻塞。
  • 在任務的整個生命周期中它都應當響應事件,因此其主要部分應該是一個事件循環
  • 任務應當每次處理一個事件,並在處理完畢之前不應響應其他事件,因此在任務之中沒有競爭冒險

使用活動對象使得思考並發編程變得容易。相反,直接使用RTOS任務有很多不利之處,尤其因為他們對使用方式不加限制,也不提供自動進行並發最佳實踐的機制。[4] 使用活動對象使抽象程度提高了一個層次,並且能讓編程者更好地表達意圖和提高生產率。

活動對象並不能憑空產生,這往往需要一個軟體框架來為每個活動對象提供一個執行緒,提供事件排隊服務以及基於事件的定時服務。在資源受限的嵌入式系統中,可擴展性和效率是此類框架的最大著力點之一。那些傳統上建立在RTOS之上的建模工具和各類框架增加了內存消耗和CPU開銷。

QP框架在設計時就著眼於效率和小內存占用,而且在獨立構型中不需要一個RTOS。事實上,和傳統的RTOS比起來,QP框架提供較少的RAM和ROM占用。這是有可能的;因為活動對象不需要阻塞,因此傳統RTOS中的大部分阻塞機制(如信號量等)是不需要的。

這些特性使得事件驅動框架適用於單片機。比起原始的RTOS任務,事件驅動框架是一個更高層次的抽象,並且資源占用率和能量消耗也低。這是由於事件驅動模型僅在處理事件時激活CPU,而在絕大多數時間CPU處於低功耗模式。

QP架構和組件

編輯

QP由一個合乎UML規範的事件處理器(QEP),一個可移植的事件驅動實時框架(QF),一個小型化的運行至完成的內核(QK)和一個軟體跟蹤系統(QS)組成.

 

QEP(Quantum Event Processor)是一個合乎UML規範的事件處理器。它使得UML狀態機的直接編碼(使用UML狀態圖)成為可能,並能生成高度可維護的C/C++代碼。每一個狀態機元素都精確無歧義地對應到唯一的代碼片段。QEP完全支持層次化狀態嵌套,這方便了子狀態機的復用而無需重複進行編碼。

QF(Quantum Framework)是一個高度可移植的、事件驅動的實時應用程式框架。它是專為實時嵌入式系統狀態機的並發執行設計的。

QK(Quantum Kernel)是一個小型的、非阻塞式的運行至完成(Run-to-completion)的內核。它是專門為執行運行至完成的狀態機設計的。

QS(Quantum Spy)是一個軟體跟蹤系統,它能在只占用極少系統資源的前提下監視事件驅動的QP應用程式,並不會導致應用程式出線顯著速度降低或者卡頓。

支持的處理器

編輯

所有的QP框架(QP/C,QP/C++和QP-nano)都可以很容易地被移植到各種微處理器編譯器,這是由於QP框架從設計之初就考慮到方便移植。下列的移植現在可用:

支持的作業系統

編輯

QP/C和QP/C++框架可以和下列的傳統作業系統和實時作業系統一起使用。當前,QP支持下列作業系統和實時作業系統:

授權協議

編輯

所有的QP框架都採取雙重授權,既可以採取GPLv2也可以採取傳統的閉源商業授權。那些希望在嵌入式設備中閉源使用QP的公司可以獲得一個商業授權。

另請參見

編輯

參考文獻

編輯
  1. ^ Samek, Miro. Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems. Newnes. 2008: 728. ISBN 978-0-7506-8706-5. 
  2. ^ free graphical QM modeling tool. [2018-09-30]. (原始內容存檔於2018-09-30). 
  3. ^ Herb Sutter. Use Threads Correctly = Isolation + Asynchronous Messages. March 16, 2009 [2018-09-30]. (原始內容存檔於2018-09-30). 
  4. ^ Herb Sutter. Prefer Using Active Objects Instead of Naked Threads. June 14, 2010 [2018-09-30]. (原始內容存檔於2018-09-30). 

外部連結

編輯