最近有幸接触到了一款新的开源 RTOS 项目,这个项目与传统的 RTOS 不太一样,它是以事件驱动为核心的 RTOS。因此,这个项目的名字为 EventOS。不同于传统的 RTOS 以时钟节拍为驱动核心。

在发布不足一个月的时间,就晋级为 Gitee 推荐项目,目前获得了 216 stars。未来可期~

项目地址:

https://gitee.com/event-os


怎样才能做出这个项目

作者大佬的原话:

说实话,是兴趣爱好,再加几十万行代码的磨练。还要主导架构过10万代码级别的大项目。

果然,大佬就是大佬。抓紧时间,多跟优秀的前辈学习吧。

简介

EventOS 将以事件总线、分布式技术和跨平台开发为产品特色,打造一个完整的技术生态,为广大企业用户和嵌入式开发者们,提供高可靠、高效率、高性能的开发平台。

EventOS 是一个事件驱动的、分布式的、可跨平台开发的嵌入式RTOS,面向32位单片机和更高处理器的嵌入式开发平台。

截至目前,作者发布了两个版本,分别是:

  • EventOS Nano 支持事件驱动、面向对象、状态机框架,以事件驱动和轻量为特色。定位于熟悉事件驱动与状态机框架,或者感兴趣的用户。

  • EventOS Basic 支持传统的任务模式,以协作内核、简洁和超轻量为特色,不涉及事件驱动,不强制面向对象,不增加复杂特性。定位于解决简单应用的并发问题。

其中,eventos-nano 版本 开源不到一个月,就被评为推荐项目。yyds。连作者都表示出乎意料。

eventos-basic 版本是作者刚刚开源的,比 eventos-nano 还轻量,基于协作式的内核。

eventos-nano

之所以叫 Nano,是因为它真的非常轻量。全功能的 EventOS Nano 目前经MDK编译后,框架本身占用 RAM 200 Byte,ROM 约 3.5KB(优化等级为-O3)或 4.5KB(优化等级为 -O0)。裁剪后,最小功能的 EventOS Nano,目前经 MDK 编译后,框架本身占用RAM 172Byte,ROM约1.2KB(优化等级为-O3)或1.5KB(优化等级为-O0)。

之所以叫 EventOS Nano,一是因为它的技术特色与核心思想,就是事件驱动;二是因为它是另外一个开源项目EventOS 的简化实现。

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 电子表例程,状态机的典型应用

特性

EventOS Nano 的主要特性:

  • 事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。

  • 全局事件队列,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。

  • 协作式内核,优点是不会产生资源竞争,极度可靠。

  • 极度轻量,便于嵌入其他系统,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限。

  • 功能强大的软定时器,以时间事件的形式,对软定时器功能,进行优雅且功能强大的实现。

  • API 设计得更加简明,更加符合本土嵌入式工程师的习惯。

  • 移植方便,只需实现少数几个接口函数即可。

  • 未来会使用 Event Bridge(事件桥)机制与 **EventOS **打通事件总线,以便对 EventOS 的分布式特性进行支持。

  • 重点关注三种应用场景:中小资源单片机,作为模块向其他软件系统的嵌入、可靠性要求较高的嵌入式场景。

编程思想

1. 事件驱动与事件总线

事件驱动和事件总线,是 EventOS Nano 的核心,也是 EventOS 的核心。事件机制,与 RTOS 中事件概念完全不同,它更像是 windows 编程中的消息。事件,可以认为是主题 + 不定长数据,通过事件,可以极大解耦模块间的耦合,增强软件的可测试性,还可以进行跨平台开发和分布式扩展。

2. 防御式编程

EventOS Nano 使用了大量的断言,对系统的运行过程和用户对 EventOS Nano 的使用进行大量的检查。在实际的产品代码中,打开断言。软件将以非常快的速度,收敛于稳定状态。

3. 跨平台开发

