一款輕量級(jí)事件驅(qū)動(dòng)型應(yīng)用程序框架
QP?/C 實(shí)時(shí)嵌入式框架 (RTEF)?是專為實(shí)時(shí)嵌入式 (RTE) 系統(tǒng)量身定制的活動(dòng)對(duì)象計(jì)算模型的輕量級(jí)實(shí)現(xiàn)。QP 既是用于構(gòu)建由活動(dòng)對(duì)象(參與者)組成的應(yīng)用程序的軟件基礎(chǔ)結(jié)構(gòu),也是用于以確定性方式執(zhí)行活動(dòng)對(duì)象的運(yùn)行時(shí)環(huán)境。此外,QP 框架支持分層狀態(tài)機(jī),用于指定活動(dòng)對(duì)象的行為。
官網(wǎng)網(wǎng)址(復(fù)制到瀏覽器打開):
https://www.state-machine.com/products/qp
1、它有什么作用?
QP/C RTEF 的主要目標(biāo)是:
提供基于并發(fā)編程最佳實(shí)踐的現(xiàn)代事件驅(qū)動(dòng)并發(fā)模型?,統(tǒng)稱為活動(dòng)對(duì)象(Actor)計(jì)算模型,其本質(zhì)上比基于傳統(tǒng)實(shí)時(shí)操作系統(tǒng)(RTOS)的傳統(tǒng)“共享狀態(tài)并發(fā),互斥和阻塞方法“更安全;
提供比“裸”RTOS線程更接近問題域的更高層次的抽象;
為應(yīng)用現(xiàn)代技術(shù)(如可視化建模,分層狀態(tài)機(jī)和自動(dòng)代碼生成)提供正確的抽象;
彌合更高級(jí)別建模概念(如UML)與傳統(tǒng)編程語言(如C或C++)之間的語義差距。
2、它有什么特別之處?
QP?/C 實(shí)時(shí)嵌入式框架 (RTEF) 是嵌入式軟件市場(chǎng)上獨(dú)一無二的產(chǎn)品。它提供了嵌入式應(yīng)用程序的現(xiàn)代可重用架構(gòu),它將面向?qū)ο笈c特定的并發(fā)模型(稱為活動(dòng)對(duì)象(actor))相結(jié)合。
這種架構(gòu)通常比使用傳統(tǒng)實(shí)時(shí)操作系統(tǒng)(RTOS)的“免費(fèi)線程”更安全,響應(yīng)更快,更易于理解。它還提供了足夠高的抽象級(jí)別和正確的抽象,以有效地將建模和代碼生成應(yīng)用于深度嵌入式系統(tǒng)。
面向?qū)ο?/h1>
即使它是用符合MISRA的ISO-C99編寫的,QP?/C基本上是一個(gè)面向?qū)ο蟮?/strong>框架,這意味著框架本身和從框架派生的應(yīng)用程序基本上由類組成,只有類才能有與之關(guān)聯(lián)的狀態(tài)機(jī)。
分層狀態(tài)機(jī)
活動(dòng)對(duì)象的行為在 QP?/C 中通過分層狀態(tài)機(jī)(UML 狀態(tài)圖)指定。該框架支持在C語言中對(duì)UML狀態(tài)機(jī)進(jìn)行手動(dòng)編碼,以及通過免費(fèi)的圖形化基于QM?模型的設(shè)計(jì)(MBD)工具全自動(dòng)代碼生成。
內(nèi)置內(nèi)核
QP?/C框架可以在裸機(jī)單芯片微控制器上運(yùn)行,完全取代了傳統(tǒng)的RTOS。該框架包含一系列內(nèi)置的實(shí)時(shí)內(nèi)核,例如協(xié)作式 QV 內(nèi)核、搶占式非阻塞 QK 內(nèi)核和搶占式雙模式阻塞 QXK 內(nèi)核。QXK 內(nèi)核提供了您期望從傳統(tǒng)?RTOS 內(nèi)核獲得的所有功能,并且專門設(shè)計(jì)用于將事件驅(qū)動(dòng)的活動(dòng)對(duì)象與傳統(tǒng)的阻塞代碼混合,例如商業(yè)中間件(TCP/IP 堆棧、UDP 堆棧、嵌入式文件系統(tǒng)等)或傳統(tǒng)軟件。為主要 CPU 系列提供了本機(jī) QP 端口和即用型示例。
效率
盡管QP?/C提供的抽象級(jí)別比傳統(tǒng)的RTOS高得多,但它在RAM/ROM占用空間和CPU效率方面通常都優(yōu)于等效的傳統(tǒng)RTOS產(chǎn)品。
單純
QP框架易于入門,易于使用且易于構(gòu)建。提供的大量示例附帶了典型嵌入式工具鏈的項(xiàng)目(例如,GNU,ARM,IAR等)。該框架不強(qiáng)加任何專有的構(gòu)建或配置過程或工具,只是簡單的makefile和演示工具鏈的本機(jī)項(xiàng)目。雖然這些對(duì)于真正復(fù)雜的項(xiàng)目來說可能還不夠,但經(jīng)驗(yàn)表明,更大的團(tuán)隊(duì)有自己的DevOps(例如CI / CD),并且強(qiáng)加特定的流程通常會(huì)適得其反。
互操作性
QP / C還可以與許多傳統(tǒng)的RTOS和通用操作系統(tǒng)(如Linux和Windows)一起使用。
溯源
QP?/C 在所有工作工件之間提供前所未有的雙向可追溯性,使團(tuán)隊(duì)能夠從需求到架構(gòu)、設(shè)計(jì)、源代碼、測(cè)試再到備份的完整可見性。
受歡迎程度和成熟度
經(jīng)過20年的不斷發(fā)展,超過350個(gè)商業(yè)被許可方,以及全球許多倍的開源用戶,QP?框架是市場(chǎng)上最受歡迎的此類產(chǎn)品。它們?yōu)闊o數(shù)電子產(chǎn)品提供動(dòng)力,從植入式醫(yī)療設(shè)備到復(fù)雜的武器系統(tǒng)。
廣泛使用
QP?實(shí)時(shí)嵌入式框架可滿足各種市場(chǎng)的高可靠性應(yīng)用,例如醫(yī)療、消費(fèi)、物聯(lián)網(wǎng)、國防、機(jī)器人、工業(yè)、通信、運(yùn)輸、半導(dǎo)體IP等。在這些應(yīng)用領(lǐng)域中,QP?優(yōu)雅的軟件架構(gòu)和現(xiàn)代設(shè)計(jì)理念都具有明顯的優(yōu)勢(shì)。
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ??


