電子產業(yè)一站式賦能平臺

PCB聯(lián)盟網

搜索
查看: 24|回復: 0
收起左側

嵌入式軟件框架,一個面向單片機應用的事件調度器。

[復制鏈接]

449

主題

449

帖子

586

積分

二級會員

Rank: 2

積分
586
跳轉到指定樓層
樓主
發(fā)表于 2024-9-9 17:50:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我是老溫,一名熱愛學習的嵌入式工程師, a! w3 W# _0 l8 _  @
關注我,一起變得更加優(yōu)秀!- ]! W4 ~, i9 z$ q* {) s$ V+ N
一、EventOS是什么?
- \/ }) C$ @1 v, F* UEventOS,是一個面向單片機、事件驅動的嵌入式開發(fā)平臺。它主要有兩大技術特色:一是事件驅動,二是超輕量。
5 [) ~* @/ q  G7 qEventOS以及其母項目EventOS,目標是開發(fā)一個企業(yè)級的嵌入式開發(fā)平臺,以事件總線為核心,打造一個統(tǒng)一的嵌入式技術生態(tài),1 W" n5 b$ L$ ^3 H
為廣大企業(yè)用戶和嵌入式開發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開發(fā)效率的嵌入式開發(fā)環(huán)境。
# H+ k+ `, N" q5 `! B8 P* J. {: S2 WEventOS的主要特性列舉如下:  p; q/ r  J+ N' e. I; b
(1)事件總線為核心組件,靈活易用,是進行線程(狀態(tài)機)間同步或者通信的主要手段,也是對EventOS分布式特性和跨平臺開發(fā)進行支持的唯一手段。事件支持廣播發(fā)送,或者發(fā)布-訂閱機制兩種方式(二選一)。# o" O4 q% j" {% J
(2)全局事件隊列,摒棄每個線程(狀態(tài)機)擁有自己的事件隊列的方式,只有一個全局事件隊列,極限壓縮對RAM的占用。3 k, R  i/ \- W9 W& d7 o
(3)協(xié)作式內核,優(yōu)點是不會產生資源競爭,極度可靠。* S0 y, A. x7 j4 R
(4)極度輕量,便于嵌入其他系統(tǒng),除事件總線外的所有特性(層次狀態(tài)機、平面狀態(tài)機、發(fā)布-訂閱機制、事件攜帶數(shù)據、事件橋等)均可裁剪,將資源占用降至極限,可低至ROM 1.2KB,RAM 172Byte。可以作為子系統(tǒng),“悄悄”嵌入到其他軟件系統(tǒng)中去。
6 O: J7 }/ R9 ~# a$ ](5)功能強大的軟定時器,以時間事件的形式,對軟定時器功能,進行優(yōu)雅且功能強大的實現(xiàn)。7 Q6 Q5 U6 s1 Z; K
(6)API的設計,更加簡明,更加符合本土嵌入式工程師的習慣。移植方便,只需實現(xiàn)少數(shù)幾個接口函數(shù)即可。6 e, A' U7 F1 G: P3 i5 S; Y/ j
(7)未來會使用Event Bridge(事件橋)機制與EventOS打通事件總線,以便對EventOS的分布式特性進行支持。' r7 n$ |! z: H4 t2 I
(8)重點關注三種應用場景:中小資源單片機,作為模塊向其他軟件系統(tǒng)的嵌入和可靠性要求較高的嵌入式場景。/ A9 |' p4 [$ b0 n
EventOS的前身,曾經讓我在過去的工作中受益匪淺,讓我非常高效的寫出了很多可靠的程序,能力和回報都有了質的提升。7 Q7 X% e, Z. g  W: q
現(xiàn)在,我將以前的技術成果整理重構,在各方面都向著規(guī)范的開源項目靠攏,包括源碼、注釋、文檔、單元測試和例程等等。, I; |( a0 E* K. u
未來,EventOS這個項目我會一直完善下去。我的目標是,將EventOS項目在2022年底前做成Gitee推薦項目,2024年年底前將EventOS項目,做成Gitee的GVP項目。造福更多的嵌入式工程師。
) n: I( X9 H' C7 `! L2 j* a- a/ m! G & o. W7 B+ a: a( g$ [
二、文檔與博客( L, u5 X- x1 |' b1 t$ A: t+ g3 O
EventOS的移植和入門,在documentation文件夾里,可以參考以下幾個文檔:(1)快速入門文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md
" g$ o' m6 {6 Y# |7 U" [2 ]% J(2)裸機移植文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md
6 ^3 m$ H& _& G7 ^, Q(3)開發(fā)環(huán)境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md  d. }4 J& Q2 V5 H- h
(4)如何理解事件https://gitee.com/event-os/eventos/blob/master/blog/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E4%BA%8B%E4%BB%B6.md
4 i2 j+ H/ X5 ]% t  L0 V) G三、為什么叫做EventOS?' p+ k1 m# u; F# H
EventOS真的非常輕量。全功能的EventOS目前經MDK編譯后,框架本身占用RAM 200Byte,ROM約3.5KB(優(yōu)化等級為-O3)或4.5KB(優(yōu)化等級為-O0)。
4 t8 [5 r( |8 `+ i! f3 o0 I裁剪后,最小功能的EventOS,目前經MDK編譯后,框架本身占用RAM 172Byte,ROM約1.2KB(優(yōu)化等級為-O3)或1.5KB(優(yōu)化等級為-O0)。) w3 d! N1 u* q5 B
之所以叫EventOS,一是因為它的技術特色與核心思想,就是事件驅動;二是因為它是另外一個開源項目EventOS(準備中)的簡化實現(xiàn),' C& E4 K6 u5 c2 V
EventOS是一個事件驅動的、分布式的、可跨平臺開發(fā)的嵌入式RTOS,面向32位單片機和更高處理器的嵌入式開發(fā)平臺。
$ M( v. c4 Y! j2 }) y, \四、EventOS主張的編程思想
# V. `  ]8 P! O1 W$ v. i3 t0 W( ~事件驅動與事件總線; \$ O6 ?; j" K
事件驅動和事件總線,是EventOS的核心,也是EventOS的核心。事件機制,與RTOS中事件概念完全不同,它更像是windows編程中的消息。
% a( l5 E* N4 w$ M+ ~& x* v% \事件,可以認為是主題 + 不定長數(shù)據,通過事件,可以極大解耦模塊間的耦合,增強軟件的可測試性,還可以進行跨平臺開發(fā)和分布式擴展。0 V! N$ q9 I3 f, V# j
防御式編程/ G) U  ?0 M; \( ?; X
EventOS使用了大量的斷言,對系統(tǒng)的運行過程和用戶對EventOS的使用進行大量的檢查。  g9 g! K6 {. q8 ^: ^7 {9 O. j
我們強烈建議,用戶要對斷言接口函數(shù)進行精心的設計和實現(xiàn),在實際的產品代碼中,依然打開斷言。這樣,軟件將以非?斓乃俣龋諗坑诜(wěn)定狀態(tài)。- s8 }8 K! u1 D1 o. \6 d
跨平臺開發(fā)  z, b# P, T! A8 H& Y9 ^
EventOS提倡跨平臺開發(fā)。所謂跨平臺開發(fā),就是在Windows和Linux等便捷友好的開發(fā)環(huán)境里,完成絕大部分的開發(fā)工作,包括編程、調試、運行和單元測試等工作,然后在目標平臺上進行最后的移植、調試和適配工作。! _9 s# L6 l4 q' v0 i7 F) s, S
跨平臺的優(yōu)點有很多,比如開發(fā)效率非常高、工程師進入到更多的編程領域和程序穩(wěn)定可靠等。EventOS主要在32位MinGW平臺和Linux平臺上開發(fā)。
. q7 ^+ n) s- _' `- d, L0 y. _4 B開發(fā)環(huán)境的搭建,見文檔開發(fā)環(huán)境搭建。當然,也完全可以用MDK在單片機上直接開發(fā),效率稍低而已。$ b6 i+ H, w- a: l; A' S
消除耦合6 I4 {% e- C  w7 V8 f
無論是廣播式的事件發(fā)送機制,還是發(fā)布-訂閱式的事件發(fā)送機制,實際上,都是為了消除軟件模塊間的耦合。+ ]" t8 Y5 E% j; q4 u6 P
五、EventOS項目的維護原則) l0 w( i7 l3 u# D- v* Y' q' c, |+ l
但行好事,不問前程+ K8 g. i- A9 x5 J+ y. F- R
我完全沒有考慮過EventOS將來能夠如何,而且最近EventOS的發(fā)展有點超出我預計,我有點受寵若驚。
1 V" d) B, b( E* B4 O; D, ~" z更多的人了解EventOS是一件好事,敦促這我把EventOS項目盡快做好,做完善,做成一個工業(yè)級的軟件產品,為廣大的嵌入式工作者創(chuàng)造便利。
$ L2 n: s% S; `# e- o希望EventOS最終被眾多工程師和企業(yè)認可,并在成千上萬的嵌入式產品中廣泛應用起來,那就不枉我這些年深挖技術的努力。9 w. w  {# @2 m8 s" y: G: Z- H
源碼文檔并進6 C" ?% W5 F; J) ^, ?
我深知完善豐富的文檔,對一個開源項目的重要意義。因此,我堅持每一個特性的升級,每一個BUG的修復,都跟隨著相應的文檔。
, ^. N* T0 ?& l; Y4 s讓EventOS和EventOS項目的文檔專業(yè)化、體系化,包含用戶手冊、版本特性、原理說明、博客、例程等等。
0 a6 r* N5 q+ k! J( b  d單元測試優(yōu)先
5 @3 N: {5 E$ V; U2 `" W嵌入式的開源項目,用戶最關心的,是軟件的可靠性。單元測試,是保證軟件健壯與可靠的重要手段。對于EventOS這種系統(tǒng)級、框架級的軟件,穩(wěn)定性與可靠性更加重要。1 p# R4 |  ?' a4 a
從EventOS誕生之日起,它就是面向單元測試的。詳盡而嚴謹?shù)膯卧獪y試,保證了EventOS將絕大多數(shù)的BUG,消除在了開發(fā)階段。EventOS的每一次重構、升級與發(fā)布,都是經過了嚴謹?shù)膯卧獪y試的。
( t/ ]6 R- ]0 c3 ^" c& a* X
用戶至上,需求至上( S8 l# m2 E! @/ J0 \
軟件如何發(fā)展,代碼向哪個方向前進,EventOS完全聽從用戶們的聲音,完全從需求出發(fā)。我們從各個渠道,微信、QQ、論壇等獲取的意見建議,都將體現(xiàn)到EventOS的開發(fā)中去。5 U7 a0 I2 s% p2 w* \5 j! _
六、代碼結構: T: h9 T1 {' J+ j- J$ R
核心代碼
% v2 d2 W1 Y7 u. c4 {& r! heventos/eventos.c EventOS狀態(tài)機框架的實現(xiàn)eventos/eventos.h 頭文件eventos/eventos_config.h 對EventOS進行配置與裁剪
" z! y. L# z8 K$ v, K第三方代碼庫6 S& ?! |  z% x) l
RTT Segger JLink所提供的日志庫,依賴于JLink硬件。unity 單元測試框架
0 v1 ^) D1 [# G, r7 s: H例程代碼* c, z7 Z6 r7 y3 B* e! ?, X/ t0 t* z( P$ O
freertos 對FreeRTOS的適配例程(未完成)。posix 對符合POSIX標準的操作系統(tǒng)(如Linux、VxWork、MinGW等)的適配例程。stm32f030 對ARM Cortex-M0芯片的裸機運行(無RTOS)的例程。stm32f103 對ARM Cortex-M3芯片的裸機運行(無RTOS)的例程。test 對源碼進行的單元測試例程。digital_watch 電子表例程,狀態(tài)機的典型應用。# z; m' c" @& L0 R: v/ @$ v( y
tools
5 j  O1 L& b( [  [一些Python腳本和工具。( a+ v; q! E- @* C" f
文檔1 I+ S/ j6 b; P6 E
文檔包含Doxygen代碼文檔的生成路徑(未完成)、圖片、代碼相關文檔(如快速入門文檔、移植文檔、開發(fā)環(huán)境搭建說明文檔等)。
& G: E" i  u; y. O* O來自: https://gitee.com/event-os/eventos: s$ R  F! N6 M, Z- U# }
-END-& E8 N6 _2 Q' n5 d6 ^
往期推薦:點擊圖片即可跳轉閱讀
; F! T1 S0 H/ V& o! H% _                                                        ! y9 q  E" b; u5 k/ C- i
                                                                7 q8 e6 G+ }' E( d7 T
                                                                       
1 W7 @1 t0 c/ s* g' Y                                                                               
8 F3 Q* t$ ]. e1 i9 o
5 P/ K1 l) m) E) f3 i                                                                                4 E% ?) w/ A! L
                                                                                        現(xiàn)場實測,用數(shù)據說話,星閃通信距離突破3.3公里!
' v: v* W6 r' S" t                                                       
2 H, L* r: d4 `+ Q) L3 ]& O2 E                                                                4 G% L; F: j& N1 y" W* f
                                                                        - z: G+ g' [2 H9 y- h7 @/ I8 [' G
                                                                                8 C! B3 z$ @' X" G& D. P
$ K8 G% i6 N) F
                                                                                8 P* b/ e, w! O! ^: S- j
                                                                                        樹莓派第二代微控制器 RP2350,終于拿到手了!~5 u: ]% i/ ^2 g, F8 \% z
                                                               
5 ]4 \. m+ G7 D! V                                                                       
3 W0 {1 ~# W* L                                                                               
( ]1 m6 p. B$ q1 [3 V 9 D, d: E/ ?6 E0 H3 g8 b5 Z
                                                                                9 j: D+ V4 H! h
                                                                                        跟嵌入式技術相關的熱門應用,全都在這里了!
% X% M( M4 {2 b% s  J. W* h& c                                                                               
. S: J" s/ w  [3 V, G/ h# v4 |                                                                        / j7 R1 v; ?4 _
                                                                * r5 @6 V9 v, [
                                                        我是老溫,一名熱愛學習的嵌入式工程師5 `' c) S/ g' U7 o: D
關注我,一起變得更加優(yōu)秀!
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表