全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)
这里开篇就讲了ChibiOS中的事件机制非常强大,算是OS的一个子系统功能。提供了多事件等待、事件与线程多对多、异步广播同步检查等功能。
事件机制涉及到的三个对类别分别是:事件源、事件监听器、事件标志位及线程。
事件源涉及到的两个操作:注册、广播。
什么是事件的状态位呢?以串口驱动涉及到的可能设计为例,这个状态可以是通信的接收、发送、校验以及报错等信息。
把一个事件监听器注册到事件源上,同时会绑定一个线程。
事件源跟监听器可以是一对多的,而监听器与线程是一对一的,但是这样的机制是可以支持事件源与线程的多对多关系的。
事件的掩码有两种:有效掩码、PENDING标志。
1.每一个线程必须有一个不同的监听对象。
2.事件的等待可以是等待单一的事件,也可以是等待任意事件,或者是等待全部的事件一起发生。
这里给出来了两段伪代码,一个是通知注册到同一个事件源的全部监听器;另一个是事件可以由一个线程直接发送给另一个线程。
关于事件的API是非常多的,也可以看得出来这个机制使用的灵活度非常高。
这里给出来的一个例子处理了多个事件,处理的方式是等到任何一个事件都会触发wait的结果。接下来,根据返回的时间信息进行处理逻辑的拆分。
第二个例子是涉及到中断的一个例程,ISR中给一个线程直接发信号触发一个动作。其实,很多操作系统中都是提供这样的机制的,主要是的作用是通过这种转换把很多裸系统中需要在ISR中处理的功能转移到线程中处理。不仅可以充分利用OS的线程管理能力,而且还可以保证中断的响应实时性。
版权归原作者 grey_csdn 所有, 如有侵权,请联系我们删除。