電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 27|回復(fù): 0
收起左側(cè)

嵌入式軟件框架,一個(gè)面向單片機(jī)應(yīng)用的事件調(diào)度器。

[復(fù)制鏈接]

449

主題

449

帖子

588

積分

二級(jí)會(huì)員

Rank: 2

積分
588
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-9-9 17:50:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我是老溫,一名熱愛(ài)學(xué)習(xí)的嵌入式工程師. ?* P5 T0 k: g+ _' f
關(guān)注我,一起變得更加優(yōu)秀!) r! ^$ `8 V, R% K; t
一、EventOS是什么?
) k5 g& N5 X1 j" q6 T2 y4 ^# pEventOS,是一個(gè)面向單片機(jī)、事件驅(qū)動(dòng)的嵌入式開(kāi)發(fā)平臺(tái)。它主要有兩大技術(shù)特色:一是事件驅(qū)動(dòng),二是超輕量。: s; W6 }$ A9 J3 M  g
EventOS以及其母項(xiàng)目EventOS,目標(biāo)是開(kāi)發(fā)一個(gè)企業(yè)級(jí)的嵌入式開(kāi)發(fā)平臺(tái),以事件總線為核心,打造一個(gè)統(tǒng)一的嵌入式技術(shù)生態(tài),& n9 X4 j5 V3 p6 |/ c
為廣大企業(yè)用戶(hù)和嵌入式開(kāi)發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開(kāi)發(fā)效率的嵌入式開(kāi)發(fā)環(huán)境。
- K2 h- _1 v  XEventOS的主要特性列舉如下:
; z( P% W* I' x$ y3 u  f(1)事件總線為核心組件,靈活易用,是進(jìn)行線程(狀態(tài)機(jī))間同步或者通信的主要手段,也是對(duì)EventOS分布式特性和跨平臺(tái)開(kāi)發(fā)進(jìn)行支持的唯一手段。事件支持廣播發(fā)送,或者發(fā)布-訂閱機(jī)制兩種方式(二選一)。# n2 h; v# G8 {( n9 e
(2)全局事件隊(duì)列,摒棄每個(gè)線程(狀態(tài)機(jī))擁有自己的事件隊(duì)列的方式,只有一個(gè)全局事件隊(duì)列,極限壓縮對(duì)RAM的占用。
/ q, n7 R, \$ `(3)協(xié)作式內(nèi)核,優(yōu)點(diǎn)是不會(huì)產(chǎn)生資源競(jìng)爭(zhēng),極度可靠。
  E$ r4 t9 l2 L$ A3 Y- e(4)極度輕量,便于嵌入其他系統(tǒng),除事件總線外的所有特性(層次狀態(tài)機(jī)、平面狀態(tài)機(jī)、發(fā)布-訂閱機(jī)制、事件攜帶數(shù)據(jù)、事件橋等)均可裁剪,將資源占用降至極限,可低至ROM 1.2KB,RAM 172Byte?梢宰鳛樽酉到y(tǒng),“悄悄”嵌入到其他軟件系統(tǒng)中去。
