电子产业一站式赋能平台

PCB联盟网

搜索
查看: 67|回复: 0
收起左侧

嵌入式软件框架,一个面向单片机应用的事件调度器。

[复制链接]

491

主题

491

帖子

1818

积分

三级会员

Rank: 3Rank: 3

积分
1818
发表于 2024-9-9 17:50:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师
- i4 A  ?2 V0 z* m* T9 ~& F关注我,一起变得更加优秀!1 g4 B) s* F6 V) f  Y/ _3 |% ?
一、EventOS是什么?
' q5 \: C* A# z* ~2 z6 _& S8 cEventOS,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。
) i: Y1 a& o5 g$ i% S9 B& A5 dEventOS以及其母项目EventOS,目标是开发一个企业级的嵌入式开发平台,以事件总线为核心,打造一个统一的嵌入式技术生态,
0 ]5 Q/ o# _3 \, Z+ x! j8 ?为广大企业用户和嵌入式开发者们,提供搞可靠性的、高性能的、现代且高开发效率的嵌入式开发环境。
% l/ z5 w' m% H, eEventOS的主要特性列举如下:
! v7 K( r' x1 j, ~  h9 q% E6 w(1)事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。事件支持广播发送,或者发布-订阅机制两种方式(二选一)。8 C# \+ v2 r( y* F
(2)全局事件队列,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。
) x6 C* z3 Q: l9 G0 W5 t" _' i(3)协作式内核,优点是不会产生资源竞争,极度可靠。9 E7 O, g4 T3 a0 X( h1 Y) C
(4)极度轻量,便于嵌入其他系统,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限,可低至ROM 1.2KB,RAM 172Byte。可以作为子系统,“悄悄”嵌入到其他软件系统中去。
3 F7 s7 z: z% n( s2 w3 a0 [(5)功能强大的软定时器,以时间事件的形式,对软定时器功能,进行优雅且功能强大的实现。
4 x' a/ y: u- x) c! U1 W# e- U* Y6 o(6)API的设计,更加简明,更加符合本土嵌入式工程师的习惯。移植方便,只需实现少数几个接口函数即可。
# F1 p" N2 b$ G(7)未来会使用Event Bridge(事件桥)机制与EventOS打通事件总线,以便对EventOS的分布式特性进行支持。
2 A2 `) L$ B1 R  i3 T(8)重点关注三种应用场景:中小资源单片机,作为模块向其他软件系统的嵌入和可靠性要求较高的嵌入式场景。
* }1 G. [, N7 N% C0 E3 Y( ^! CEventOS的前身,曾经让我在过去的工作中受益匪浅,让我非常高效的写出了很多可靠的程序,能力和回报都有了质的提升。! ^8 f* |% q0 O7 b9 p$ f6 s" a
现在,我将以前的技术成果整理重构,在各方面都向着规范的开源项目靠拢,包括源码、注释、文档、单元测试和例程等等。4 D7 g4 p. y" L4 u' `
未来,EventOS这个项目我会一直完善下去。我的目标是,将EventOS项目在2022年底前做成Gitee推荐项目,2024年年底前将EventOS项目,做成Gitee的GVP项目。造福更多的嵌入式工程师。
* s! l8 E& g5 k/ N. S" v2 U9 ~; w

vc4ttvt2ktf64014407517.jpg

vc4ttvt2ktf64014407517.jpg
) F8 y! z+ g2 v: J; T9 y
二、文档与博客
. f3 Y3 s/ v! `1 d2 aEventOS的移植和入门,在documentation文件夹里,可以参考以下几个文档:(1)快速入门文档https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md& {* |, K9 B: f, L$ X" B
(2)裸机移植文档https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md& D9 s9 @& p4 \' z6 Q/ K
(3)开发环境搭建https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md3 n: Q! I  y# a; X3 i1 u
(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$ E- X# M. E! K; i: t0 ^
三、为什么叫做EventOS?. E- g0 J" }7 }) p# T6 r( I- z
EventOS真的非常轻量。全功能的EventOS目前经MDK编译后,框架本身占用RAM 200Byte,ROM约3.5KB(优化等级为-O3)或4.5KB(优化等级为-O0)。1 c. p# O  h, d$ F. p! x
裁剪后,最小功能的EventOS,目前经MDK编译后,框架本身占用RAM 172Byte,ROM约1.2KB(优化等级为-O3)或1.5KB(优化等级为-O0)。
# y# o- B$ S: p- r9 m) J1 i之所以叫EventOS,一是因为它的技术特色与核心思想,就是事件驱动;二是因为它是另外一个开源项目EventOS(准备中)的简化实现,
* f3 O0 J* \' MEventOS是一个事件驱动的、分布式的、可跨平台开发的嵌入式RTOS,面向32位单片机和更高处理器的嵌入式开发平台。3 M; V( o- o6 k
四、EventOS主张的编程思想6 p+ ~0 c2 P6 {8 m  W* K
事件驱动与事件总线
  f4 u, A; o# _" @5 b9 T6 m事件驱动和事件总线,是EventOS的核心,也是EventOS的核心。事件机制,与RTOS中事件概念完全不同,它更像是windows编程中的消息。! k- }. J. d; s. I
事件,可以认为是主题 + 不定长数据,通过事件,可以极大解耦模块间的耦合,增强软件的可测试性,还可以进行跨平台开发和分布式扩展。$ N, ]( b# g' E1 {% C
防御式编程7 ]. [4 E9 x8 B3 T! B
EventOS使用了大量的断言,对系统的运行过程和用户对EventOS的使用进行大量的检查。
( I) S, c% g' V3 |0 e我们强烈建议,用户要对断言接口函数进行精心的设计和实现,在实际的产品代码中,依然打开断言。这样,软件将以非常快的速度,收敛于稳定状态。
# J3 X: }. h7 n' E6 J2 F  Y跨平台开发
+ |2 H: G, E4 c2 v- hEventOS提倡跨平台开发。所谓跨平台开发,就是在Windows和Linux等便捷友好的开发环境里,完成绝大部分的开发工作,包括编程、调试、运行和单元测试等工作,然后在目标平台上进行最后的移植、调试和适配工作。; }1 W) R, W  @. L
跨平台的优点有很多,比如开发效率非常高、工程师进入到更多的编程领域和程序稳定可靠等。EventOS主要在32位MinGW平台和Linux平台上开发。
" i1 l2 _1 Y) m" L开发环境的搭建,见文档开发环境搭建。当然,也完全可以用MDK在单片机上直接开发,效率稍低而已。
" S$ j/ j4 k0 u7 a& A& Q消除耦合8 \# {$ f0 E3 b) O+ y4 G: R  Y
无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。
; Z3 a; Z* N0 M1 n% {9 x2 F/ P五、EventOS项目的维护原则
; |, _# v! @$ f1 z2 M8 g但行好事,不问前程
4 d8 @( h) Z% ?% c7 Y5 c5 [我完全没有考虑过EventOS将来能够如何,而且最近EventOS的发展有点超出我预计,我有点受宠若惊。
: A( l' s# L+ {$ e更多的人了解EventOS是一件好事,敦促这我把EventOS项目尽快做好,做完善,做成一个工业级的软件产品,为广大的嵌入式工作者创造便利。7 l( U# H2 r/ Z- ]# x: ^  A5 K5 I
希望EventOS最终被众多工程师和企业认可,并在成千上万的嵌入式产品中广泛应用起来,那就不枉我这些年深挖技术的努力。
  [" ?) \+ D) z% m: y2 L源码文档并进
5 \4 N; \+ V4 b, H: I4 C8 u7 Q7 @# t我深知完善丰富的文档,对一个开源项目的重要意义。因此,我坚持每一个特性的升级,每一个BUG的修复,都跟随着相应的文档。
8 C* q& d% b- S" t让EventOS和EventOS项目的文档专业化、体系化,包含用户手册、版本特性、原理说明、博客、例程等等。5 C* k; E0 V; \' J: ?# I
单元测试优先
  k6 G1 n* n4 `. E3 r! w嵌入式的开源项目,用户最关心的,是软件的可靠性。单元测试,是保证软件健壮与可靠的重要手段。对于EventOS这种系统级、框架级的软件,稳定性与可靠性更加重要。
' E2 p6 k* G7 P, _7 Z# R从EventOS诞生之日起,它就是面向单元测试的。详尽而严谨的单元测试,保证了EventOS将绝大多数的BUG,消除在了开发阶段。EventOS的每一次重构、升级与发布,都是经过了严谨的单元测试的。! ?5 h* o& D8 p7 J( Y2 ~) p
用户至上,需求至上* C- g3 K5 k! e3 m
软件如何发展,代码向哪个方向前进,EventOS完全听从用户们的声音,完全从需求出发。我们从各个渠道,微信、QQ、论坛等获取的意见建议,都将体现到EventOS的开发中去。
1 j9 D" I, L3 k6 ^六、代码结构
' V& C$ m* x' w  l) Y' U核心代码
. R. U% V' W4 T4 f: d  @eventos/eventos.c EventOS状态机框架的实现eventos/eventos.h 头文件eventos/eventos_config.h 对EventOS进行配置与裁剪& P9 S: Q* x, B  M! K2 `* g7 m
第三方代码库" {: T) e6 ?* |* T
RTT Segger JLink所提供的日志库,依赖于JLink硬件。unity 单元测试框架
. o9 D. b1 l" t$ l' s例程代码
3 Z, C- x8 \6 m) N! v$ Afreertos 对FreeRTOS的适配例程(未完成)。posix 对符合POSIX标准的操作系统(如Linux、VxWork、MinGW等)的适配例程。stm32f030 对ARM Cortex-M0芯片的裸机运行(无RTOS)的例程。stm32f103 对ARM Cortex-M3芯片的裸机运行(无RTOS)的例程。test 对源码进行的单元测试例程。digital_watch 电子表例程,状态机的典型应用。% ]  W# l5 f$ A# O) P
tools
, R3 @  t( q2 n" j4 c一些Python脚本和工具。8 U, D2 E- ^( h& l9 W
文档1 v5 D6 ^& s% `* }4 z
文档包含Doxygen代码文档的生成路径(未完成)、图片、代码相关文档(如快速入门文档、移植文档、开发环境搭建说明文档等)。0 I: c, {8 |' D7 t! E
来自: https://gitee.com/event-os/eventos% ^5 e+ |9 |$ h6 D
-END-$ o1 C4 g; X9 e& [1 v8 f4 v
往期推荐:点击图片即可跳转阅读
( i( B- V6 m. ~, o* r- D1 `                                                       
) v2 W. h6 ~+ b                                                                4 @# }1 ^6 F/ D  `0 u
                                                                       
