FreeRTOS笔记篇:第八章 --事件组(未完成)

测试环境如下

stm32F103C8T6
MDK keil5
stm32cube + FreeRTOS

概述

已经注意到,实时嵌入式系统必须针对事件采取行动。 前面的章节描述了FreeRTOS的特性,允许事件被传达到任务。 这类特性的例子包括信号量和队列,它们都具有以下属性:

  • 它们允许任务在阻塞状态下等待单个事件发生
  • 当事件发生时,它们会解除单个任务的阻塞——解除阻塞的任务是等待事件的最高优先级任务。

事件组是自由RTOS的另一个特性,它允许将事件传递给任务。 不像队列和信号量:

  • 事件组允许任务在阻塞状态下等待要发生的多个事件之一的组合
  • 事件组在事件发生时解除对等待相同事件或事件组合的所有任务的阻塞。

事件组的这些唯一属性使得它们对于同步多个任务、将事件广播到多个任务、允许任务在阻塞状态下等待一组事件中的任何一个发生,以及允许任务在阻塞状态下等待多个操作完成都很有用

本章旨在让读者对:有一个很好的认识:

  • 软件定时器的特性与任务的特性相比。
  • 事件组相对于其他FreeRTOS特性的优缺点。
  • 如何在事件组中设置位。
  • 如何在阻塞状态下等待在事件组中设置位
  • 如何使用事件组同步一组任务

事件组的特征

事件组、事件标志和事件位事件“标志”是一个布尔值(1或0),用于指示事件是否发生。 事件“组”是一组事件标志。 事件标志只能为1或0,允许事件标志的状态存储在一个位中,事件组中的所有事件标志的状态存储在一个变量中;事件组中的每个事件标志的状态用EventBits_t类型变量中的一个位表示。 因此,事件标志也被称为事件‘位’。 如果EventBits_t变量中某位设置为1,则该位表示的事件已经发生。 如果EventBits_t变量中某位设置为0,则该位表示的事件未发生

显示如何将单个事件标志映射到EventBits_t类型变量中的单个位

在这里插入图片描述
例如,如果事件组的值为0x92(二进制10010010),则只设置事件位1、4和7,因此只发生了位1、4和7表示的事件。 图72显示了一个类型EventBits_t的变量,它设置了事件位1、4和7,并且所有其他事件位都清除了,使事件组的值为0x92

应用程序编写程序将一个意义分配给事件组中的各个位。 例如,应用程序编写器可能创建一个事件组,然后:

  • 在事件组中定义位0,表示“已从网络接收到消息”。
  • 在事件组中定义位1,表示“消息已准备好发送到网络”。
  • 在事件组中定义位2以表示“中止当前网络连接”。

如果configUSE_16_BIT_TICKS为1,则每个事件组包含8个可用事件位。

如果configUSE_16_BIT_TICKS为0,则每个事件组包含24个可用事件位

多任务访问

事件组是可以被任何任务或知道它们存在的ISR访问的自身对象。 任意数量的任务都可以在同一事件组中设置位,任意数量的任务都可以从同一事件组中读取位

使用事件组的实用示例(未完成)

事件管理使用事件组

xEventGroupCreate()

在这里插入图片描述

xEventGroupSetBits()

xEventGroupSetBits() API函数在事件组中设置一个或多个位,通常用于通知任务被设置的位或位表示的事件已经发生

注意:不要从中断服务例程调用 xEventGroupSetBits()。 中断安全版本xEventGroupSetBitsFromISR()应在其位置使用。

在这里插入图片描述
参数说明:

  • xEventGroup:
    正在设置位的事件组的句柄。 事件组句柄将从调用返回到x事件组创建(),用于创建事件组
  • uxBitsToSet:在事件组中指定要设置为1的事件位或事件位的位掩码。 事件组的值是通过按位方式更新的,以UX位到Set中传递的值对事件组的现有值进行排序。 例如,将ux位设置为0x04(二进制0100)将导致事件组中的事件位3被设置(如果尚未设置),同时使事件组中的所有其他事件位保持不变。

xEventGroupSetBitsFromISR()

中断服务函数中使用
给出信号量是一个确定性的操作,因为预先知道,给出信号量最多可以导致一个任务离开阻塞状态。 当在事件组中设置位时,不知道有多少任务将离开阻塞状态,因此在事件组中设置位不是确定性操作。

xEventGroupWaitBits()

()API函数的x事件组等待位允许任务读取事件组的值,并且如果事件位还没有设置,则可以选择在阻塞状态下等待事件组中的一个或多个事件位被设置。

调度程序用于确定任务是否将进入阻塞状态以及任务何时离开阻塞状态的条件称为“未阻塞条件’。 解除阻塞条件由ux Bits to Wait for和x Wait for All Bits参数值的组合指定:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值