EventOS Nano 提倡跨平台开发。跨平台的优点有很多,比如开发效率非常高、工程师进入到更多的编程领域和程序稳定可靠等。EventOS Nano 主要在 32 位 MinGW 平台和 Linux 平台上开发。开发环境的搭建,见文档开发环境搭建。当然,也完全可以用MDK在单片机上直接开发,效率稍低而已。

4. 消除耦合

无论是广播式的事件发送机制,还是发布-订阅式的事件发送机制,实际上,都是为了消除软件模块间的耦合。

eventos-basic

EventOS Basic,是一个超级简洁的协作式内核。

它的特点有二:一是协作式,不抢占,按优先级轮询,当前任务不释放CPU控制权,其他任务得不到CPU,二是超级轻量(ROM 968字节,RAM 64字节,-O3)。目前提供出来的功能非常基础,列举如下:

  • 任务创建

  • 任务退出

  • 任务内延时

  • 获取系统时间

这个代码,功能虽然少,但对于任务并发来说,已经完全足够了。由于是协作内核,任务之间不抢占,完全可以十分放心的使用全局变量,进行任务间通信和信息共享。但有一个需要注意的点:用户任务之间不抢占,但是对空闲任务是抢占的,也就是空闲任务是可以被随时中断的。

代码结构

核心代码

核心代码只有两个文件:

  • eventos/eventos.c EventOS Basic 内核源码

  • eventos/eventos.h  头文件

例程代码

  • stm32f030 对ARM Cortex-M0芯片例程。

  • stm32f103 对ARM Cortex-M3芯片例程。

  • stm32f429 对ARM Cortex-M3芯片例程。

特性

EventOS Basic  的主要特性:

  • EventOS Basic在传统的任务机制和 EventOS Nano 的事件机制之间,提供了一个过渡。

  • 协作,不抢占。抢占的内核,FreeRTOS、uC/OS-II、RTX 和 RT-Thread 等,已经做的足够好了。EventOS Basic不重复制造轮子。

  • 事件功能。事件,是 **EventOS **项目的灵魂,是核心,也是 EventOS 的名字与招牌。在 EventOS Basic下,即使有了事件功能,也仅仅是任务间的通信机制,用户自己决定什么时候接收事件。没有事件的驱动,用户代码依然在任务中运行

未来扩展

  • 软定时器

  • 事件队列(非事件驱动、仅用于任务间通信)。

  • 事件桥(与EventOS连接构成分布式应用)

线程锁、信号量,都没有必要在EventOS Basic增加,因为EventOS Basic是协作式,非抢占的内核。邮箱与消息队列等功能,将由事件队列承担。

最后

对于这款新开源的 RTOS 介绍了这么多,难道不想上手试试吗?

目前这个项目还在起步阶段,作者会充分考虑用户提出的意见,对项目进行开发调整。有任何需求可以跟作者交流。

当然,你也可以参与进来,对于提高自己的技术能力大有裨益。

最后,可以加作者微信(Event-OS),与大佬直接对话,交流技术。简直不要太香了~