' U; v# S. g: y                                                                                8 {5 _& T! i# i

11lawdruvyk64014407617.jpg

11lawdruvyk64014407617.jpg
& T, ]9 b" Q# ~/ O" f; F1 n! h
                                                                                / O1 @8 I; Z5 [6 ^% u" M+ G
                                                                                        现场实测,用数据说话,星闪通信距离突破3.3公里!
6 K3 D5 ~3 e( u- D7 |2 J3 _- }6 T                                                       
2 c' z9 Z5 c" E0 V' A% N                                                               
+ w  x( e+ U4 c$ i& N2 s4 I: S                                                                       
) E5 A. I& O; t9 C0 n! `                                                                               
0 G" h" u, r, d' U: B3 i5 W

mlpe3wvc5jv64014407717.jpg

mlpe3wvc5jv64014407717.jpg
- C0 [6 s9 s; G8 f/ z4 w( S& N: [
                                                                                0 G; e* b4 T( @
                                                                                        树莓派第二代微控制器 RP2350,终于拿到手了!~5 [( h# |5 W6 k) P
                                                                + W( i4 o# f3 l+ \; v$ q
                                                                        ( Z  e! L4 Z' F2 A
                                                                               
" Y) N5 X  K* y) |) q% p) o

a04p50azbxl64014407817.jpg

a04p50azbxl64014407817.jpg

5 }3 n/ `0 S0 y: g" I                                                                               
" h$ Y8 G. ^5 X5 |, t( W. m                                                                                        跟嵌入式技术相关的热门应用,全都在这里了!0 ^2 _1 U6 n. Q7 Y  Q
                                                                                + K4 i, m8 {# W, c
                                                                        ( a; [* ?( r. w1 z( g3 l: [% T* K
                                                               
+ Y$ y+ m- H6 S  c6 v                                                        我是老温,一名热爱学习的嵌入式工程师
" @: H( m0 v  r关注我,一起变得更加优秀!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表