RT-Thread学习笔记——事件集

本文深入探讨RT-Thread的事件集机制,包括事件集的工作原理、相关函数的使用,并通过STM32的实例演示事件集如何实现线程间的同步。文章详细介绍了事件集的创建、删除、发送和接收操作,以及在实际开发中的应用。
摘要由CSDN通过智能技术生成

前言

本文学习RT-Thread的事件集,事件集也是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多,多对多的线程间同步。将理论讲事件集的工作机制以及相关函数,后面用RTT&正点原子联合出品的潘多拉开发板进行实验。

一、事件集的工作机制

1、一个线程与多个事件的关系可设置为:其中任意一个事件唤醒线程,或几个事件都到达后才唤醒线程进行后续的处理;同样,事件也可以是多个线程同步多个事件。

2、RT-Thread 定义的事件集有以下特点:(1)事件只与线程相关,事件间相互独立。(2)事件仅用于同步,不提供数据传输功能;(3)事件无排队性,即多次向线程发送同一事件 (如果线程还未来得及读走),其效果等同于只发送一次。

3、每个线程都拥有一个事件信息标记,它有三个属性,分别是 RT_EVENT_FLAG_AND(逻辑与),RT_EVENT_FLAG_OR(逻辑或)以及 RT_EVENT_FLAG_CLEAR(清除标记)。当线程等待事件同步时,可以通过 32 个事件标志和这个事件信息标记来判断当前接收的事件是否满足同步条件。 如上图所示,线程 #1 的事件标志中第 1 位和第 30 位被置位,如果事件信息标记位设为逻辑与,则表示线程 #1 只有在事件 1 和事件 30 都发生以后才会被触发唤醒,如果事件信息标记位设为逻辑或,则事件 1 或事件 30 中的任意一个发生都会触发唤醒线程 #1。如果信息标记同时设置了清除标记位,则当线程 #1 唤醒后将主动把事件 1 和事件 30 清为零,否则事件标志将依然存在(即置 1)。

 

事件集工作示意图
事件集工作示意图(来源RT-Thread编程指南)

 

 

二、事件集的相关函数

1、创建动态事件集函数

当创建一个事件集时,内核首先创建一个事件集控制块,然后对该事件集控制块进行基本的初始化。

rt_event_t rt_event_create(const char* name, rt_uint8_t flag);

(1)入口参数:

 name:事件集的名称。
 flag:事件集的标志,它可以取如下数值:RT_IPC_FLAG_FIFO 或RT_IPC_FLAG_PRIO。

(2)返回值:

 RT_NULL

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值