一款让人耳目一新的事件驱动型RTOS相关推荐

  1. 微信号码开通状态检测助手让人耳目一新

    在这个更新很快的世界里,我们见识的一些软件助手应该也很多把,不仅可以为我们提高工作的效率,还可以省不少的时间呢.在寻找客户的时候,很多人都遇到了难题,每天的限制让添加的粉丝少之甚少,而微信号码开通状态 ...

  2. 小伙用C++技术实现3D俄罗斯方块游戏,3D元素让人耳目一新

    3d俄罗斯方块很好玩,也是很经典的,可以算是最经典的游戏了.现在这里有很多3d俄罗斯方块,那就让这些方块顺利钓到天平上吧! VC++基于OpenGL技术实现的3D俄罗斯方块游戏,游戏玩法与以往的俄罗斯 ...

  3. colorpix取色小工具_五款互联网人必备的免费工具,超级实用

    运营公举小磊磊(公众号ID:gongjulei)所有文章均为独家原创,未经许可,不得转载. 一名互联网人,从来都不会嫌工具多.小公举今天找到了5款互联网人必备的免费工具,都是我亲自试用过的.话不多说, ...

  4. FastBuilder 一款让人上瘾的新一代开发神器

    这是一款让人上瘾的新一代开发神器,彻底告别Controller.Service.Dao等传统开发方式. FastBuilder 将不再区别"前端"与"后端"的概 ...

  5. 一款技术人必备的接口测试神器:Apifox

    前言 今天,我想给大家推荐一款技术人必备的接口测试神器:Apifox,这个呢我就不多说废话了我们直接进入正题. 一. 背景 作为互联网行业技术从业者,接口调试是必不可少的一项技能,通常我们都会选择使用 ...

  6. 7款让人惊叹的HTML5粒子动画特效

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! HTML ...

  7. 10款让人惊叹的HTML5图片动画特效

    现在网页上的图片已经不再是10几年前那种低像素的静态图片了,有了HTML5和jQuery,我们可以让一张普通的图片变得多姿多彩,特别是利用HTML5,还可以实现一些很复杂的图片动画特效.下面分享的10 ...

  8. yahoo助手_安利一款日本人常用的换乘助手app

    日本的铁路密度位居世界前列,线路纵横交错,繁多复杂.要搞清楚到达目的地的线路换乘方案,即使对日本人而言也并不是一件容易的事,更不必说初来乍到的游客了.于是乎,各种面向日本铁路系统的换乘app应运而生. ...

  9. ppt怎么让人耳目一新_哦,您认为Java很烂吗? 多么令人耳目一新

    ppt怎么让人耳目一新 还在谈论销售会议中的信贷紧缩吗? 对猪流感感到惊慌? 那那个怪异的Lady Gaga怎么样-她接下来会做什么? 所有这些都是2009年Twitter的主要趋势.2009年也&q ...

最新文章

  1. Android 通过创建一个类来传递对象
  2. 2021-08-29概率论—第四章随机变量的数字特征
  3. Linux 命令之 grep -- 强大的文本搜索工具/正则表达式搜索
  4. iOS 添加导航栏两侧按钮
  5. alphazawgyiversion3 安装口令_车窗晴雨挡到底有着什么用?为什么那么多人安装?酷斯特玩车...
  6. C++---string类接口整理与深浅拷贝
  7. python函数测试_Python测试函数的方法之一
  8. 除法运算、商、余数与取模
  9. transform子元素,绝对定位失效
  10. bim服务器型号,国外有哪几个知名的BIM服务器?BIM服务器全介绍!(三)
  11. Moya网络层 + ObjectMapper数据转模型
  12. c语言编程我爱你红色代码,C语言告白代码,一闪一闪亮晶晶~
  13. dumpDex脱壳教程
  14. Windows任务栏实现动态自动隐藏并透明
  15. 单条知识:什么是平面束方程
  16. 浏览器打开页面的几种方式
  17. win10 计算机菜单,win10系统计算机界面菜单栏不见了的还原方案
  18. 转载---SQL Server XML基础学习之7--XML modify() 方法对 XML 数据中插入、更新或删除...
  19. 用ECS做HexMap:鼠标点击六边形单元涂色
  20. 频繁模式挖掘Frequent Pattern Mining

热门文章

  1. 华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】
  2. macOS无法验证此App不包含恶意软件。
  3. Redis学习之expire命令
  4. 【码农开店连载记】-- 0 开坑啦
  5. 差异化地推手段,让营销效果翻十倍!
  6. 计算机程序怎么读英语,编程序是什么意思
  7. 鲑鱼回游java游戏_鲑鱼洄游 一段悲壮的落幕
  8. 笔记本电脑更改计算机驱动怎么进不去,笔记本电脑进入不了BIOS的原因与解决办法...
  9. Ubuntu 18.04及几款应用的安装
  10. 计算机软件专业河南省专科学校,计算机相关专业河南省哪个学校好