FreeRTOS(三)

第二部分 事件组

一、事件组的简介

1、事件

事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。其实事件组的本质就是一个整数(16/32位)。可以是一个事件发生唤醒一个任务,或者多个事件唤醒一个或多个任务。

2、与队列/信号量的区别:

①信号量/队列当事件发生时只去唤醒一个任务,而事件组可唤醒多个任务,起到一个广播的作用。 ②信号量/队列是一个消耗性资源,即数据读走了就减少,而事件组可以选择清除事件也可以选择保留事件。 ③事件组只能是起到一个同步的作用,并不能传递数据。 ④事件组可以实现多个任务之间的同步,队列/信号量则只能是两个任务之间的同步。

3、事件组

1)整数的位数: 如果宏configUSE_16_BIT_TICKs = 0,那么这个整数是32位的,其中⽤低24位来表示事件组,代表24 个事件,剩余8位用于管理事件。 如果宏configUSE_16_BIT_TICKs = 1,那么这个整数是16位的,其中⽤低8位来表示事件组,代表8个事 件。

2)每⼀位事件的含义由我们自己定义。

3)这些位,值为1表示事件发生了,值为0表示事件没发⽣。

4)⼀个或多个任务、ISR都可以写这些位。

5)⼀个或多个任务可以等待某⼀位、某几个位。

特点

①与信号量不同设置,事件组不会阻塞,多个任务设置同一时间等于设置一次。

②支持事件超时等待机制,等待该事物类型的任务会进行阻塞态

③逻辑与:任务所期望的事件全部发生,任务才能被唤醒

逻辑或:任务所期望的事件只要有任意一个事件发生,任务即可被唤醒。

全局变量的区别

1.全局变量使用在操作系统中存在被多个任务同时读写的风险,则事件组它会直接禁止任务调度来规避风险。 2.使用全局变量需要自己去实现阻塞机制(成本太高)。 3.使用事件组能更方便的实现多任务之间的同步。

二、API函数

接口函数 函数功能
xEventGroupCreate() 动态创建事件组
xEventGroupSetBits() 事件组置位函数
xEventGroupWaitBits() 等待事件函数
Even
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值