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



系統總覽

QP 編程框架家族包括了 QP/C，QP/C++，和 QP-nano。它們都經由良好的質量控制，並且既有 GPLv2 開源協議，也可以進行商業許可 。這些框架都能在單片機上運行並能夠替代一個傳統的 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 建模工具直接進行自動代碼生成。



設計背景

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


* 保證所有的任務數據都應當是本地的，私有的，並且無法從系統的其他部分訪問。

* 任務鍵的通信應當使用中間事件對象異步進行。使用異步通信可以使各任務真正互相獨立並不互相阻塞。

* 在任務的整個生命周期中它都應當響應事件，因此其主要部分應該是一個事件循環。

* 任務應當每次處理一個事件，並在處理完畢之前不應響應其他事件，因此在任務之中沒有競爭冒險。

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

活動對象並不能憑空產生，這往往需要一個軟體框架來為每個活動對象提供一個執行緒，提供事件排隊服務以及基於事件的定時服務。在資源受限的嵌入式系統中，可擴展性和效率是此類框架的最大著力點之一。那些傳統上建立在 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 支持下列作業系統和實時作業系統：


* Linux（POSIX）

* Win32（所有的桌面版 Windows 和 Windows CE）

* VxWorks

* ThreadX

* FreeRTOS

* MicroC/OS-II

* QNX（POSIX）

* INTEGRITY（POSIX）



授權協議

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



另請參見


* 演員模型

* UML 狀態機

* 實時作業系統

* 嵌入式作業系統



參考文獻



外部連結


* 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