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

PCB聯盟網

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

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

[復制鏈接]

449

主題

449

帖子

588

積分

二級會員

Rank: 2

積分
588
跳轉到指定樓層
樓主
發(fā)表于 2024-9-9 17:50:00 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
我是老溫,一名熱愛學習的嵌入式工程師
9 x. Y, E( j8 d; V關注我,一起變得更加優(yōu)秀!2 s, @/ j) }; ]
一、EventOS是什么?, Q4 d* L( z) \4 L4 V6 n' ~
EventOS,是一個面向單片機、事件驅動的嵌入式開發(fā)平臺。它主要有兩大技術特色:一是事件驅動,二是超輕量。) J4 X& U: `. c' R8 U
EventOS以及其母項目EventOS,目標是開發(fā)一個企業(yè)級的嵌入式開發(fā)平臺,以事件總線為核心,打造一個統一的嵌入式技術生態(tài),2 S+ G% i; N1 H4 n; v& W1 p
為廣大企業(yè)用戶和嵌入式開發(fā)者們,提供搞可靠性的、高性能的、現代且高開發(fā)效率的嵌入式開發(fā)環(huán)境。6 h2 ~6 w, F! n, E/ {) o
EventOS的主要特性列舉如下:
6 y/ ~; V1 @/ F: k(1)事件總線為核心組件,靈活易用,是進行線程(狀態(tài)機)間同步或者通信的主要手段,也是對EventOS分布式特性和跨平臺開發(fā)進行支持的唯一手段。事件支持廣播發(fā)送,或者發(fā)布-訂閱機制兩種方式(二選一)。
$ O8 W/ W9 e# U- s6 o& G+ p3 _(2)全局事件隊列,摒棄每個線程(狀態(tài)機)擁有自己的事件隊列的方式,只有一個全局事件隊列,極限壓縮對RAM的占用。" }( `$ J  K! U* p1 i
(3)協作式內核,優(yōu)點是不會產生資源競爭,極度可靠。9 x2 t8 _) q% f
(4)極度輕量,便于嵌入其他系統,除事件總線外的所有特性(層次狀態(tài)機、平面狀態(tài)機、發(fā)布-訂閱機制、事件攜帶數據、事件橋等)均可裁剪,將資源占用降至極限,可低至ROM 1.2KB,RAM 172Byte?梢宰鳛樽酉到y,“悄悄”嵌入到其他軟件系統中去。0 ?! h( C4 a1 a7 A1 P
(5)功能強大的軟定時器,以時間事件的形式,對軟定時器功能,進行優(yōu)雅且功能強大的實現。
2 {' e5 q/ }8 ^3 Z& p& G  M4 S(6)API的設計,更加簡明,更加符合本土嵌入式工程師的習慣。移植方便,只需實現少數幾個接口函數即可。
- C: s6 A- c, L3 A3 b& L7 s(7)未來會使用Event Bridge(事件橋)機制與EventOS打通事件總線,以便對EventOS的分布式特性進行支持。, s. g; p6 w1 n# p, g
(8)重點關注三種應用場景:中小資源單片機,作為模塊向其他軟件系統的嵌入和可靠性要求較高的嵌入式場景。* Y. ^9 V- c1 s
EventOS的前身,曾經讓我在過去的工作中受益匪淺,讓我非常高效的寫出了很多可靠的程序,能力和回報都有了質的提升。
9 W7 P$ n$ T7 E現在,我將以前的技術成果整理重構,在各方面都向著規(guī)范的開源項目靠攏,包括源碼、注釋、文檔、單元測試和例程等等。, U. E5 o) ^% }2 V
未來,EventOS這個項目我會一直完善下去。我的目標是,將EventOS項目在2022年底前做成Gitee推薦項目,2024年年底前將EventOS項目,做成Gitee的GVP項目。造福更多的嵌入式工程師。! I7 _8 k, f: }! R* Z1 }
/ U$ p4 U2 c$ S4 }9 H
二、文檔與博客- P$ N& J- f# N: s! L$ {
EventOS的移植和入門,在documentation文件夾里,可以參考以下幾個文檔:(1)快速入門文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md
  D" q; u$ {( F3 b* o3 M* H(2)裸機移植文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md  ]8 e9 X* q% }* p. [& i9 X3 E/ z