0 o/ g6 _' B8 d. z( L, `5 K(5)功能強(qiáng)大的軟定時(shí)器,以時(shí)間事件的形式,對(duì)軟定時(shí)器功能,進(jìn)行優(yōu)雅且功能強(qiáng)大的實(shí)現(xiàn)。
' H' ]5 |/ [9 G( t) j2 C7 v6 K(6)API的設(shè)計(jì),更加簡(jiǎn)明,更加符合本土嵌入式工程師的習(xí)慣。移植方便,只需實(shí)現(xiàn)少數(shù)幾個(gè)接口函數(shù)即可。% i( H0 _# R7 e* f% R
(7)未來(lái)會(huì)使用Event Bridge(事件橋)機(jī)制與EventOS打通事件總線,以便對(duì)EventOS的分布式特性進(jìn)行支持。
$ \. _6 I+ _  t4 @% T, [0 ?(8)重點(diǎn)關(guān)注三種應(yīng)用場(chǎng)景:中小資源單片機(jī),作為模塊向其他軟件系統(tǒng)的嵌入和可靠性要求較高的嵌入式場(chǎng)景。* I  [8 s! W, V* t
EventOS的前身,曾經(jīng)讓我在過(guò)去的工作中受益匪淺,讓我非常高效的寫(xiě)出了很多可靠的程序,能力和回報(bào)都有了質(zhì)的提升。% Q  ]9 d& m: e: h
現(xiàn)在,我將以前的技術(shù)成果整理重構(gòu),在各方面都向著規(guī)范的開(kāi)源項(xiàng)目靠攏,包括源碼、注釋、文檔、單元測(cè)試和例程等等。
+ R* E1 {$ g& F& n) S# h未來(lái),EventOS這個(gè)項(xiàng)目我會(huì)一直完善下去。我的目標(biāo)是,將EventOS項(xiàng)目在2022年底前做成Gitee推薦項(xiàng)目,2024年年底前將EventOS項(xiàng)目,做成Gitee的GVP項(xiàng)目。造福更多的嵌入式工程師。
9 c9 ]1 b0 _* z# S- P
9 ?" e8 a3 `! E2 r  H$ o二、文檔與博客& I2 m% h& O  o# T" c: f
EventOS的移植和入門(mén),在documentation文件夾里,可以參考以下幾個(gè)文檔:(1)快速入門(mén)文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md
. K; c% |# @+ O/ ^& V(2)裸機(jī)移植文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md
3 }- q7 y* V/ ^% m+ G" C(3)開(kāi)發(fā)環(huán)境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md( j0 [  M/ p! b
(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.md8 ^) p/ M4 ]$ M) a2 b! S
三、為什么叫做EventOS?7 |9 l9 p2 e0 R* j/ U& o! @# g" _
EventOS真的非常輕量。全功能的EventOS目前經(jīng)MDK編譯后,框架本身占用RAM 200Byte,ROM約3.5KB(優(yōu)化等級(jí)為-O3)或4.5KB(優(yōu)化等級(jí)為-O0)。
1 h1 m- g# O; v& ]5 j& J裁剪后,最小功能的EventOS,目前經(jīng)MDK編譯后,框架本身占用RAM 172Byte,ROM約1.2KB(優(yōu)化等級(jí)為-O3)或1.5KB(優(yōu)化等級(jí)為-O0)。+ M0 \9 l! J$ _. i9 s/ A* Z
之所以叫EventOS,一是因?yàn)樗募夹g(shù)特色與核心思想,就是事件驅(qū)動(dòng);二是因?yàn)樗橇硗庖粋(gè)開(kāi)源項(xiàng)目EventOS(準(zhǔn)備中)的簡(jiǎn)化實(shí)現(xiàn),- u9 p5 e9 K% T# o* x) @7 h* H
EventOS是一個(gè)事件驅(qū)動(dòng)的、分布式的、可跨平臺(tái)開(kāi)發(fā)的嵌入式RTOS,面向32位單片機(jī)和更高處理器的嵌入式開(kāi)發(fā)平臺(tái)。
4 P9 H, n" @+ Q$ `四、EventOS主張的編程思想% p, ~9 V$ B; Y0 m0 M
事件驅(qū)動(dòng)與事件總線) B' }! T0 a) \$ L' u
事件驅(qū)動(dòng)和事件總線,是EventOS的核心,也是EventOS的核心。事件機(jī)制,與RTOS中事件概念完全不同,它更像是windows編程中的消息。
  t: s/ F) n% n8 G9 j事件,可以認(rèn)為是主題 + 不定長(zhǎng)數(shù)據(jù),通過(guò)事件,可以極大解耦模塊間的耦合,增強(qiáng)軟件的可測(cè)試性,還可以進(jìn)行跨平臺(tái)開(kāi)發(fā)和分布式擴(kuò)展。/ D$ k- w4 f. C; U% \6 P( ^" B
防御式編程
1 C, c9 f8 F, J/ R8 \  EEventOS使用了大量的斷言,對(duì)系統(tǒng)的運(yùn)行過(guò)程和用戶(hù)對(duì)EventOS的使用進(jìn)行大量的檢查。7 f5 Q& H  e0 v3 S
我們強(qiáng)烈建議,用戶(hù)要對(duì)斷言接口函數(shù)進(jìn)行精心的設(shè)計(jì)和實(shí)現(xiàn),在實(shí)際的產(chǎn)品代碼中,依然打開(kāi)斷言。這樣,軟件將以非?斓乃俣,收斂于穩(wěn)定狀態(tài)。
3 b4 ]8 D' F2 ], ~* T跨平臺(tái)開(kāi)發(fā)
2 D  T# |/ L2 F0 m6 f9 X" w) P! SEventOS提倡跨平臺(tái)開(kāi)發(fā)。所謂跨平臺(tái)開(kāi)發(fā),就是在Windows和Linux等便捷友好的開(kāi)發(fā)環(huán)境里,完成絕大部分的開(kāi)發(fā)工作,包括編程、調(diào)試、運(yùn)行和單元測(cè)試等工作,然后在目標(biāo)平臺(tái)上進(jìn)行最后的移植、調(diào)試和適配工作。0 X1 c' O. ^) I% I
跨平臺(tái)的優(yōu)點(diǎn)有很多,比如開(kāi)發(fā)效率非常高、工程師進(jìn)入到更多的編程領(lǐng)域和程序穩(wěn)定可靠等。EventOS主要在32位MinGW平臺(tái)和Linux平臺(tái)上開(kāi)發(fā)。$ P0 N& o9 `0 p# _' Y. k# X# E0 c
開(kāi)發(fā)環(huán)境的搭建,見(jiàn)文檔開(kāi)發(fā)環(huán)境搭建。當(dāng)然,也完全可以用MDK在單片機(jī)上直接開(kāi)發(fā),效率稍低而已。3 A# @0 R4 v4 m
消除耦合
! C4 r. y% D  }' j7 N無(wú)論是廣播式的事件發(fā)送機(jī)制,還是發(fā)布-訂閱式的事件發(fā)送機(jī)制,實(shí)際上,都是為了消除軟件模塊間的耦合。
/ f9 ^# A# r' e# H) }1 a# B1 Q4 w五、EventOS項(xiàng)目的維護(hù)原則
5 K5 G; y# N( g: l但行好事,不問(wèn)前程
% L* {" }3 V. F4 h, O我完全沒(méi)有考慮過(guò)EventOS將來(lái)能夠如何,而且最近EventOS的發(fā)展有點(diǎn)超出我預(yù)計(jì),我有點(diǎn)受寵若驚。1 _! R# r3 ~6 Q; g7 y* x4 L
更多的人了解EventOS是一件好事,敦促這我把EventOS項(xiàng)目盡快做好,做完善,做成一個(gè)工業(yè)級(jí)的軟件產(chǎn)品,為廣大的嵌入式工作者創(chuàng)造便利。
6 ?' O) h4 l* e* S希望EventOS最終被眾多工程師和企業(yè)認(rèn)可,并在成千上萬(wàn)的嵌入式產(chǎn)品中廣泛應(yīng)用起來(lái),那就不枉我這些年深挖技術(shù)的努力。* v9 h" L" r- f' `1 b- s
源碼文檔并進(jìn)  Z! M" Y$ n- G/ ^" e1 R5 x+ `# o
我深知完善豐富的文檔,對(duì)一個(gè)開(kāi)源項(xiàng)目的重要意義。因此,我堅(jiān)持每一個(gè)特性的升級(jí),每一個(gè)BUG的修復(fù),都跟隨著相應(yīng)的文檔。& J$ n5 i+ H" w1 s# e' c3 s% u2 x
讓EventOS和EventOS項(xiàng)目的文檔專(zhuān)業(yè)化、體系化,包含用戶(hù)手冊(cè)、版本特性、原理說(shuō)明、博客、例程等等。
& H# {. \) A! x單元測(cè)試優(yōu)先- [# _1 }8 h, X5 l( w, h7 B  [
嵌入式的開(kāi)源項(xiàng)目,用戶(hù)最關(guān)心的,是軟件的可靠性。單元測(cè)試,是保證軟件健壯與可靠的重要手段。對(duì)于EventOS這種系統(tǒng)級(jí)、框架級(jí)的軟件,穩(wěn)定性與可靠性更加重要。5 |8 u( Y0 e' ^4 q1 E" ~/ ]6 e4 l
從EventOS誕生之日起,它就是面向單元測(cè)試的。詳盡而嚴(yán)謹(jǐn)?shù)膯卧獪y(cè)試,保證了EventOS將絕大多數(shù)的BUG,消除在了開(kāi)發(fā)階段。EventOS的每一次重構(gòu)、升級(jí)與發(fā)布,都是經(jīng)過(guò)了嚴(yán)謹(jǐn)?shù)膯卧獪y(cè)試的。
9 B' d6 b+ z4 `/ E- O  M
用戶(hù)至上,需求至上  W4 \0 [& s. `9 y9 S
軟件如何發(fā)展,代碼向哪個(gè)方向前進(jìn),EventOS完全聽(tīng)從用戶(hù)們的聲音,完全從需求出發(fā)。我們從各個(gè)渠道,微信、QQ、論壇等獲取的意見(jiàn)建議,都將體現(xiàn)到EventOS的開(kāi)發(fā)中去。9 u7 ~0 Z/ d& ]6 L3 q6 l* @
六、代碼結(jié)構(gòu)2 i" B$ O% W/ L: u1 c; f
核心代碼
9 f# g  Y1 b4 x! \3 Qeventos/eventos.c EventOS狀態(tài)機(jī)框架的實(shí)現(xiàn)eventos/eventos.h 頭文件eventos/eventos_config.h 對(duì)EventOS進(jìn)行配置與裁剪! G2 x  x+ N% w+ Q
第三方代碼庫(kù)
, e' [, h, P7 k% d: K( aRTT Segger JLink所提供的日志庫(kù),依賴(lài)于JLink硬件。unity 單元測(cè)試框架
, b* E4 Y- X6 c5 r+ {例程代碼
: S* m7 t" k* R6 t3 }& Bfreertos 對(duì)FreeRTOS的適配例程(未完成)。posix 對(duì)符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)(如Linux、VxWork、MinGW等)的適配例程。stm32f030 對(duì)ARM Cortex-M0芯片的裸機(jī)運(yùn)行(無(wú)RTOS)的例程。stm32f103 對(duì)ARM Cortex-M3芯片的裸機(jī)運(yùn)行(無(wú)RTOS)的例程。test 對(duì)源碼進(jìn)行的單元測(cè)試?yán)。digital_watch 電子表例程,狀態(tài)機(jī)的典型應(yīng)用。" W" K; V* `$ i' N, n2 ?
tools
; n: H* E  `0 A  D  A, S. X一些Python腳本和工具。
- }: U/ E* t+ G; [, t文檔' V. I  W* w* H" [# V5 {6 ?
文檔包含Doxygen代碼文檔的生成路徑(未完成)、圖片、代碼相關(guān)文檔(如快速入門(mén)文檔、移植文檔、開(kāi)發(fā)環(huán)境搭建說(shuō)明文檔等)。8 ~8 ?( l8 x0 G
來(lái)自: https://gitee.com/event-os/eventos
8 E: A' P. r8 ^- }$ `: m-END-3 I6 j2 q' p, B: ~9 p
往期推薦:點(diǎn)擊圖片即可跳轉(zhuǎn)閱讀
7 D' E: q# e) T( ]0 S                                                        " M% {5 S" Z7 c% R  m
                                                                : S- C' x$ q2 C6 j6 _" J  @
                                                                        ( O8 l! G1 v3 V4 e  P7 r' `/ S* C0 D
                                                                               
- C. X8 H' M4 H& J$ J " }, Q& c6 u& T* J6 k( h8 r* g
                                                                               
* @) Z* F4 q! o* U5 k' n                                                                                        現(xiàn)場(chǎng)實(shí)測(cè),用數(shù)據(jù)說(shuō)話,星閃通信距離突破3.3公里!+ d  a$ S. k, r3 `! h+ ?4 F
                                                        4 t- j. a- |) ^4 j* O4 y4 i
                                                               
