赞
踩
事件位用于指示事件是否已发生。事件位通常称为事件标志。例如,应用程序可以:
事件组是一组事件位。事件组中的各个事件位由位号引用。扩展上面提供的示例:
事件组由类型为 EventGroupHandle_t 的变量引用。
如果将configUSE_16_BIT_TICKS设置为 1,则存储在事件组中的位数(或标志)数为 8;
如果configUSE_16_BIT_TICKS设置为 0,则为 24。
对configUSE_16_BIT_TICKS依赖性源于任务内部实现中用于线程本地存储的数据类型。
事件组中的所有事件位都存储在EventBits_t类型的单个无符号变量中。事件位 0 存储在位位置 0,事件位 1 存储在位位置 1,依此类推。
下图表示一个 24 位事件组,该事件组使用三位来保存已描述的三个示例事件。在图像中,仅设置了事件位 2。
在实施事件组时,RTOS 必须克服的两个主要挑战是:
在以下情况下,事件组实现将在应用程序中创建争用条件:
事件组概念意味着非确定性行为,因为它不知道事件组上阻止了多少个任务,因此不知道在设置事件位时需要测试多少个条件或取消阻止多少个任务。
FreeRTOS 质量标准不允许在禁用中断时执行非确定性操作,也不允许在中断服务例程中执行非确定性操作。要确保在设置事件位时不会违反这些严格的质量标准,请执行以下操作:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。