一、EventOS是什么
EventOS是一个面向单片机(MCU)、主打事件驱动 与超轻量级的开源嵌入式开发框架。它特别适合在资源受限的MCU上,帮助你构建结构清晰、模块解耦且易于维护的应用程序。

二、EventOS核心特性
-
事件驱动与事件总线 :EventOS的核心思想是事件驱动。应用程序的各个模块(通常实现为状态机)之间不直接调用函数,而是通过发送和接收"事件"来进行通信。你可以把事件想象成一条带有"主题"和"数据"的消息。这种"主题+数据"的事件设计,能极大降低模块间的依赖关系(耦合)。
-
协作式内核 :EventOS采用协作式内核设计,这意味着当前运行的任务会一直执行,直到它主动释放CPU控制权,下一个任务才会开始。这样做的好处是避免了资源竞争,无需复杂的互斥锁等机制,使得系统运行非常可靠。
-
极致的轻量与可裁剪性 :EventOS在设计上极度关注资源占用。除了事件总线这一核心外,其他所有高级功能(如层次状态机、发布-订阅机制、事件携带数据等)都可以通过配置文件
eventos_config.h一键裁剪。这使得你可以根据项目需求,将框架精简到极致。
-
防御式编程与可靠性 :框架内部使用了大量的断言(assert) ,用于检查系统运行和用户调用的合法性
。这能帮助开发者快速定位问题,让代码更快地达到稳定状态。
三、文档与博客
EventOS的移植和入门,在documentation文件夹里,可以参考以下几个文档:
(1)快速入门文档
https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-001-QuickStart.md
(2)裸机移植文档
https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-002-PortMetal.md
(3)开发环境搭建
https://gitee.com/event-os/eventos/blob/master/documentation/UM-02-003-DevEnv.md
(4)如何理解事件
https://gitee.com/event-os/eventos/blob/master/blog/如何理解事件.md
四、为什么叫做EventOS
EventOS真的非常轻量。全功能的EventOS目前经MDK编译后,框架本身占用RAM 200Byte,ROM约3.5KB(优化等级为-O3)或4.5KB(优化等级为-O0)。
裁剪后,最小功能的EventOS,目前经MDK编译后,框架本身占用RAM 172Byte,ROM约1.2KB(优化等级为-O3)或1.5KB(优化等级为-O0)。
之所以叫EventOS,一是因为它的技术特色与核心思想,就是事件驱动;二是因为它是另外一个开源项目EventOS(准备中)的简化实现,
EventOS是一个事件驱动的、分布式的、可跨平台开发的嵌入式RTOS,面向32位单片机和更高处理器的嵌入式开发平台。
五、EventOS主张的编程思想
事件驱动与事件总线
事件驱动和事件总线,是EventOS的核心,也是EventOS的核心。事件机制,与RTOS中事件概念完全不同,它更像是windows编程中的消息。
事件,可以认为是主题 + 不定长数据,通过事件,可以极大解耦模块间的耦合,增强软件的可测试性,还可以进行跨平台开发和分布式扩展。
防御式编程
EventOS使用了大量的断言,对系统的运行过程和用户对EventOS的使用进行大量的检查。
我们强烈建议,用户要对断言接口函数进行精心的设计和实现,在实际的产品代码中,依然打开断言。这样,软件将以非常快的速度,收敛于稳定状态。
跨平台开发
EventOS提倡跨平台开发。所谓跨平台开发,就是在Windows和Linux等便捷友好的开发环境里,完成绝大部分的开发工作,包括编程、调试、运行和单元测试等工作,然后在目标平台上进行最后的移植、调试和适配工作。
跨平台的优点有很多,比如开发效率非常高、工程师进入到更多的编程领域和程序稳定可靠等。EventOS主要在32位MinGW平台和Linux平台上开发。
开发环境的搭建,见文档开发环境搭建。当然,也完全可以用MDK在单片机上直接开发,效率稍低而已。
消除耦合
无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。
六、如何使用EventOS
-
获取源码 :项目主要托管在Gitee上,你可以访问**
https://gitee.com/event-os/eventos**获取最新源代码。 -
开始移植 :EventOS的移植过程被设计得尽可能简单。通常,你只需要实现少数几个平台接口函数即可。可以参考项目自带的**
stm32f030** 或**stm32f103**等裸机例程。 -
编写应用:在你的应用程序中,你将主要与状态机和事件打交道。基本步骤包括:
-
初始化EventOS框架。
-
创建你的状态机(功能模块)。
-
在状态机中处理接收到的事件。
-
从主函数启动EventOS的事件调度循环。
-
-
跨平台开发 :EventOS鼓励跨平台开发 模式。你可以先在Windows(使用MinGW)或Linux这类友好的开发环境中,完成绝大部分的编码、调试甚至单元测试工作,最后再移植到目标MCU上进行最终适配,这可以显著提升开发效率。
七、代码结构
核心代码
-
eventos/eventos.c EventOS 状态机框架的实现
-
eventos/eventos.h 头文件
-
eventos/eventos_config.h 对EventOS进行配置与裁剪

第三方代码库
-
RTT Segger JLink所提供的日志库,依赖于JLink硬件。
-
unity 单元测试框架
例程代码
-
freertos 对FreeRTOS的适配例程(未完成)。
-
posix 对符合POSIX标准的操作系统(如Linux、VxWork、MinGW等)的适配例程。
-
stm32f030 对ARM Cortex-M0芯片的裸机运行(无RTOS)的例程。
-
stm32f103 对ARM Cortex-M3芯片的裸机运行(无RTOS)的例程。
-
test 对源码进行的单元测试例程。
-
digital_watch 电子表例程,状态机的典型应用。
八、EventOS对比
| 特性维度 | EventOS Nano (核心版本) | EventOS Basic (极简协作式内核) |
|---|---|---|
| 项目定位 | 事件驱动框架,核心是事件总线 | 超级简洁的协作式内核 |
| 核心特性 | 事件驱动、状态机、软定时器、深度可裁剪 | 协作式调度、轻量级任务、软定时器 |
| 资源占用 | 全功能: ROM≈3.5KB, RAM≈200B 最小配置: ROM≈1.2KB, RAM=172B | ROM=968字节, RAM=64字节 |
| 事件机制 | 支持广播、发布-订阅两种模式 | 不涉及事件总线 |
| 适用场景 | 中小资源单片机、作为子系统嵌入、高可靠性场景 | 对资源极度敏感,无需复杂事件通信的场景 |