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