一、概述
EventOS,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。
EventOS的主要特性列举如下:
(1)事件总线为核心组件,灵活易用,是进行线程(状态机)间同步或者通信的主要手段,也是对EventOS分布式特性和跨平台开发进行支持的唯一手段。事件支持广播发送,或者发布-订阅机制两种方式(二选一)。
(2)全局事件队列,摒弃每个线程(状态机)拥有自己的事件队列的方式,只有一个全局事件队列,极限压缩对RAM的占用。
(3)协作式内核,优点是不会产生资源竞争,极度可靠。
(4)极度轻量,便于嵌入其他系统,除事件总线外的所有特性(层次状态机、平面状态机、发布-订阅机制、事件携带数据、事件桥等)均可裁剪,将资源占用降至极限,可低至ROM 1.2KB,RAM 172Byte。可以作为子系统,“悄悄”嵌入到其他软件系统中去。
(5)功能强大的软定时器,以时间事件的形式,对软定时器功能,进行优雅且功能强大的实现。
二、应用
EventOS是以事件总线为核心,事件可分为两种一种是时间定时事件,一种是topic主题事件。其中时间事件也可以理解成一种时间片轮询的方式;Topic事件是一种订阅发布的机制,先订阅主题,用户发布主题,主题可携带数据。详细参考文档:
blog/如何理解事件.md · eLab/eventos - Gitee.com
1、移植
1)源码下载:
eLab/eventos - 码云 - 开源中国
2)文件准备
把文件demo例程中eventos的驱动文件复制出来,在APP文件里面添加一些自己的测试文件。
3)根据例程跑一个简单的LED以时间为事件的驱动函数。这样就完成了移植工作。文档最后提供了移植好的工程文件开发平台是STM32F407
2、源码解析与应用
例程是一个简单的LED以时间为事件的驱动事件,我们要测试Topic事件。
1、追加一个串口事件
其中eventos_config.h里面需要修改执行的数量。
定义串口事件
其中初始化必须执行状态转换函数
初始化的实现要先去订阅事件。
应用的时候发布事件:
编写测试程序
测试程序是每隔4秒发送一次Topic事件。在main函数里面一种轮询时间片轮询任务和事件驱动任务。
测试结果:
这就是一个简单是Topic事件的测试流程。