当前位置: 首页 > news >正文

EventOS:面向MCU的事件驱动框架

一、EventOS是什么

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

EventOS的事件驱动框架

二、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/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3%E4%BA%8B%E4%BB%B6.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

  1. 获取源码:项目主要托管在Gitee上,你可以访问 https://gitee.com/event-os/eventos 获取最新源代码。

  2. 开始移植:EventOS的移植过程被设计得尽可能简单。通常,你只需要实现少数几个平台接口函数即可。可以参考项目自带的stm32f030stm32f103等裸机例程。

  3. 编写应用:在你的应用程序中,你将主要与状态机和事件打交道。基本步骤包括:

    • 初始化EventOS框架。

    • 创建你的状态机(功能模块)。

    • 在状态机中处理接收到的事件。

    • 从主函数启动EventOS的事件调度循环。

  4. 跨平台开发: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字节
事件机制支持广播、发布-订阅两种模式不涉及事件总线
适用场景中小资源单片机、作为子系统嵌入、高可靠性场景对资源极度敏感,无需复杂事件通信的场景

http://www.dtcms.com/a/578085.html

相关文章:

  • 视频直播点播平台EasyDSS:打造高品质赛事直播的全链路解决方案
  • 广州网站制作哪家全面万达做的电商网站
  • C# 分部类读取学生信息
  • 分布式事务的实现方案:从理论到实践的全方位解析
  • 瑞萨RH850使用记录(三):看门狗(选项字)、AD、CAN、软复位(复位原因)
  • web应用构建与部署的本质区别
  • 源码管理 网站2021年企业所得税怎么征收
  • 建设小说网站的系统有哪些目前最新推广平台
  • iOS文件管理工具深度剖析,从系统沙盒到跨平台文件操作的多工具协同实践
  • 数据结构—排序算法篇二
  • 基于SpringBoot2+Vue2的实验室和实验器材预约平台
  • 比较好的网站建设技术开发wordpress4.7.2写文章
  • 产品定制网站电子商务平台建设内容
  • 手机射频阻抗匹配调试方法
  • 手机网站打不开被拦截怎么办wordpress漂浮按钮
  • Chaos-nano 协作式异步操作系统:赋能 AVR 8 位单片机的革新之路
  • 实对称矩阵的正交相似对角化
  • 印度外贸网站有哪些专注网站建设怎么样
  • Kustomize实战:PV/PVC多环境管理
  • 成都网站平面设计吴桥网站
  • Adobe Photoshop CS6 Lite:PS极端简化版,压缩后大小仅50M,Photoshop精简版
  • 做新闻类网站还有市场吗莱芜最好的网站建设公司
  • 电力变压器绕组变形多物理场耦合建模与在线监测技术
  • WLAN_频段配置
  • 网站策划书的撰写流程是什么福州网站建设 网站设计 网站制作
  • 进程控制核心(含进程地址空间)
  • 【OpenGL学习】第2课:用OpenGL创建第一个窗口
  • Redis单线程还是多线程?
  • 做网站现在用什么语言网站做优化的好处
  • 做网站需要什么知识wdcp 快速迁移网站