|
我是老温,一名热爱学习的嵌入式工程师5 p: s- n3 H" s* O1 J! B
关注我,一起变得更加优秀!
. L& @. R- w+ e3 j一、EventOS是什么?
* E7 ]1 [4 q4 l) K, Y0 NEventOS,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。
, K, I; e- _) ~# d3 REventOS以及其母项目EventOS,目标是开发一个企业级的嵌入式开发平台,以事件总线为核心,打造一个统一的嵌入式技术生态,
0 c( H/ X% ~: Z1 N& i为广大企业用户和嵌入式开发者们,提供搞可靠性的、高性能的、现代且高开发效率的嵌入式开发环境。3 |; l7 t% G! `: i7 ` Q$ D3 w s
EventOS的主要特性列举如下:) e: v0 W( \$ u# u
(1)事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。事件支持广播发送,或者发布-订阅机制两种方式(二选一)。) r4 O9 b5 }& R8 J7 i( O$ q
(2)全局事件队列,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。
^$ Q# _; Y6 u% L$ ?7 u- W |(3)协作式内核,优点是不会产生资源竞争,极度可靠。
# U3 o4 v" Q$ d(4)极度轻量,便于嵌入其他系统,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限,可低至ROM 1.2KB,RAM 172Byte。可以作为子系统,“悄悄”嵌入到其他软件系统中去。$ o4 `, ~5 a+ ^% v" S
(5)功能强大的软定时器,以时间事件的形式,对软定时器功能,进行优雅且功能强大的实现。2 W8 o$ q9 F/ n d2 u* H- Q% h
(6)API的设计,更加简明,更加符合本土嵌入式工程师的习惯。移植方便,只需实现少数几个接口函数即可。
7 e+ }" C* I3 X$ r3 `; d(7)未来会使用Event Bridge(事件桥)机制与EventOS打通事件总线,以便对EventOS的分布式特性进行支持。$ L" A' ?+ _# R% R& y* k" K
(8)重点关注三种应用场景:中小资源单片机,作为模块向其他软件系统的嵌入和可靠性要求较高的嵌入式场景。
9 w4 z4 F( s5 Q, E0 s: ~EventOS的前身,曾经让我在过去的工作中受益匪浅,让我非常高效的写出了很多可靠的程序,能力和回报都有了质的提升。) s% i4 Z5 h! G( [
现在,我将以前的技术成果整理重构,在各方面都向着规范的开源项目靠拢,包括源码、注释、文档、单元测试和例程等等。( ^$ s _2 K0 @3 e* d/ I! r
未来,EventOS这个项目我会一直完善下去。我的目标是,将EventOS项目在2022年底前做成Gitee推荐项目,2024年年底前将EventOS项目,做成Gitee的GVP项目。造福更多的嵌入式工程师。* A+ j9 [+ [4 ^7 _) N* U
rnqptvwnwge64026479911.jpg
- y1 K* `' D( |5 V/ S* G二、文档与博客2 r6 c- \9 G1 m0 }% q8 r
EventOS的移植和入门,在documentation文件夹里,可以参考以下几个文档:(1)快速入门文档https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md+ V# a- f% t( E8 p$ [: o
(2)裸机移植文档https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md
2 s: |0 r) M( D9 j9 D+ g(3)开发环境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md1 F8 x# [3 F! q( R% J
(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
* g) q+ q$ s8 t8 B7 D- e/ x, L三、为什么叫做EventOS?
$ o; X; t, s6 }* o4 sEventOS真的非常轻量。全功能的EventOS目前经MDK编译后,框架本身占用RAM 200Byte,ROM约3.5KB(优化等级为-O3)或4.5KB(优化等级为-O0)。
7 ?- H4 N- A7 G% g' n$ p裁剪后,最小功能的EventOS,目前经MDK编译后,框架本身占用RAM 172Byte,ROM约1.2KB(优化等级为-O3)或1.5KB(优化等级为-O0)。
M0 S0 A* I9 R2 S }8 T: u之所以叫EventOS,一是因为它的技术特色与核心思想,就是事件驱动;二是因为它是另外一个开源项目EventOS(准备中)的简化实现,- W5 I, S F' Z6 q/ Y
EventOS是一个事件驱动的、分布式的、可跨平台开发的嵌入式RTOS,面向32位单片机和更高处理器的嵌入式开发平台。# f3 t q) u+ B# y; c
四、EventOS主张的编程思想& n, E4 o" [# t2 T( Y
事件驱动与事件总线
' H* u# d2 A. ~' I事件驱动和事件总线,是EventOS的核心,也是EventOS的核心。事件机制,与RTOS中事件概念完全不同,它更像是windows编程中的消息。
1 l5 A9 d7 e6 C/ `! [6 {8 L5 U事件,可以认为是主题 + 不定长数据,通过事件,可以极大解耦模块间的耦合,增强软件的可测试性,还可以进行跨平台开发和分布式扩展。
Q, ^: |2 A5 a防御式编程& k: w5 n t3 [5 C2 C
EventOS使用了大量的断言,对系统的运行过程和用户对EventOS的使用进行大量的检查。
. Z5 H# \. H7 K8 B \; O我们强烈建议,用户要对断言接口函数进行精心的设计和实现,在实际的产品代码中,依然打开断言。这样,软件将以非常快的速度,收敛于稳定状态。
# B' y, u* h! |6 c跨平台开发2 C8 o! {/ Z! O. Z& a
EventOS提倡跨平台开发。所谓跨平台开发,就是在Windows和Linux等便捷友好的开发环境里,完成绝大部分的开发工作,包括编程、调试、运行和单元测试等工作,然后在目标平台上进行最后的移植、调试和适配工作。
1 l8 j$ T7 m7 j# i. s' y跨平台的优点有很多,比如开发效率非常高、工程师进入到更多的编程领域和程序稳定可靠等。EventOS主要在32位MinGW平台和Linux平台上开发。. \# L* P9 e$ E/ ]0 ~! Z* t
开发环境的搭建,见文档开发环境搭建。当然,也完全可以用MDK在单片机上直接开发,效率稍低而已。
) _2 Q( }& |2 f7 t$ {; ]( b% p1 u消除耦合
* e4 Y: z" Z$ x3 m8 e" `. P/ \无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。4 b/ G% x& ?+ K& x7 B0 b0 C
五、EventOS项目的维护原则' S- o) L! H# o2 g" q5 M2 V% F
但行好事,不问前程$ }' [0 F1 G$ b; m2 k
我完全没有考虑过EventOS将来能够如何,而且最近EventOS的发展有点超出我预计,我有点受宠若惊。
. c& s! `9 V7 ^更多的人了解EventOS是一件好事,敦促这我把EventOS项目尽快做好,做完善,做成一个工业级的软件产品,为广大的嵌入式工作者创造便利。4 }* u4 R5 ?1 x$ e' z
希望EventOS最终被众多工程师和企业认可,并在成千上万的嵌入式产品中广泛应用起来,那就不枉我这些年深挖技术的努力。' @0 _8 j% E/ d6 r# m# R; A* g
源码文档并进
) `6 E1 [7 V/ {; R我深知完善丰富的文档,对一个开源项目的重要意义。因此,我坚持每一个特性的升级,每一个BUG的修复,都跟随着相应的文档。/ g$ ~+ S. M4 Z
让EventOS和EventOS项目的文档专业化、体系化,包含用户手册、版本特性、原理说明、博客、例程等等。
$ `: T( I; d1 b) `' n2 e8 Z单元测试优先
) p! f, c, R: ^* U% I- j嵌入式的开源项目,用户最关心的,是软件的可靠性。单元测试,是保证软件健壮与可靠的重要手段。对于EventOS这种系统级、框架级的软件,稳定性与可靠性更加重要。' L; |. G- }" q. ]& I, A4 f r3 j1 m
从EventOS诞生之日起,它就是面向单元测试的。详尽而严谨的单元测试,保证了EventOS将绝大多数的BUG,消除在了开发阶段。EventOS的每一次重构、升级与发布,都是经过了严谨的单元测试的。9 Y6 T1 Q: u: `3 M" v) q
用户至上,需求至上
; g- ]0 ?& d! M( n2 c7 o ^软件如何发展,代码向哪个方向前进,EventOS完全听从用户们的声音,完全从需求出发。我们从各个渠道,微信、QQ、论坛等获取的意见建议,都将体现到EventOS的开发中去。
# q" P+ e3 d; Q& I2 v. b' P六、代码结构4 e3 z9 ?7 H' i9 i
核心代码. A: E% x9 ?6 a# p, a# J e
eventos/eventos.c EventOS状态机框架的实现eventos/eventos.h 头文件eventos/eventos_config.h 对EventOS进行配置与裁剪
. v2 S' e6 H: }5 F5 J0 \# \第三方代码库, n( H" B4 F% z% n% H0 H% ]; U
RTT Segger JLink所提供的日志库,依赖于JLink硬件。unity 单元测试框架
5 Y6 E! C* e( u0 X2 i% c0 H例程代码* F0 u5 t C' |4 H2 ?
freertos 对FreeRTOS的适配例程(未完成)。posix 对符合POSIX标准的操作系统(如Linux、VxWork、MinGW等)的适配例程。stm32f030 对ARM Cortex-M0芯片的裸机运行(无RTOS)的例程。stm32f103 对ARM Cortex-M3芯片的裸机运行(无RTOS)的例程。test 对源码进行的单元测试例程。digital_watch 电子表例程,状态机的典型应用。5 H% q2 V7 z6 {- H2 J* v
tools
2 X7 N% O* v7 a0 C" i一些Python脚本和工具。# _! {! V4 q+ F: W, g8 Z
文档, T! Q: f. R1 c! F1 V$ V
文档包含Doxygen代码文档的生成路径(未完成)、图片、代码相关文档(如快速入门文档、移植文档、开发环境搭建说明文档等)。
5 { n, r+ D4 B4 [1 j来自: https://gitee.com/event-os/eventos
) F" J/ b6 U: V-END-
, g6 k7 E/ B; {$ ?5 i7 Z0 W* L3 q6 Z往期推荐:点击图片即可跳转阅读8 R f* m( x3 H" `# i$ N: T
2 _+ P+ r- b+ h3 q
1 T4 } ?. I; B9 T# j, k
. j y1 D: Y. L% \
3 p% o% s2 c( y1 t& p1 h1 n3 _
hxbiklpgwks64026480011.jpg
+ D) O* W! d2 h# ?1 y5 L
5 [/ s8 k% L3 ^
现场实测,用数据说话,星闪通信距离突破3.3公里!
& l" k+ d l$ g0 b7 }0 `) ~
( n& R# O y2 E; a1 ~/ g( O ; j2 S/ O6 s2 {1 |, x
8 X# `* k: d, U" W+ U3 b* o. E( _" ]9 a 6 X$ ~+ E; e; K4 }
wbdnufzvsll64026480111.jpg
- P5 P9 K, A1 D( g! L9 P7 g
2 {( R& g1 V& Z5 I/ i. ~) ^3 H 树莓派第二代微控制器 RP2350,终于拿到手了!~
) ?9 L7 P- r: t - G7 k/ {4 [$ ^9 g" g
' }3 J) y7 b# J9 [7 @
/ `' x j2 c+ v8 [% K0 \
g35evvfj42364026480211.jpg
" r7 m$ @$ c1 B- Q) O. \. O
( ]) z+ f7 w7 o3 l0 z& I ~ K9 C9 A 跟嵌入式技术相关的热门应用,全都在这里了!' o' L& d$ v& D& E0 J7 q
. i/ H& g/ @$ \2 e# V3 g * V, T3 f6 E. I# m- @/ H# W$ W. C
( i8 |$ ?& P, \' G7 h 我是老温,一名热爱学习的嵌入式工程师9 N" X- _! v5 `2 Y( M3 H
关注我,一起变得更加优秀! |
|