原文連結:
- Quantum LeaPs(QP)的資料
- QP™ 實時嵌入式架構 (RTEF)
書籍:C/C++ 中的實用 UML 狀态圖,第 2 版
QP官方網站
QP對比RTOS有什麼好處?
QP/C的SDK手冊 介紹QPC的架構、Getting Started、API和參考例程。
QM的軟體手冊 QP的UML模組化軟體,可以自動生成基于QP架構的代碼。
QP官方的交流論壇 是擷取QP使用幫助最好的方式。
QP™ 實時嵌入式架構 (RTEF)
QP™(量子平台)是一系列輕量級實時嵌入式架構 ( RTEF ),用于基于活動對象設計模式建構 事件驅動的 嵌入式軟體。QP 系列由 QP/C 和 QP/C++ 架構組成,它們受到嚴格的品質控制、完整的文檔,并在靈活的雙重許可模式下可用。
MCU 的實時嵌入式架構
QP/C 和 QP/C++ 實時嵌入式架構 (RTEF) 提供輕量級、可重用的軟體架構,該架構将事件驅動的并發模型(稱為 活動對象 (actor))與 有限狀态機相結合 。這種架構本質上支援并自動執行并發程式設計的最佳實踐。這導緻應用程式比傳統實時作業系統 (RTOS) 的裸線程和無數阻塞機制 更安全 、響應更快且更易于管理。QP 架構還提供了足夠 高的抽象級别, 可以有效地将圖形模組化和代碼生成應用于深度嵌入式系統,例如基于 ARM Cortex-M 的微控制器。
QP/C 線上手冊 GitHub 上的 QP/C 下載下傳 QP/C/C++™ 作為 QP-Bundle 的一部分 QP/C++ 線上手冊 GitHub 上的 QP/C++
框圖顯示了 QP™ 架構的元件及其與硬體和應用程式的關系
QP™ 亮點
由事件驅動的活動對象組成的 QP™ 應用程式比基于傳統 RTOS 線程的等效解決方案消耗 更少的記憶體, 尤其是 RAM。 QP™ RTEF 與基于優先級的搶占式核心相結合,适用于硬實時應用。事實上, 非阻塞 活動對象比傳統阻塞 RTOS 線程更适合 RMS/RMA 方法。 經過 15 多年的不斷改進,QP™ 架構是嵌入式軟體市場上同類産品中最成熟和最受歡迎的産品。
支援現代狀态機
活動對象的行為通過現代 有限狀态機 (UML 狀态圖)在 QP/C 和 QP/C++ 中指定。QP 架構支援使用 C (QP/C) 或 C++ (QP/C++) 以及基于模型的設計 (MBD) 手動編碼 UML 狀态機,并通過 免費的 QM™ 基于模型的設計工具 自動生成代碼.
獨立(裸機)操作
QP™ RTEF 可以 獨立 運作,完全取代傳統的 RTOS。這些架構包含一系列内置實時核心,例如協作 QV 核心、搶占式非阻塞 QK 核心和獨特的搶占式雙模式(阻塞/非阻塞)QXK 核心。為 ARM Cortex-M (M0-M7) 以及其他 CPU提供了獨立的 QP 端口和即用型示例。
您不需要使用傳統的 RTOS 來通過 QP 實作搶占式多任務處理。内置的搶占式QK 和 QXK 核心支援基于優先級的搶占式多任務處理,與速率單調排程完全相容, 以實作有保證的硬實時性能。這些搶占式核心與活動對象的從運作到完成的執行語義完美比對,而且比傳統的阻塞式 RTOS 核心更簡單、更快、更高效。
QP/C 本地端口 QP/C++ 本地端口
示例評估闆
EK-TM4C123GXL (ARM Cortex-M4) EFM32-SLSTK3401A Pearl Gecko (ARM Cortex-M4) STM32F4-發現(ARM Cortex-M4) STM32 NUCLEO-L152RE 開發闆(ARM Cortex-M3) STM32 NUCLEO-L053R8(ARM Cortex-M0+) STM32F746G-發現(ARM Cortex-M7) STM32 NUCLEO-H743ZI(ARM Cortex-M7) mbed LPC1768 ( (ARM Cortex-M4) LAUNCHXL2-TMS57012 (ARM Cortex-R4) MSP-EXP430G2 (MSP430) MSP-EXP430F5529LP (MSP430) Microstick-II(PIC24 和 PIC32)
傳統 RTOS 支援
QP™ RTEF 還可以與許多傳統的第三方 RTOS 配合使用。為多個 RTOS(例如 embOS、ThreadX、MicroC/OS、FreeRTOS 等)提供了 QP 端口和即用型示例
您可能考慮使用傳統 RTOS 核心來執行事件驅動 QP™ 應用程式的最重要原因是與現有軟體的相容性。例如,許多通信棧(TCP/IP、USB、CAN 等)是為傳統的阻塞核心設計的。此外,許多遺留代碼需要阻塞機制,例如信号量或時間延遲。傳統的 RTOS 允許您将現有軟體元件作為與事件驅動 QP™ 活動對象并行的正常“阻塞”線程運作。
QP/C RTOS 端口 QP/C++ RTOS 端口
通用作業系統支援
QP™ RTEF 還可以與通用作業系統一起使用,例如 Linux (POSIX)、Windows 和 macOS。
通用作業系統的 QP™ 端口本身就很有趣。例如,QP 到 POSIX 的端口支援實時擴充,可以與嵌入式 Linux以及 QNX、INTEGRITY、VxWorks 等 RTOS 的 POSIX 子系統配合使用。同樣,QP 到 Windows 的端口可以與 Windows IoT 或 Windows Embedded Compact 配合使用。
但是作業系統支援對于在桌面工作站上開發深度嵌入的代碼也很有趣,這被稱為“雙目标”。
樹莓派零 WiFi(嵌入式 Linux)
QP/C 作業系統端口 QP/C++ 作業系統端口
QP/C 和 QP/C++ 特性比較
特征 | 質檢/質控 | QP/C++ |
---|---|---|
最新版本(修訂曆史) 最新釋出日期 | 6.9.3 2021-04-12 | 6.9.3 2021-04-12 |
預期目标系統 (代表性硬體) | 32 位/16 位 MCU (ARM Cortex-M) | 32 位/16 位 MCU (ARM Cortex-M) |
由免費的QM™ 基于模型的設計工具支援 | ||
活動對象的最大數量 | 64 | 64 |
具有任意參數的動态事件 | ||
自動事件回收 | ||
直接事件釋出 (FIFO) | ||
直接事件釋出 (LIFO) | ||
釋出訂閱事件傳遞 | ||
事件延期 | ||
系統時鐘滴答率數 | 可配置 (0..15) | 可配置 (0..15) |
每個活動對象的時間事件數 | 無限 | 無限 |
----------------------------------------------- 狀态機 - ---------------------------------------------- | ||
分層狀态機(QHsm-strategy) | ||
分層狀态機(QMsm-strategy) | ||
子機和子機狀态 | ||
----------------------------------------------- 内置核心 ----------------------------------------------- | ||
搶占式非阻塞核心 (QK) | ||
搶占式阻塞雙模核心(QXK) | ||
----------------------------------------------- 第三方實時作業系統/作業系統 ----------------------------------------------- | ||
可移植到第 3 方 RTOS 核心 | ||
POSIX 的可用端口(Linux、QNX、INTEGRITY 等) | ||
Windows 的可用端口 | ||
----------------------------------------------- 測試/分析----------------------------------------------- | ||
QP/Spy™ 軟體追蹤 | ||
QUTest™ 單元測試工具 | ||
MISRA 合規性 | MISRA-C:2004 | |
AUTOSAR-C++ 合規性 | AUTOSAR-C++ 14 | |
PC-Lint-Plus 支援包 | ||
-----------------------------------------------授權許可 -- --------------------------------------------- | ||
開源許可 (GPL) | ||
閉源(商業)許可 |
傳統 QP™ 開發套件 (QDK)
QP 開發套件 (QDK) 是用于各種嵌入式處理器、工具集和電路闆的單獨 QP 端口和示例。
為什麼是“遺産”?
從 QP 5.4.0 版開始,所有官方支援的端口和示例都捆綁在 QP 下載下傳中,而不是作為單獨的 QP 開發套件 (QDK) 分發。為早期 QP 版本釋出的 QDK 稱為“legacy-QDK”,可從 SourceForge 下載下傳。
檢視/下載下傳可用的舊版 QDK
不建議将“legacy-QDKs”用于新項目。“legacy-QDKs”沒有來自 Quantum Leaps 的商業支援,盡管在免費 QP 支援論壇上歡迎關于“legacy-QDKs”的問題
如何找到您想要的 QDK?
所有“遺留 QDK”都分布在根據以下一般約定命名的 ZIP 檔案中:
qdkxxx_<cpu/rtos>-<toolset>-<board>_<version>.zip
-
表示 QP 架構類型,而qdkxxx
QDK 代表 QP/C、qdkc
QP/C++ 和qdkcpp
QP-nanoqdkn
-
表示給定嵌入式 CPU 類型(例如 AVR、M16C、R8C 等)的獨立 QP 的 QDK。<cpu>
-
表示運作在給定 RTOS 之上的 QP 的 QDK,例如 eCos、VxWorks 等。<rtos>
-
表示特定工具集的端口,例如 IAR、GNU、Renesas 等。<toolset>
-
表示示例針對指定闆卡,例如 SKP3607、YRDKRX62N 等。<board>
-
表示 QP 架構的相容版本。<version>
所有 QDK 均已
<version>
根據 QP 架構的規定進行開發和測試。QDK 也可能适用于較新的 QP 版本,但可能需要進行一些修改。
QDK安裝
大多數“遺留 QDK”的安裝過程如下:
- 下載下傳您喜歡的 QDK 并檢查其
編号。<version>
- 下載下傳并安裝(解壓)相應的 QP
。例如,如果您的 QDK 檔案以 開頭<version>
和結尾qdkcpp_
,則應下載下傳并安裝 QP/C++ 4.5.02 版。_4.5.02
- 将 QDK 解壓縮到臨時目錄。
- 将QDK目錄的内容複制到QP安裝目錄下。例如,如果您的 QDK 解壓到 目錄
,您應該将該目錄的内容複制到 QP/C++ 安裝檔案夾中(通常在 裡面qdkcpp_avr-iar_4.5.02
)。請注意,您需要同意覆寫現有目錄C:/qp/qpcpp/
和examples/
.ports/
QDK 文檔
每個“遺留 QDK”在 ZIP 存檔的主目錄中都包含 PDF 格式的“QDK 手冊”。