(3)開發(fā)環(huán)境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md
9 L5 X" O& i) Y+ a(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
5 u8 I0 U2 a5 T% r+ ?7 c" P三、為什么叫做EventOS?& V0 R8 P0 T3 M8 R3 ?
EventOS真的非常輕量。全功能的EventOS目前經MDK編譯后,框架本身占用RAM 200Byte,ROM約3.5KB(優(yōu)化等級為-O3)或4.5KB(優(yōu)化等級為-O0)。! |; V3 |, X  y+ P- X, H. L  L
裁剪后,最小功能的EventOS,目前經MDK編譯后,框架本身占用RAM 172Byte,ROM約1.2KB(優(yōu)化等級為-O3)或1.5KB(優(yōu)化等級為-O0)。! Q5 J' c1 V: y. r* T; D$ c
之所以叫EventOS,一是因為它的技術特色與核心思想,就是事件驅動;二是因為它是另外一個開源項目EventOS(準備中)的簡化實現,. L: S! b4 u, C" e2 \! z
EventOS是一個事件驅動的、分布式的、可跨平臺開發(fā)的嵌入式RTOS,面向32位單片機和更高處理器的嵌入式開發(fā)平臺。4 S' _% W  s3 s( O6 o9 v& R3 o
四、EventOS主張的編程思想
* d) Z' T4 U5 @, M" L事件驅動與事件總線( R3 T: w" v6 N2 R1 q
事件驅動和事件總線,是EventOS的核心,也是EventOS的核心。事件機制,與RTOS中事件概念完全不同,它更像是windows編程中的消息。* Y9 X, n3 g- E) A6 k
事件,可以認為是主題 + 不定長數據,通過事件,可以極大解耦模塊間的耦合,增強軟件的可測試性,還可以進行跨平臺開發(fā)和分布式擴展。
! j; O& ^$ p& i2 q防御式編程
4 o" y0 X' b+ ^) c0 E, xEventOS使用了大量的斷言,對系統的運行過程和用戶對EventOS的使用進行大量的檢查。; \- z. k6 v$ y; Z8 V
我們強烈建議,用戶要對斷言接口函數進行精心的設計和實現,在實際的產品代碼中,依然打開斷言。這樣,軟件將以非?斓乃俣,收斂于穩(wěn)定狀態(tài)。4 L, {5 ]# k# b3 b' Q# B
跨平臺開發(fā)1 e- E" A% u; q% d: }
EventOS提倡跨平臺開發(fā)。所謂跨平臺開發(fā),就是在Windows和Linux等便捷友好的開發(fā)環(huán)境里,完成絕大部分的開發(fā)工作,包括編程、調試、運行和單元測試等工作,然后在目標平臺上進行最后的移植、調試和適配工作。
/ C2 O" I  j4 g! `8 L7 [. A# v6 f跨平臺的優(yōu)點有很多,比如開發(fā)效率非常高、工程師進入到更多的編程領域和程序穩(wěn)定可靠等。EventOS主要在32位MinGW平臺和Linux平臺上開發(fā)。
, H1 L& A2 Q+ K開發(fā)環(huán)境的搭建,見文檔開發(fā)環(huán)境搭建。當然,也完全可以用MDK在單片機上直接開發(fā),效率稍低而已。
/ z% o' p: h7 ?5 B) v7 z! E1 k消除耦合5 Y0 n  v" `1 [& H$ J# m' @
無論是廣播式的事件發(fā)送機制,還是發(fā)布-訂閱式的事件發(fā)送機制,實際上,都是為了消除軟件模塊間的耦合。& x* w" j( j5 W  V: `3 b& T
五、EventOS項目的維護原則2 D- b7 c& v" H1 l; N  Y" Q) R
但行好事,不問前程9 I9 @, }! A/ Z2 o% J6 B7 G8 v
我完全沒有考慮過EventOS將來能夠如何,而且最近EventOS的發(fā)展有點超出我預計,我有點受寵若驚。( D  @9 O: U; l/ ?
更多的人了解EventOS是一件好事,敦促這我把EventOS項目盡快做好,做完善,做成一個工業(yè)級的軟件產品,為廣大的嵌入式工作者創(chuàng)造便利。7 h+ }0 n) R: c
希望EventOS最終被眾多工程師和企業(yè)認可,并在成千上萬的嵌入式產品中廣泛應用起來,那就不枉我這些年深挖技術的努力。
/ W" ^9 ~0 |8 f4 N! a源碼文檔并進. G1 b6 X$ `, J$ {, w
我深知完善豐富的文檔,對一個開源項目的重要意義。因此,我堅持每一個特性的升級,每一個BUG的修復,都跟隨著相應的文檔。) V. J0 f/ f  d0 ~$ |; \
讓EventOS和EventOS項目的文檔專業(yè)化、體系化,包含用戶手冊、版本特性、原理說明、博客、例程等等。* [: j" b/ q4 _/ ]; ~) V; s
單元測試優(yōu)先; q) Q4 W  Z  R4 G
嵌入式的開源項目,用戶最關心的,是軟件的可靠性。單元測試,是保證軟件健壯與可靠的重要手段。對于EventOS這種系統級、框架級的軟件,穩(wěn)定性與可靠性更加重要。
* _& f( O, s6 k6 @' y: V從EventOS誕生之日起,它就是面向單元測試的。詳盡而嚴謹的單元測試,保證了EventOS將絕大多數的BUG,消除在了開發(fā)階段。EventOS的每一次重構、升級與發(fā)布,都是經過了嚴謹的單元測試的。9 T0 ]/ y/ ~1 _+ l+ @4 i/ Q
用戶至上,需求至上
, A( R- v/ T: ^( `軟件如何發(fā)展,代碼向哪個方向前進,EventOS完全聽從用戶們的聲音,完全從需求出發(fā)。我們從各個渠道,微信、QQ、論壇等獲取的意見建議,都將體現到EventOS的開發(fā)中去。
; o: T1 ^, Z" N六、代碼結構
& r* f8 }; f* |核心代碼  h# s7 `" G; N  E
eventos/eventos.c EventOS狀態(tài)機框架的實現eventos/eventos.h 頭文件eventos/eventos_config.h 對EventOS進行配置與裁剪
% j/ Z3 I5 E& o8 s' b第三方代碼庫. N1 l4 [) M$ C7 N- _! }7 t. _/ s6 B7 _
RTT Segger JLink所提供的日志庫,依賴于JLink硬件。unity 單元測試框架$ A' o  A1 t0 _! u% G* w, j9 z% k
例程代碼
0 r' d" [" o6 C/ Dfreertos 對FreeRTOS的適配例程(未完成)。posix 對符合POSIX標準的操作系統(如Linux、VxWork、MinGW等)的適配例程。stm32f030 對ARM Cortex-M0芯片的裸機運行(無RTOS)的例程。stm32f103 對ARM Cortex-M3芯片的裸機運行(無RTOS)的例程。test 對源碼進行的單元測試例程。digital_watch 電子表例程,狀態(tài)機的典型應用。4 ~9 ~' t0 Z0 p$ c# u. t: A  X
tools' f$ ]0 e2 O# g, i8 i! S
一些Python腳本和工具。
  b1 a0 ^) ~' k. r! y4 l. _文檔
- D: G  G  j& `5 J8 N4 K文檔包含Doxygen代碼文檔的生成路徑(未完成)、圖片、代碼相關文檔(如快速入門文檔、移植文檔、開發(fā)環(huán)境搭建說明文檔等)。
. C. A& t; I/ h( H來自: https://gitee.com/event-os/eventos0 U4 c& M, j. O% o
-END-
( I7 Z& B8 V6 P: z' _" k往期推薦:點擊圖片即可跳轉閱讀
* Y; w( k" U, m! ~/ y: x                                                        " I  L* }% `! k9 Q! U! u7 s
                                                               
& E) u4 A+ [3 F8 I                                                                        8 M3 z& e0 e7 f4 O3 k, \5 m
                                                                                " T9 v8 V- ~/ J

3 d- q' _6 z3 N% E                                                                                3 I! h: B: f8 G& L2 o. \
                                                                                        現場實測,用數據說話,星閃通信距離突破3.3公里!
3 s3 C; q/ s* w! J                                                        ' `2 l' P% b2 Q4 U9 H  ^
                                                                8 [  Q+ ]- P* ]; ?. B; b' a- s8 Z
                                                                        & A+ O; }# v8 ~
                                                                               
3 O. \2 M: O9 I- o ! E1 t( N- }8 f  @8 I. u2 X
                                                                                8 |# B$ s% c* F( b' O( D
                                                                                        樹莓派第二代微控制器 RP2350,終于拿到手了!~- k* ]' p/ |( |& x6 o8 A4 v
                                                                - M6 W) a* E7 o! {) u  O( Y! [
                                                                       
# j; ]8 a% ?0 J( n; m                                                                               
. Z4 J6 c0 c* m* ~  i
  x9 S7 ]) \8 m  f1 b* U0 j                                                                               
1 v8 [( O9 V: p                                                                                        跟嵌入式技術相關的熱門應用,全都在這里了!
. X6 u4 J: g* B" ]& N) d                                                                                9 |( Z. R) _& Y; e; X) a  S
                                                                        % K9 |* j# p$ q2 b5 P" F
                                                               
3 t0 z5 S) q/ F  M( ?& D) ?                                                        我是老溫,一名熱愛學習的嵌入式工程師
2 x  v$ `: E. ^. B/ v& v8 }關注我,一起變得更加優(yōu)秀!
回復

使用道具 舉報

發(fā)表回復

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

本版積分規(guī)則

關閉

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


聯系客服 關注微信 下載APP 返回頂部 返回列表