SAFERTOS中的Event Multiplexing机制应用

浏览:245来源:本站时间:2024-09-23

多路复用技术通常描述了多个信号的公共载波的使用,它通常包括一个多路复用器,接收多个信号,将其合并在一起传输,然后通过解复用器将合并后的信号分解为原始的独立信号。

基于事件多路复用机制,任务可以使用事件多路复用对象(multiplexer),等待几个不同事件(信号)中的某一个事件发生。事件发生后,任务代码将处理发生的事件(解复用器)。


功能

RTOS通常提供以下功能以使用事件多路复用机制:

1. 创建一个事件复用对象,关联到任务,用于等待事件。

2. 将任务感兴趣的事件添加/注册到事件多路复用对象。

3. 更改添加到事件复用对象的事件。

4. 如果任务处理完事件,删除事件。

5. 等待事件发生。等待注册事件发生的同时,任务被阻塞,不会消耗CPU时间。

6. 注册的事件发生时,通知任务拆分事件。事件复用对象提供发生事件的信息,因此任务只需处理这些事件。


事件复用的示例

一个事件多路复用的用例是处理来自不同的设备用户输入。假设我们有一个任务K接收键盘输入,做一些初始处理比如去抖动,并将字符放入队列KeyIn中。第二个任务M接收鼠标输入,执行初始化处理如抖动消除或双击检测,并将命令放入另一个队列MouseIn。第三个任务P处理多个设备的输入,等待输入的发生。任务P可以使用事件复用对象注册其消息,等待队列KeyIn和队列MouseIn的事件,任务代码将等待任一事件的发生,并处理它们。图1展示了一种处理流程。

图片

图1 事件复用示例


SAFERTOS中的事件多路复用

基于FreeRTOS功能模式的SAFERTOS安全操作系统,提供了事件复用对象机制,相关API函数:

xEvtMplxCreate

创建事件复用对象。在创建事件复用对象时,需要一个缓冲区来存储发生的事件,如evtMplxObjectEvents和所有者任务。

xEvtMplxAddObjectEvents

注册事件,向事件复用器添加对象-事件对。

xEvtMplxModifyObjectEvents

修改事件复用器中的对象-事件对。

xEvtMplxRemoveObjectEvents

从事件多路复用器中删除对象-事件对。

xEvtMplxWait

阻塞该任务,直到事件复用对象中注册的事件发生,可以指定超时时间,防止无限阻塞。从xEvtMplxWait函数返回时,任务代码可以读取evtMplxObjectEvents缓冲区内容,了解发生了哪些事件。

SAFERTOS实现了6种可以注册到事件复用对象的事件类型。每个事件必须相关联一个目标对象。可能发生的事件有:

•evtmplxQUEUE_MESSAGE_WAITING

•evtmplxQUEUE_SPACE_AVAILABLE

•evtmplxSEMAPHORE_AVAILABLE

•evtmplxMUTEX_AVAILABLE

•evtmplxTASK_NOTIFICATION_RECEIVED

•evtmplxEVENT_GROUP_BITS_SET

SAFERTOS 是WHIS 公司开发的用于嵌入式处理器的预认证安全实时操作系统 (RTOS),提供卓越的性能和预先认证的可靠性,同时使用最少的系统资源。


麦克泰技术代理WHIS安全预认证RTOS产品,具有丰富的RTOS应用与安全认证方面的知识和经验,欢迎咨询麦克泰info@bmrtech.com

京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司