# eventos-nano **Repository Path**: daniel_wuyuezhou/eventos-nano ## Basic Information - **Project Name**: eventos-nano - **Description**: 超轻量级嵌入式开发框架,事件驱动,占用资源小,可运用于各型单片机。核心技术是事件队列,比传统的消息队列更易用,更强大,整合了层次化与平面状态机框架。可深度裁剪,极度轻量化,移植方便。 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/event-os - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 352 - **Created**: 2022-03-07 - **Last Updated**: 2022-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明 ------- ### 一、EventOS Nano是什么? EventOS Nano,是一个面向小资源单片机(Cortex-M0/16/8位单片机)、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。EventOS Nano的主要特性列举如下: + **事件总线**为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。可以作为子系统,“悄悄”嵌入到其他软件系统中去。 + **全局事件队列**,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。 + **极度轻量,便于嵌入其他系统**,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限。 + 仅支持**软实时**,不再关注硬实时特性,将对资源(尤其是RAM)的占用降至极限。 + 事件支持**广播**发送,或者**发布-订阅**机制两种方式(二选一)。 + 以时间事件的形式,优雅实现了**软定时器**。 + API的设计,更加简明,更加符合本土嵌入式工程师的习惯。 + 移植方便,只需实现少数几个接口函数即可。 + 未来会使用**Event Bridge**(事件桥)机制与EventOS打通事件总线,以便对**EventOS**的分布式特性进行支持。 + 重点关注三种应用场景:小资源单片机,作为模块向其他软件系统的嵌入和可靠性要求较高的嵌入式场景。 如果你想写一个清晰的、结构健壮且利于维护的源代码,又不想使用传统的RTOS,那么EventOS Nano是你的不二选择。 **EventOS Nano**的前身,曾经让我在过去的工作中受益匪浅,让我非常高效的写出了很多可靠的程序,能力和回报都有了质的提升。现在,我将以前的技术成果整理重构,在各方面都向着规范的开源项目靠拢,包括源码、注释、文档、单元测试和例程等等。未来,**EventOS Nano**这个项目我会一直完善下去。我的目标是,将**EventOS Nano**项目在2022年底前做成Gitee推荐项目,2024年年底前将**EventOS**项目,做成Gitee的GVP项目。造福更多的嵌入式工程师。 ### 二、为什么叫做EventOS Nano? 之所以叫**Nano**,是因为它真的非常轻量,EventOS Nano的设计目标是,经过适当裁剪,能够在MCS51(ROM:4KByte,RAM:256Byte)中良好运行。 之所以叫**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)。 #### **消除耦合** 无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。 #### **够用就好** **EventOS Nano**在性能方面,主张够用就好的理念。鉴于绝大多数的嵌入式应用,对实时性的需求,仅止于软实时和非实时的层面上,**EventOS Nano**不再将硬实时,作为支持的重点,而将支持重点放到易用性和轻量级上来。 因此,**EventOS Nano**暂时不支持抢占式内核(**EventOS**支持抢占和硬实时),暂时仅支持协作式核心。协作式内核的最大优点,就是对共享资源,永远都是线程安全的,不必再加锁,因此也会带入资源竞争产生的各种BUG。软件可靠性就有保证。后续如果有需求,再对抢占式内核进行支持。 在数据结构的设计上,为了极限压缩RAM的占用,有时可能导致不能**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代码文档的生成路径(未完成)、图片、代码相关文档(如快速入门文档、移植文档、开发环境搭建说明文档等)。 ### 五、快速入门 **EventOS Nano**的移植和入门,在**documentation**文件夹里,可以参考以下几个文档: + [快速入门文档](/documentation/UM-02-001-QuickStart.md) + [裸机移植文档](/documentation/UM-02-002-PortMetal.md) + [开发环境搭建](/documentation/UM-02-003-DevEnv.md) ### 六、联系方式 邮箱:event-os@outlook.com 除了邮箱之外,也可以加微信联系我,请注明**技术讨论**等相关字样。 ![avatar](/documentation/figures/wechat.jpg)