【EventOS Nano】EventOS Nano初步了解

EventOS Nano是什么?

EventOS Nano是一个面向单片机、事件驱动的、分布式的、可跨平台开发的嵌入式开发平台。主要有两大技术特色: 事件驱动超轻量

EventOS主要特性如下:

  • 事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。事件支持 广播发送,或者 发布-订阅机制两种方式(二选一)
  • 全局事件队列,摒弃每个线程拥有自己的事件队列的方式,只有一个全局事件队列,极限对压缩对RAM的占用
  • 协作式内核,优点是不会产生资源竞争,非常可靠。
  • 功能强大的软件定时器,以时间事件的形式对软定时器功能,进行功能强大的实现
  • 极度轻量,便于嵌入其他系统,除事件总线外的所有特性(层次状态机,平面状态机,发布-订阅机制,事件桥等)均可裁剪,资源可低至ROM1.2Kb,RAM 172Byte,可以作为子系统,嵌入到其他软件系统中去
  • 未来会使用Event Bridge(事件桥)机制与EventOS打通事件总线,以便对EventOS的 分布式特性进行支持。
  • 重点关注三种应用场景:中小资源单片机,作为模块向其他软件系统的嵌入和可靠性要求较高的嵌入式场景。

如何理解事件?

嵌入式系统中,一切发生或者已发生的事情,只要导致了内部数据的变化,都可以被认为是事件

比如,按键的按下或者抬起,串口接收到一组数据,CAN总线接收到一个报文,某个通信协议连接失败,定时500ms时间到,电池电量将到某个阈值之下,温度传感器高于某个阈值,避障传感器检测到障碍物,等等,都可以认为是事件。

是对系统中所发生的事,进行的高级抽象

运用事件机制,可以有效地对RTOS中存在的多种IPC(线程间通信)方式,进行整合。

EventOS Nano主张的编程思想

1.事件驱动与事件总线

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

2.防御式编程

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

3.跨平台开发

EventOS Nano提倡跨平台开发。所谓跨平台开发,就是在windows和Linux等便捷友好的开发环境里,完成绝大部分开发工作,包括编程、调试、运行和单元测试等工作,然后再目标平台上进行最后的移植、调试和适配工作

4 .消除耦合

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

EventOS Nano的代码结构

1.核心代码

  • eventos/eventos.c EventOS Nano状态机框架的实现
  • eventos/eventos.h 头文件
  • eventos/eventos_config.h 对EventOS Nano进行配置与裁剪

2.三方代码库

  • RTT Segger Jlink所提供的日志库,依赖JLink硬件。
  • unity 单元测试框架

3.例程代码

  • freertos对FreeRTOS的适配例程
  • posix对符合POSIX标准的操作系统(如linux,MinGW等)的适配例程
  • stm32f030对ARM Cortex-M0芯片的裸机运行(无RTOS)的例程
  • stm32f103对ARM Cortex-M3芯片的裸机运行(无RTOS)的例程
  • test对源码进行的单元测试例程
  • digital_watch电子表例程,状态机的典型应用。

4.tools

一些Python脚本和工具

下一步:编译运行EventOS demo,实际跑跑看

Original: https://www.cnblogs.com/Wangzx000/p/16492172.html
Author: _Wangzx
Title: 【EventOS Nano】EventOS Nano初步了解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607507/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python schedule 库定时任务

    Python schedule 库定时任务 schedule的使用 用于scrapy定时任务设置 import schedule import time def job(): pr…

    Linux 2023年6月13日
    091
  • XShell免费版的安装配置教程以及使用教程(超级详细)

    ​一、 XShell的作用 XShell可以在Windows界面下来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。它支持 RLOGIN、SFTP、SERIAL、T…

    Linux 2023年5月27日
    0155
  • 全新UI西游H5决战天宫游戏详细图文架设教程

    前言 想体验经典Q版西游霸服快乐吗?想体验满级VIP的尊贵吗?想体验一招秒杀的爽快吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在全新UI西游H5决战天宫! 本文讲解决战天宫架…

    Linux 2023年6月7日
    091
  • [20211105]索引分裂 块清除 日志增加.txt

    [20211105]索引分裂 块清除 日志增加.txt –//题目起的有点怪,只是我昨天在测试时遇到的怪问题,我通过测试环境演示出来。–//当非主键索引发生…

    Linux 2023年6月13日
    086
  • 六、基本权限

    (一)基本权限 文件系统权限1、权限的作用:保证系统安全性,称为普通权限或文件系统权限,作用是保护文件,让有权限的用户可以访问,否则不能访问,linux文件系统权限,主要设置在文件…

    Linux 2023年6月7日
    093
  • 利用Hugo与GitHub仓库搭建免费的个人博客

    软件下载 配置环境变量 检验环境变量 创建博客文件 创建站点文件夹 下载主题 新建博客 将个人博客部署到github存储仓库 保姆级 基于Win10环境下的Hugo免费博客搭建 软…

    Linux 2023年6月7日
    0102
  • MHA实现MySQL的高可用性

    对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现。 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个…

    Linux 2023年6月7日
    0100
  • 初识MySQL数据库

    一 、引言 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写? 由于在同一时段抢票的人数太多,所以你的程序不可…

    Linux 2023年6月14日
    0113
  • Redis 内存淘汰策略

    实际上redis定义了【八种内存淘汰策略】来处理redis内存满的情况 noeviction:直接返回错误,不淘汰任何已经存在的redis键 allkeys-lru:所有的键使用l…

    Linux 2023年5月28日
    093
  • 常见网络安全设备

    一、防火墙定位:访问控制类产品,网络出现后的第一类安全产品。功能:隔离内网、外网以及DMZ区(业务系统对外发布区,Web应用服务器,邮件服务器等)并控制用户访问。部署方式:通常部署…

    Linux 2023年6月14日
    077
  • 零成本搭建个人博客之迁移Pages和域名

    在上文[零成本搭建个人博客之搭建篇]中,我将Hugo博客搭建到 Github Page上,后来考虑到用 Cloudflare cdn加速,干脆就把博客站点迁移到Cloudflare…

    Linux 2023年6月7日
    076
  • [Git系列] 前言

    Git 简介 Git 是一个重视速度的分布式版本控制和代码管理系统,最初是由 Linus Torvalds 为开发 Linux 内核而设计并开发的,是一款遵循二代 GUN 协议的免…

    Linux 2023年5月27日
    0131
  • Windows server 2012 安装exchange 2013

    一、实验环境 操作系统:Windows server 2012 R2 邮件系统版本:exchange 2013 安装的服务:AD CS、AD DS、IIS、DNS 二、安装exch…

    Linux 2023年6月7日
    0105
  • 使用Kotlin协程配合Retrofit发送请求

    Retrofit2.6开始增加了对Kotlin协程的支持,可以通过suspend函数进行异步调用。本文简单介绍一下使用Kotlin协程配合Retrofit使用,发起网络请求。 ap…

    Linux 2023年6月8日
    095
  • [ Linux ] 设置服务器开机自启端口

    https://www.cnblogs.com/yeungchie/ 需要用到的工具: crontab iptables crontab.set SHELL=/bin/bash P…

    Linux 2023年6月7日
    097
  • SSH 完全教程 2

    SSH 默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是b比密码登录更好的解决方案。 密钥是什么 密钥(key)是一个…

    Linux 2023年6月7日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球