零聲白金VIP體驗(yàn)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang/QT/音視頻/Linux內(nèi)核)課程:? ??

3、組成簡介
QP(Quantum Platform)
是一個(gè)輕量級(jí)的、開源的、基于狀態(tài)機(jī)的、事件驅(qū)動(dòng)型應(yīng)用程序框架。這個(gè)框架包括四部分:
事件處理器(QEP);
輕量級(jí)的事件驅(qū)動(dòng)框架(QF);
任務(wù)調(diào)度微內(nèi)核(QV、QK、QXK);
實(shí)時(shí)跟蹤調(diào)試器(QS)。
(1)QEP
Quantum Event Processor
是一個(gè)通用的,可移植的,可重用的狀態(tài)機(jī)引擎。QEP允許你直接把UML樣式的狀態(tài)圖映射為代碼。
QEP提供了傳統(tǒng)的簡單平面狀態(tài)機(jī)和層次式狀態(tài)機(jī)。QEP可以直接操作事隊(duì)列和事件分發(fā)機(jī)制。
(2)QF
QF是一個(gè)通用的,事件驅(qū)動(dòng)的應(yīng)用框架,是一個(gè)實(shí)時(shí)框架,面向嵌入式系統(tǒng)。
QF被設(shè)計(jì)成和QEP,RTOS協(xié)同工作。
QF包含了事件隊(duì)列,活動(dòng)對(duì)象,事件遍歷等。
(3)QK
QK是一個(gè)輕量級(jí)可搶占型實(shí)時(shí)內(nèi)核
QK是一個(gè)極小的,按RTC習(xí)慣的,執(zhí)行獨(dú)立任務(wù)的內(nèi)核。
QK必須和QF版本相匹配。
(4)QS
一個(gè)強(qiáng)大的調(diào)試工具
以下框圖顯示了 QP? 框架的使用上下文、子組件和分層:

