QP_(框架)

**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