# eventos-nano
**Repository Path**: bianchengge/eventos-nano
## Basic Information
- **Project Name**: eventos-nano
- **Description**: 嵌入式开发框架,事件驱动,超级轻量。最低占用ROM 1.5KB,RAM 172字节。核心技术是事件总线,支持Reactor和状态机两种模式,协作式内核,极度可靠。可深度裁剪,移植方便。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 85
- **Created**: 2022-09-06
- **Last Updated**: 2022-09-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# EventOS Nano产品说明

邮箱:**event-os@outlook.com**,微信号:**Event-OS**,QQ群:**667432915**。
兄弟项目:[EventOS Basic](https://gitee.com/event-os/eventos-basic.git)
-------
### 一、EventOS Nano是什么?
**EventOS Nano**,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。**EventOS Nano**以及其母项目**EventOS**,目标是开发一个企业级的嵌入式开发平台,以**事件总线**为核心,打造一个统一的嵌入式技术生态,为广大企业用户和嵌入式开发者们,提供搞可靠性的、高性能的、现代且高开发效率的嵌入式开发环境。
**EventOS Nano**的主要特性列举如下:
+ **事件总线**为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。事件支持**广播**发送,或者**发布-订阅**机制两种方式(二选一)。
+ **全局事件队列**,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。
+ **协作式内核**,优点是不会产生资源竞争,极度可靠。
+ **极度轻量,便于嵌入其他系统**,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限,可**低至ROM 1.2KB,RAM 172Byte**。可以作为子系统,“悄悄”嵌入到其他软件系统中去。
+ **功能强大的软定时器**,以时间事件的形式,对软定时器功能,进行优雅且功能强大的实现。
+ API的设计,更加简明,更加符合本土嵌入式工程师的习惯。
+ 移植方便,只需实现少数几个接口函数即可。
+ 未来会使用**Event Bridge**(事件桥)机制与**EventOS**打通事件总线,以便对**EventOS**的分布式特性进行支持。
+ 重点关注三种应用场景:中小资源单片机,作为模块向其他软件系统的嵌入和可靠性要求较高的嵌入式场景。
**EventOS Nano**的前身,曾经让我在过去的工作中受益匪浅,让我非常高效的写出了很多可靠的程序,能力和回报都有了质的提升。现在,我将以前的技术成果整理重构,在各方面都向着规范的开源项目靠拢,包括源码、注释、文档、单元测试和例程等等。未来,**EventOS Nano**这个项目我会一直完善下去。我的目标是,将**EventOS Nano**项目在2022年底前做成Gitee推荐项目,2024年年底前将**EventOS**项目,做成Gitee的GVP项目。造福更多的嵌入式工程师。
### 二、文档与博客
**EventOS Nano**的移植和入门,在**documentation**文件夹里,可以参考以下几个文档:
+ [快速入门文档](/documentation/UM-02-001-QuickStart.md)
+ [裸机移植文档](/documentation/UM-02-002-PortMetal.md)
+ [开发环境搭建](/documentation/UM-02-003-DevEnv.md)
**EventOS Nano**有关的博客:
+ [如何理解事件](/blog/如何理解事件.md)
### 三、为什么叫做EventOS Nano?
之所以叫**Nano**,是因为它真的非常轻量。全功能的**EventOS Nano**目前经MDK编译后,框架本身占用RAM 200Byte,ROM约3.5KB(优化等级为-O3)或4.5KB(优化等级为-O0)。裁剪后,最小功能的**EventOS Nano**,目前经MDK编译后,框架本身占用RAM 172Byte,ROM约1.2KB(优化等级为-O3)或1.5KB(优化等级为-O0)。
之所以叫**EventOS Nano**,一是因为它的技术特色与核心思想,就是**事件驱动**;二是因为它是另外一个开源项目**EventOS**(准备中)的简化实现,**EventOS**是一个**事件驱动**的、**分布式**的、**可跨平台开发**的嵌入式RTOS,面向32位单片机和更高处理器的嵌入式开发平台。
### 四、EventOS Nano主张的编程思想
#### **事件驱动**与**事件总线**
事件驱动和事件总线,是**EventOS Nano**的核心,也是**EventOS**的核心。事件机制,与RTOS中事件概念完全不同,它更像是windows编程中的消息。事件,可以认为是**主题 + 不定长数据**,通过事件,可以极大解耦模块间的耦合,增强软件的可测试性,还可以进行跨平台开发和分布式扩展。
#### **防御式编程**
**EventOS Nano**使用了大量的断言,对系统的运行过程和用户对**EventOS Nano**的使用进行大量的检查。我们强烈建议,用户要对断言接口函数进行精心的设计和实现,在实际的产品代码中,依然打开断言。这样,软件将以非常快的速度,收敛于稳定状态。
#### **跨平台开发**
**EventOS Nano**提倡跨平台开发。所谓跨平台开发,就是在Windows和Linux等便捷友好的开发环境里,完成绝大部分的开发工作,包括编程、调试、运行和单元测试等工作,然后在目标平台上进行最后的移植、调试和适配工作。跨平台的优点有很多,比如开发效率非常高、工程师进入到更多的编程领域和程序稳定可靠等。**EventOS Nano**主要在32位MinGW平台和Linux平台上开发。开发环境的搭建,见文档[开发环境搭建](/documentation/UM-02-003-DevEnv.md)。当然,也完全可以用MDK在单片机上直接开发,效率稍低而已。
#### **消除耦合**
无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。
### 五、EventOS Nano项目的维护原则
#### 但行好事,不问前程
我完全没有考虑过**EventOS Nano**将来能够如何,而且最近**EventOS Nano**的发展有点超出我预计,我有点受宠若惊。更多的人了解**EventOS Nano**是一件好事,敦促这我把**EventOS Nano**项目尽快做好,做完善,做成一个工业级的软件产品,为广大的嵌入式工作者创造便利。希望**EventOS Nano**最终被众多工程师和企业认可,并在成千上万的嵌入式产品中广泛应用起来,那就不枉我这些年深挖技术的努力。
#### 源码文档并进
我深知完善丰富的文档,对一个开源项目的重要意义。因此,我坚持每一个特性的升级,每一个BUG的修复,都跟随着相应的文档。让**EventOS Nano**和**EventOS**项目的文档专业化、体系化,包含用户手册、版本特性、原理说明、博客、例程等等。
#### 单元测试优先
嵌入式的开源项目,用户最关心的,是软件的可靠性。单元测试,是保证软件健壮与可靠的重要手段。对于**EventOS Nano**这种系统级、框架级的软件,稳定性与可靠性更加重要。从**EventOS Nano**诞生之日起,它就是面向单元测试的。详尽而严谨的单元测试,保证了**EventOS Nano**将绝大多数的BUG,消除在了开发阶段。**EventOS Nano**的每一次重构、升级与发布,都是经过了严谨的单元测试的。
#### 用户至上,需求至上
软件如何发展,代码向哪个方向前进,**EventOS Nano**完全听从用户们的声音,完全从需求出发。我们从各个渠道,微信、QQ、论坛等获取的意见建议,都将体现到**EventOS Nano**的开发中去。
### 六、代码结构
#### **核心代码**
+ **eventos/eventos.c** EventOS Nano状态机框架的实现
+ **eventos/eventos.h** 头文件
+ **eventos/eventos_config.h** 对EventOS Nano进行配置与裁剪
#### **第三方代码库**
+ **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** 电子表例程,状态机的典型应用。
#### **tools**
一些Python脚本和工具。
#### **文档**
文档包含Doxygen代码文档的生成路径(未完成)、图片、代码相关文档(如快速入门文档、移植文档、开发环境搭建说明文档等)。