0 e+ Z; g2 J6 g  m                                                                       
4 e9 F+ Q+ X! I2 W                                                                                4 a. i% ?% ~, T
5 q& l; z  V' s6 j7 M  Q2 g
                                                                                & K/ p% r, X, s5 z* T" i7 Y
                                                                                        樹(shù)莓派第二代微控制器 RP2350,終于拿到手了!~
/ D$ g, B. {7 x( n0 \% C                                                               
8 F! e! L3 ~: r" o                                                                       
2 s' c# J" J9 {3 f1 [/ _8 Y                                                                                4 G; }( D, t7 l) U7 d: P5 ]
' ^6 P8 A, ^- ~1 p) b4 R$ c9 F
                                                                                ; I" _! j* i) C9 n- D5 S
                                                                                        跟嵌入式技術(shù)相關(guān)的熱門(mén)應(yīng)用,全都在這里了!% O; y% h" v4 h# I+ g6 x% @
                                                                               
) ]9 i* o" z; y                                                                        + M& I  M& f6 q1 p4 R3 g
                                                                6 `/ a+ S2 `0 e8 T% Y
                                                        我是老溫,一名熱愛(ài)學(xué)習(xí)的嵌入式工程師" [5 v& b6 z; K" L0 l$ _
關(guān)注我,一起變得更加優(yōu)秀!

發(fā)表回復(fù)

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


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