QEP (Hierarchical Event Processor)
事件處理器,也可以理解為一個(gè)狀態(tài)機(jī)引擎,當(dāng)有事件需要處理時(shí),調(diào)用當(dāng)前狀態(tài)的狀態(tài)函數(shù)處理這個(gè)事件,并處理調(diào)用狀態(tài)函數(shù)的返回值,根據(jù)返回值進(jìn)行相應(yīng)的狀態(tài)變換(如轉(zhuǎn)移到父狀態(tài))。而且狀態(tài)引擎也處理某狀態(tài)的進(jìn)入(ENTER)、退出(EXIT)、初始偽狀態(tài)(INIT)。
QF (Active-Object Framework)
QF是輕量級(jí)的、事件驅(qū)動(dòng)、active objects框架。這個(gè)框架的主要任務(wù)是保證每個(gè)active object的線程安全,運(yùn)行-到-完成(run-to-completion )的事件處理。它包含了直接的事件傳送,發(fā)布-訂閱(publish-subscribe)的事件轉(zhuǎn)發(fā),事件隊(duì)列,時(shí)間事件(延時(shí)傳送時(shí)間事件)。
QV (Cooperative Kernel)
協(xié)作內(nèi)核(Vanilla內(nèi)核),它只在time to completion的時(shí)候處理event,并在處理所有event后,對(duì)active object執(zhí)行基于priority-based的調(diào)度器。它是隱式合作(implicitly-cooperative),因?yàn)榛钴S定時(shí)器不需要明確的放棄CPU。代替的是在完成事件處理后,簡單的return到QV調(diào)度器中。
QK (Preemptive Non-Blocking Kernel)
QK是一個(gè)超快速的搶占式,基于優(yōu)先級(jí)的,單stack,實(shí)時(shí)內(nèi)核專門為執(zhí)行active objects而設(shè)計(jì)的。它總是會(huì)處理event queued中的高優(yōu)先級(jí)的active objects,但它將event當(dāng)作一次性的函數(shù)來調(diào)用(而不是像傳統(tǒng)內(nèi)核那樣的endless循環(huán))。盡管如此,如果新的事件優(yōu)先級(jí)比當(dāng)前處理的事件優(yōu)先級(jí)高,QK內(nèi)核依然提供了搶占式的一次性的event處理功能(像搶占式中斷處理器允許中斷彼此搶占)。這意味著,QK可以使用單stack來保存所有active objects的context。
QXK (Preemptive Blocking Kernel)
QXK是一個(gè)簡單的搶占,基于優(yōu)先級(jí)的,阻塞,實(shí)時(shí)內(nèi)核專門為傳統(tǒng)的阻塞代碼的主動(dòng)對(duì)象,如商用中間件(TCP / IP協(xié)議棧,UDP協(xié)議棧,嵌入式文件系統(tǒng)等)或遺留代碼混合設(shè)計(jì)。
QS (Software Tracing System)
QS是軟件追蹤系統(tǒng),使開發(fā)人員能夠以最少的系統(tǒng)資源監(jiān)控目標(biāo),并沒有停止或顯著放緩代碼直播事件驅(qū)動(dòng)QP的應(yīng)用程序。QS是用于測(cè)試,故障排除和優(yōu)化QP應(yīng)用的理想工具。QS甚至可以用于支持產(chǎn)品制造驗(yàn)收測(cè)試。
原文作者:一起學(xué)嵌入式
