FreeRTOS之事件标志组


事件标志组用于任务间通信或同步

事件标志组和全局变量

  • 全局变量一般用在无RTOS的程序中,因此程序对全局变量的访问是顺序的,全局变量对于每一个访问它的程序来说都是最新值
  • 事件标志组一般用在多任务系统中,多任务使用事件标志组可以防止访问冲突。因为多任务相当于并行执行,访问全局变量可能会出现同时访问一个值的情况,会出现访问冲突或变量不是最新值
  • 事件标志组在多任务中可以进行超时等待

事件标志组本质上是一个16位或32位的软件状态寄存器。16位的话使用低8位,32位的话使用低24位,每位用0或1表示事件标志。

事件标志组API 功能
EventGroupHandle_t xEventGroupCreate( void ) 创建事件标志组,返回句柄
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) 设置标志位,返回事件标志组
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet,BaseType_t *pxHigherPriorityTaskWoken ) 设置标志位(中断),返回状态
EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup,EventBits_t uxBitsToWaitFor,BaseType_t xClearOnExit,BaseType_t xWaitForAllBits,TickType_t xTicksToWait ) 等待事件标志位置位,返回事件标志组
/* 创建事件标志组 */
xCreatedEventGroup = xEventGroupCreate();
/* 设置事件标志组的 bit0 */
xEventGroupSetBits(xCreatedEventGroup, BIT_0);
/* 设置事件标志组的 bit1 */
xEventGroupSetBits(xCreatedEventGroup, BIT_1);
/*等待标志位置位*/
uxBits = xEventGroupWaitBits(xCreatedEventGroup, /* 事件标志组句柄 */
                             BIT_ALL, /* 等待 bit0 和 bit1 被设置 */
                             pdTRUE,/* 退出前 bit0 和 bit1 被清除,这里是 bit0 和 bit1 都被设置才表示“退出”*/
                             pdTRUE,/* 设置为pdTRUE表示等待bit1和bit0都被设置*/
                             xTicksToWait);/* 等待延迟时间 */


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM