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

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

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

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

[復(fù)制鏈接]

449

主題

449

帖子

588

積分

二級會員

Rank: 2

積分
588
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-9-9 17:50:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師) c  X0 }: W+ E
關(guān)注我,一起變得更加優(yōu)秀!9 l# a; Y4 n: I
一、EventOS是什么?# A$ h* N9 _6 t; h
EventOS,是一個面向單片機、事件驅(qū)動的嵌入式開發(fā)平臺。它主要有兩大技術(shù)特色:一是事件驅(qū)動,二是超輕量。5 P2 F+ Z9 o2 [$ `, T) S
EventOS以及其母項目EventOS,目標(biāo)是開發(fā)一個企業(yè)級的嵌入式開發(fā)平臺,以事件總線為核心,打造一個統(tǒng)一的嵌入式技術(shù)生態(tài),
$ u8 U0 O" i, m為廣大企業(yè)用戶和嵌入式開發(fā)者們,提供搞可靠性的、高性能的、現(xiàn)代且高開發(fā)效率的嵌入式開發(fā)環(huán)境。. M3 u3 c# w( |# I, Y' V
EventOS的主要特性列舉如下:
( }2 X3 V9 Q, M5 D! o(1)事件總線為核心組件,靈活易用,是進(jìn)行線程(狀態(tài)機)間同步或者通信的主要手段,也是對EventOS分布式特性和跨平臺開發(fā)進(jìn)行支持的唯一手段。事件支持廣播發(fā)送,或者發(fā)布-訂閱機制兩種方式(二選一)。
' j/ D$ B9 J# ~9 B& X; J(2)全局事件隊列,摒棄每個線程(狀態(tài)機)擁有自己的事件隊列的方式,只有一個全局事件隊列,極限壓縮對RAM的占用。; H3 o  M+ p2 n5 ~
(3)協(xié)作式內(nèi)核,優(yōu)點是不會產(chǎn)生資源競爭,極度可靠。
9 k) \+ ~( y0 H( g(4)極度輕量,便于嵌入其他系統(tǒng),除事件總線外的所有特性(層次狀態(tài)機、平面狀態(tài)機、發(fā)布-訂閱機制、事件攜帶數(shù)據(jù)、事件橋等)均可裁剪,將資源占用降至極限,可低至ROM 1.2KB,RAM 172Byte?梢宰鳛樽酉到y(tǒng),“悄悄”嵌入到其他軟件系統(tǒng)中去。
8 S7 h! \6 P% P+ K7 Q5 a(5)功能強大的軟定時器,以時間事件的形式,對軟定時器功能,進(jìn)行優(yōu)雅且功能強大的實現(xiàn)。
4 I9 y) A2 z8 r& k3 c2 c+ T" Z8 m(6)API的設(shè)計,更加簡明,更加符合本土嵌入式工程師的習(xí)慣。移植方便,只需實現(xiàn)少數(shù)幾個接口函數(shù)即可。
0 ?1 r+ c' F- y3 G(7)未來會使用Event Bridge(事件橋)機制與EventOS打通事件總線,以便對EventOS的分布式特性進(jìn)行支持。) A1 h2 g+ P- t( y4 z% z
(8)重點關(guān)注三種應(yīng)用場景:中小資源單片機,作為模塊向其他軟件系統(tǒng)的嵌入和可靠性要求較高的嵌入式場景。. l1 \7 G% F. }2 _
EventOS的前身,曾經(jīng)讓我在過去的工作中受益匪淺,讓我非常高效的寫出了很多可靠的程序,能力和回報都有了質(zhì)的提升。  a7 M6 q! ]2 P
現(xiàn)在,我將以前的技術(shù)成果整理重構(gòu),在各方面都向著規(guī)范的開源項目靠攏,包括源碼、注釋、文檔、單元測試和例程等等。
! m+ ~9 \$ e! `8 c! u未來,EventOS這個項目我會一直完善下去。我的目標(biāo)是,將EventOS項目在2022年底前做成Gitee推薦項目,2024年年底前將EventOS項目,做成Gitee的GVP項目。造福更多的嵌入式工程師。) L6 r8 }; r3 t
# S3 {- F" ]% E/ ], K; i
二、文檔與博客. n# F0 I- g  ], s8 B
EventOS的移植和入門,在documentation文件夾里,可以參考以下幾個文檔:(1)快速入門文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md
- Q3 j5 Q' T7 G(2)裸機移植文檔https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md
( ?# \! R+ [) {" A/ ~(3)開發(fā)環(huán)境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md+ C/ ~( F" p, r- X: O
(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
3 n! Z' y, ?% ?0 A% ~+ X三、為什么叫做EventOS?
. c' x) x1 M. b7 c6 Z8 W8 P4 ZEventOS真的非常輕量。全功能的EventOS目前經(jīng)MDK編譯后,框架本身占用RAM 200Byte,ROM約3.5KB(優(yōu)化等級為-O3)或4.5KB(優(yōu)化等級為-O0)。
; P; M/ n+ T4 y' S+ S+ \) g2 j& ]8 U裁剪后,最小功能的EventOS,目前經(jīng)MDK編譯后,框架本身占用RAM 172Byte,ROM約1.2KB(優(yōu)化等級為-O3)或1.5KB(優(yōu)化等級為-O0)。. ^3 u% _3 Z; n' O  ^7 f
之所以叫EventOS,一是因為它的技術(shù)特色與核心思想,就是事件驅(qū)動;二是因為它是另外一個開源項目EventOS(準(zhǔn)備中)的簡化實現(xiàn),
3 }% v& b8 {2 y4 g+ H( MEventOS是一個事件驅(qū)動的、分布式的、可跨平臺開發(fā)的嵌入式RTOS,面向32位單片機和更高處理器的嵌入式開發(fā)平臺。
) v2 B" F  [: }3 [% P6 Q0 i) R1 [四、EventOS主張的編程思想
, R0 a2 J4 I4 W* ~事件驅(qū)動與事件總線
6 C% S, y9 K& Z' c2 \; |事件驅(qū)動和事件總線,是EventOS的核心,也是EventOS的核心。事件機制,與RTOS中事件概念完全不同,它更像是windows編程中的消息。! s& _0 a& q1 Q2 k0 ]1 T, V4 a. w# f
事件,可以認(rèn)為是主題 + 不定長數(shù)據(jù),通過事件,可以極大解耦模塊間的耦合,增強軟件的可測試性,還可以進(jìn)行跨平臺開發(fā)和分布式擴(kuò)展。& X2 @: L" {) ^, Y2 P) E& B/ N. I
防御式編程
* b1 f. v7 z3 W& k/ S$ JEventOS使用了大量的斷言,對系統(tǒng)的運行過程和用戶對EventOS的使用進(jìn)行大量的檢查。' @' H( a) ?% ^2 m5 B
我們強烈建議,用戶要對斷言接口函數(shù)進(jìn)行精心的設(shè)計和實現(xiàn),在實際的產(chǎn)品代碼中,依然打開斷言。這樣,軟件將以非常快的速度,收斂于穩(wěn)定狀態(tài)。2 j. |9 w8 J( W4 p) g8 ^: n3 A0 s/ R
跨平臺開發(fā)  r6 R. t6 ?8 }, X: f" |/ C
EventOS提倡跨平臺開發(fā)。所謂跨平臺開發(fā),就是在Windows和Linux等便捷友好的開發(fā)環(huán)境里,完成絕大部分的開發(fā)工作,包括編程、調(diào)試、運行和單元測試等工作,然后在目標(biāo)平臺上進(jìn)行最后的移植、調(diào)試和適配工作。
# b& D6 D& {  }跨平臺的優(yōu)點有很多,比如開發(fā)效率非常高、工程師進(jìn)入到更多的編程領(lǐng)域和程序穩(wěn)定可靠等。EventOS主要在32位MinGW平臺和Linux平臺上開發(fā)。
4 g0 @- ?8 a0 Z+ {% {/ i開發(fā)環(huán)境的搭建,見文檔開發(fā)環(huán)境搭建。當(dāng)然,也完全可以用MDK在單片機上直接開發(fā),效率稍低而已。% ^- T5 O, M  A' ^3 i9 E& l4 k, F  j. w
消除耦合
6 ^8 `: d! ~8 f1 j無論是廣播式的事件發(fā)送機制,還是發(fā)布-訂閱式的事件發(fā)送機制,實際上,都是為了消除軟件模塊間的耦合。
  f4 \! u3 n* Q+ w) m五、EventOS項目的維護(hù)原則9 k% ]7 _9 x/ A' W4 {8 I
但行好事,不問前程. E" a6 h  G/ ?' @5 W- h$ x
我完全沒有考慮過EventOS將來能夠如何,而且最近EventOS的發(fā)展有點超出我預(yù)計,我有點受寵若驚。
$ {* j9 Y: a+ R$ g* ~更多的人了解EventOS是一件好事,敦促這我把EventOS項目盡快做好,做完善,做成一個工業(yè)級的軟件產(chǎn)品,為廣大的嵌入式工作者創(chuàng)造便利。6 {6 F9 R0 e1 V7 C$ O
希望EventOS最終被眾多工程師和企業(yè)認(rèn)可,并在成千上萬的嵌入式產(chǎn)品中廣泛應(yīng)用起來,那就不枉我這些年深挖技術(shù)的努力。
4 L$ W8 d* o- F7 V+ D源碼文檔并進(jìn)
; G0 g' L* i, X我深知完善豐富的文檔,對一個開源項目的重要意義。因此,我堅持每一個特性的升級,每一個BUG的修復(fù),都跟隨著相應(yīng)的文檔。3 m$ ~+ `; ^7 m( X' D1 [
讓EventOS和EventOS項目的文檔專業(yè)化、體系化,包含用戶手冊、版本特性、原理說明、博客、例程等等。
5 @. _- w! a& X$ v5 j! E0 a, J單元測試優(yōu)先
. j- k6 f! v3 b9 E嵌入式的開源項目,用戶最關(guān)心的,是軟件的可靠性。單元測試,是保證軟件健壯與可靠的重要手段。對于EventOS這種系統(tǒng)級、框架級的軟件,穩(wěn)定性與可靠性更加重要。0 M$ g, a7 R8 Q9 ?7 G. G: d
從EventOS誕生之日起,它就是面向單元測試的。詳盡而嚴(yán)謹(jǐn)?shù)膯卧獪y試,保證了EventOS將絕大多數(shù)的BUG,消除在了開發(fā)階段。EventOS的每一次重構(gòu)、升級與發(fā)布,都是經(jīng)過了嚴(yán)謹(jǐn)?shù)膯卧獪y試的。# G0 c+ h+ ]9 W' r7 ~- M
用戶至上,需求至上
# w/ S. M, S4 D& t軟件如何發(fā)展,代碼向哪個方向前進(jìn),EventOS完全聽從用戶們的聲音,完全從需求出發(fā)。我們從各個渠道,微信、QQ、論壇等獲取的意見建議,都將體現(xiàn)到EventOS的開發(fā)中去。
2 O: ~% G+ ~* E# u$ i) W( `0 b六、代碼結(jié)構(gòu)- N/ G9 b& }) ^' [8 M: ?6 W* z/ W
核心代碼
0 ^$ `* U0 D; W1 G' |3 Z8 Peventos/eventos.c EventOS狀態(tài)機框架的實現(xiàn)eventos/eventos.h 頭文件eventos/eventos_config.h 對EventOS進(jìn)行配置與裁剪
8 H3 _4 _, p0 ~8 p5 L) {4 D第三方代碼庫
6 g. ^+ q1 r- \1 [" lRTT Segger JLink所提供的日志庫,依賴于JLink硬件。unity 單元測試框架" c3 A0 m& L* ~8 J8 o  m
例程代碼% s" g% C! ~, W8 U. _
freertos 對FreeRTOS的適配例程(未完成)。posix 對符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)(如Linux、VxWork、MinGW等)的適配例程。stm32f030 對ARM Cortex-M0芯片的裸機運行(無RTOS)的例程。stm32f103 對ARM Cortex-M3芯片的裸機運行(無RTOS)的例程。test 對源碼進(jìn)行的單元測試?yán)。digital_watch 電子表例程,狀態(tài)機的典型應(yīng)用。2 F. a  n, O  L. Q* P: \
tools
& u9 ^% G4 X7 @8 @一些Python腳本和工具。
5 [; @/ l; e. @  C$ d/ D0 ^文檔0 ]) Y7 H2 h9 w& q- Z
文檔包含Doxygen代碼文檔的生成路徑(未完成)、圖片、代碼相關(guān)文檔(如快速入門文檔、移植文檔、開發(fā)環(huán)境搭建說明文檔等)。
% J* S* v) ~& x3 \9 ]' ~& O來自: https://gitee.com/event-os/eventos
2 W8 x0 A8 ?: T7 @8 R  o0 L-END-
& p' I) z3 x  W8 P往期推薦:點擊圖片即可跳轉(zhuǎn)閱讀
9 P2 F' G$ d# U9 Z0 I6 {+ K6 M$ y                                                          R+ V- _; I+ M
                                                                  W6 h3 D7 B. `3 j& B  D% Q# n
                                                                       
0 J6 z) U6 b+ E1 M; \) ?                                                                                , G& C9 Q8 S) G* ?( t( S

4 S& r& C% w! L- ]                                                                                ( g; ^+ f7 X) b. C' K* B9 d( d. V
                                                                                        現(xiàn)場實測,用數(shù)據(jù)說話,星閃通信距離突破3.3公里!
" l4 n$ v" {& T, `- H0 d% R4 E                                                        2 N. e3 v; Q. [" g, U) ?
                                                                # d8 k0 A  p2 A3 j4 P
                                                                        $ k) j7 {9 ?7 C$ Y. ^- G
                                                                               
1 e- Z4 K% @) i4 i' @
: ^1 k0 V* {! h) M, [                                                                               
# r- @$ E5 Z0 C" |                                                                                        樹莓派第二代微控制器 RP2350,終于拿到手了!~" [; F% V$ _+ ~( E
                                                                # b, O3 w3 f1 \
                                                                       
! I0 Z* r/ C" i                                                                               
9 \) X9 k! o9 p6 s/ k- L) r% a
7 l3 ?+ |& w) Y. ^0 A0 C5 [                                                                               
. o+ H% g' [  c5 `, r                                                                                        跟嵌入式技術(shù)相關(guān)的熱門應(yīng)用,全都在這里了!
. u3 U/ F8 K  Q) U* Y                                                                               
- E( \7 V! m& y9 q  j+ I$ x                                                                        6 ]) h3 [$ [3 o3 J# {) A6 X% d
                                                               
  ^5 K* N1 P* D: `                                                        我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師6 D; J6 X+ z( |
關(guān)注我,一起變得更加優(yōu)秀!
回復(fù)

使用道具 舉報

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

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

本版積分規(guī)則

關(guān)閉

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


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