一個(gè)叫做EventOS Nano的開源項(xiàng)目,蠻有特色。
一、EventOS Nano簡(jiǎn)介
EventOS Nano,是一個(gè)面向單片機(jī)、事件驅(qū)動(dòng)的嵌入式開發(fā)平臺(tái)。它主要有兩大技術(shù)特色:一是事件驅(qū)動(dòng),二是超輕量。
EventOS Nano以及其母項(xiàng)目EventOS,目標(biāo)是開發(fā)一個(gè)企業(yè)級(jí)的嵌入式開發(fā)平臺(tái),以事件總線為核心,打造一個(gè)統(tǒng)一的嵌入式技術(shù)生態(tài),為廣大企業(yè)用戶和嵌入式開發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開發(fā)效率的嵌入式開發(fā)環(huán)境。
EventOS Nano的主要特性列舉如下:
事件總線為核心組件,靈活易用,是進(jìn)行線程(狀態(tài)機(jī))間同步或者通信的主要手段,也是對(duì)EventOS分布式特性和跨平臺(tái)開發(fā)進(jìn)行支持的唯一手段。事件支持廣播發(fā)送,或者發(fā)布-訂閱機(jī)制兩種方式(二選一)。
全局事件隊(duì)列,摒棄每個(gè)線程(狀態(tài)機(jī))擁有自己的事件隊(duì)列的方式,只有一個(gè)全局事件隊(duì)列,極限壓縮對(duì)RAM的占用。
協(xié)作式內(nèi)核,優(yōu)點(diǎn)是不會(huì)產(chǎn)生資源競(jìng)爭(zhēng),極度可靠。
極度輕量,便于嵌入其他系統(tǒng),除事件總線外的所有特性(層次狀態(tài)機(jī)、平面狀態(tài)機(jī)、發(fā)布-訂閱機(jī)制、事件攜帶數(shù)據(jù)、事件橋等)均可裁剪,將資源占用降至極限,可低至ROM 1.2KB,RAM 172Byte。可以作為子系統(tǒng),“悄悄”嵌入到其他軟件系統(tǒng)中去。
功能強(qiáng)大的軟定時(shí)器,以時(shí)間事件的形式,對(duì)軟定時(shí)器功能,進(jìn)行優(yōu)雅且功能強(qiáng)大的實(shí)現(xiàn)。
API的設(shè)計(jì),更加簡(jiǎn)明,更加符合本土嵌入式工程師的習(xí)慣。
移植方便,只需實(shí)現(xiàn)少數(shù)幾個(gè)接口函數(shù)即可。
未來會(huì)使用Event Bridge(事件橋)機(jī)制與EventOS打通事件總線,以便對(duì)EventOS的分布式特性進(jìn)行支持。
重點(diǎn)關(guān)注三種應(yīng)用場(chǎng)景:?jiǎn)纹瑱C(jī),作為模塊向其他軟件系統(tǒng)的嵌入和可靠性要求較高的嵌入式場(chǎng)景。
如果你想寫一個(gè)清晰的、結(jié)構(gòu)健壯且利于維護(hù)的源代碼,又不想使用傳統(tǒng)的RTOS,那么EventOS Nano是你的不二選擇。
EventOS Nano的前身,曾經(jīng)讓我在過去的工作中受益匪淺,讓我非常高效的寫出了很多可靠的程序,能力和回報(bào)都有了質(zhì)的提升。
現(xiàn)在,我將以前的技術(shù)成果整理重構(gòu),在各方面都向著規(guī)范的開源項(xiàng)目靠攏,包括源碼、注釋、文檔、單元測(cè)試和例程等等。
未來,EventOS Nano這個(gè)項(xiàng)目我會(huì)一直完善下去。我的目標(biāo)是,將EventOS Nano項(xiàng)目在2022年底前做成Gitee推薦項(xiàng)目,2024年年底前將EventOS項(xiàng)目,做成Gitee的GVP項(xiàng)目。造福更多的嵌入式工程師。
二、文檔與博客
EventOS Nano的移植和入門,在documentation文件夾里,可以參考以下幾個(gè)文檔:
快速入門文檔
裸機(jī)移植文檔
開發(fā)環(huán)境搭建
EventOS Nano有關(guān)的博客:
如何理解事件
三、為什么叫做EventOS Nano?
之所以叫Nano,是因?yàn)樗娴姆浅]p量。全功能的EventOS Nano目前經(jīng)MDK編譯后,框架本身占用RAM 200Byte,ROM約3.5KB(優(yōu)化等級(jí)為-O3)或4.5KB(優(yōu)化等級(jí)為-O0)。
裁剪后,最小功能的EventOS Nano,目前經(jīng)MDK編譯后,框架本身占用RAM 172Byte,ROM約1.2KB(優(yōu)化等級(jí)為-O3)或1.5KB(優(yōu)化等級(jí)為-O0)。
之所以叫EventOS Nano,一是因?yàn)樗募夹g(shù)特色與核心思想,就是事件驅(qū)動(dòng);二是因?yàn)樗橇硗庖粋€(gè)開源項(xiàng)目EventOS(準(zhǔn)備中)的簡(jiǎn)化實(shí)現(xiàn),EventOS是一個(gè)事件驅(qū)動(dòng)的、分布式的、可跨平臺(tái)開發(fā)的嵌入式RTOS,面向32位單片機(jī)和更高處理器的嵌入式開發(fā)平臺(tái)。
四、EventOS Nano主張的編程思想
1、事件驅(qū)動(dòng)與事件總線
事件驅(qū)動(dòng)和事件總線,是EventOS Nano的核心,也是EventOS的核心。事件機(jī)制,與RTOS中事件概念完全不同,它更像是windows編程中的消息。事件,可以認(rèn)為是主題 + 不定長(zhǎng)數(shù)據(jù),通過事件,可以極大解耦模塊間的耦合,增強(qiáng)軟件的可測(cè)試性,還可以進(jìn)行跨平臺(tái)開發(fā)和分布式擴(kuò)展。
2、防御式編程
EventOS Nano使用了大量的斷言,對(duì)系統(tǒng)的運(yùn)行過程和用戶對(duì)EventOS Nano的使用進(jìn)行大量的檢查。我們強(qiáng)烈建議,用戶要對(duì)斷言接口函數(shù)進(jìn)行精心的設(shè)計(jì)和實(shí)現(xiàn),在實(shí)際的產(chǎn)品代碼中,依然打開斷言。這樣,軟件將以非常快的速度,收斂于穩(wěn)定狀態(tài)。
3、跨平臺(tái)開發(fā)
EventOS Nano提倡跨平臺(tái)開發(fā)。所謂跨平臺(tái)開發(fā),就是在Windows和Linux等便捷友好的開發(fā)環(huán)境里,完成絕大部分的開發(fā)工作,包括編程、調(diào)試、運(yùn)行和單元測(cè)試等工作,然后在目標(biāo)平臺(tái)上進(jìn)行最后的移植、調(diào)試和適配工作。
跨平臺(tái)的優(yōu)點(diǎn)有很多,比如開發(fā)效率非常高、工程師進(jìn)入到更多的編程領(lǐng)域和程序穩(wěn)定可靠等。EventOS Nano主要在32位MinGW平臺(tái)和Linux平臺(tái)上開發(fā)。
開發(fā)環(huán)境的搭建,見文檔開發(fā)環(huán)境搭建。當(dāng)然,也完全可以用MDK在單片機(jī)上直接開發(fā),效率稍低而已。
4、消除耦合
無論是廣播式的事件發(fā)送機(jī)制,還是發(fā)布-訂閱式的事件發(fā)送機(jī)制,實(shí)際上,都是為了消除軟件模塊間的耦合。
五、EventOS Nano項(xiàng)目的維護(hù)原則
1、但行好事,不問前程
我完全沒有考慮過EventOS Nano將來如何,也沒有考慮過所謂商業(yè)模式。我有自認(rèn)為還不錯(cuò)的工作,收入夠用,家庭溫馨而和睦。我現(xiàn)在只是想,把EventOS Nano項(xiàng)目做好,做成一個(gè)工業(yè)級(jí)的軟件產(chǎn)品,被眾多網(wǎng)友和用戶認(rèn)可,并在成千上萬的嵌入式產(chǎn)品中廣泛應(yīng)用起來。至于其他,就隨遇而安吧。
2、源碼文檔并進(jìn)
我深知完善豐富的文檔,對(duì)一個(gè)開源項(xiàng)目的重要意義。因此,我堅(jiān)持每一個(gè)特性的升級(jí),每一個(gè)BUG的修復(fù),都跟隨著相應(yīng)的文檔。讓EventOS Nano和EventOS項(xiàng)目的文檔專業(yè)化、體系化,包含用戶手冊(cè)、版本特性、原理說明、博客、例程等等。
3、單元測(cè)試優(yōu)先
嵌入式的開源項(xiàng)目,用戶最關(guān)心的,是軟件的可靠性。單元測(cè)試,是保證軟件健壯與可靠的重要手段。對(duì)于EventOS Nano這種系統(tǒng)級(jí)、框架級(jí)的軟件,穩(wěn)定性與可靠性更加重要。從EventOS Nano誕生之日起,它就是面向單元測(cè)試的。詳盡而嚴(yán)謹(jǐn)?shù)膯卧獪y(cè)試,保證了EventOS Nano將絕大多數(shù)的BUG,消除在了開發(fā)階段。EventOS Nano的每一次重構(gòu)、升級(jí)與發(fā)布,都是經(jīng)過了嚴(yán)謹(jǐn)?shù)膯卧獪y(cè)試的。
4、用戶至上,需求至上
軟件如何發(fā)展,代碼向哪個(gè)方向前進(jìn),EventOS Nano完全聽從用戶們的聲音,完全從需求出發(fā)。我們從各個(gè)渠道,微信、QQ、論壇等獲取的意見建議,都將體現(xiàn)到EventOS Nano的開發(fā)中去。
六、代碼結(jié)構(gòu)
1、核心代碼
eventos/eventos.c EventOS Nano狀態(tài)機(jī)框架的實(shí)現(xiàn)
eventos/eventos.h 頭文件
eventos/eventos_config.h 對(duì)EventOS Nano進(jìn)行配置與裁剪
2、方代碼庫(kù)
RTT Segger JLink所提供的日志庫(kù),依賴于JLink硬件。
unity 單元測(cè)試框架
3、例程代碼
freertos 對(duì)FreeRTOS的適配例程(未完成)。
posix 對(duì)符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)(如Linux、VxWork、MinGW等)的適配例程。
stm32f030 對(duì)ARM Cortex-M0芯片的裸機(jī)運(yùn)行(無RTOS)的例程。
stm32f103 對(duì)ARM Cortex-M3芯片的裸機(jī)運(yùn)行(無RTOS)的例程。
test 對(duì)源碼進(jìn)行的單元測(cè)試?yán)獭?/p>
digital_watch 電子表例程,狀態(tài)機(jī)的典型應(yīng)用。
4、tools
一些Python腳本和工具。
5、文檔
文檔包含Doxygen代碼文檔的生成路徑(未完成)、圖片、代碼相關(guān)文檔(如快速入門文檔、移植文檔、開發(fā)環(huán)境搭建說明文檔等)。
編輯:黃飛
?
評(píng)論
查看更多