QP (框架)
QP ("Quantum Platform") 是一個用來構建模塊化實時應用程式的開源框架。它採取事件驅動的方式來調度系統中的各個操作發起者。
開發者 | 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),Windows, VxWorks,ThreadX,uC/OS,FreeRTOS等等。
QP中各個活動對象(actors)是由層次化狀態機(UML狀態圖)來表徵的。QP框架支持由C或者C++編寫的UML狀態機,也支持由免費的QM建模工具直接進行自動代碼生成。[2]
設計背景
- 保證所有的任務數據都應當是本地的,私有的,並且無法從系統的其他部分訪問。
- 任務鍵的通信應當使用中間事件對象異步進行。使用異步通信可以使各任務真正互相獨立並不互相阻塞。
- 在任務的整個生命周期中它都應當響應事件,因此其主要部分應該是一個事件循環。
- 任務應當每次處理一個事件,並在處理完畢之前不應響應其他事件,因此在任務之中沒有競爭冒險。
使用活動對象使得思考並發編程變得容易。相反,直接使用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框架從設計之初就考慮到方便移植。下列的移植現在可用:
- ARM Cortex-M4F (TI Stellaris)
- ARM Cortex-M3 (TI Stellaris, ST STM32, NXP LPC)
- ARM Cortex-M0 (NXP LPC1114)
- ARM7/9 (Atmel AT91R4x, AT91SAM7, NXP LPC, ST STR912)
- Atmel AVR Mega
- Atmel AVR32 UC3-A3
- TI MSP430
- TI TMS320C28x
- TI TMS320C55x
- Renesas Rx600
- Renesas R8C
- Renesas H8
- Freescale Coldfire
- Freescale 68HC08
- Altera Nios II
- 8051 (Silicon Labs)
- 80251 (Atmel)
- Microchip PIC24/dsPIC
- Cypress PSoC1
- 80x86 real mode
支持的作業系統
QP/C和QP/C++框架可以和下列的傳統作業系統和實時作業系統一起使用。當前,QP支持下列作業系統和實時作業系統:
授權協議
所有的QP框架都採取雙重授權,既可以採取GPLv2也可以採取傳統的閉源商業授權。那些希望在嵌入式設備中閉源使用QP的公司可以獲得一個商業授權。
另請參見
參考文獻
- ^ 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.
- ^ free graphical QM modeling tool. [2018-09-30]. (原始內容存檔於2018-09-30).
- ^ Herb Sutter. Use Threads Correctly = Isolation + Asynchronous Messages. March 16, 2009 [2018-09-30]. (原始內容存檔於2018-09-30).
- ^ Herb Sutter. Prefer Using Active Objects Instead of Naked Threads. June 14, 2010 [2018-09-30]. (原始內容存檔於2018-09-30).
外部連結
- state-machine.com(頁面存檔備份,存於網際網路檔案館)
- QP project on SourceForge.net(頁面存檔備份,存於網際網路檔案館)
- qf4net: Quantum Framework for .Net(頁面存檔備份,存於網際網路檔案館)
- qfj: Quantum Framework for Java on SourceForge.net(頁面存檔備份,存於網際網路檔案館)
- Miros: a hierarchical state machine module in Python(頁面存檔備份,存於網際網路檔案館)
- Miros: a hierarchical state machine module in Lua(頁面存檔備份,存於網際網路檔案館)
- State-Oriented Programming (Groovy)
- ACCU Overload Journal #64 "Yet Another Hierarchical State Machine"(頁面存檔備份,存於網際網路檔案館)
- C/C++ Users Journal "Who Moved My State?"(頁面存檔備份,存於網際網路檔案館)
- C/C++ Users Journal "Deja Vu"(頁面存檔備份,存於網際網路檔案館)
- Research on Open CNC System Based on Quantum Framework(頁面存檔備份,存於網際網路檔案館)
- Active Objects by Schmidt