该部分在上份代码基础上修改得来,代码下载链接:
https://wwzr.lanzout.com/iihn01la39je
密码:dtr0
该代码尽量做到最简,不添加多余的、不规范的代码。
内容主要包括:
最终实现效果:
当你在一个多任务系统中需要对多个事件进行同步、通信或控制时,FreeRTOS的事件组(Event Group)就变得非常有用。事件组允许任务等待多个事件中的任何组合,从而实现复杂的同步和通信操作。
应用场景:
xEventGroupWaitBits
等待多个事件位的组合,从而实现复杂的条件同步。使用 xEventGroupCreate
函数来创建一个事件组。
// 定义事件组句柄
static EventGroupHandle_t g_xEventGroupTest;
// 创建事件组
g_xEventGroupTest= xEventGroupCreate();
设置事件位:
使用 xEventGroupSetBits
函数将指定的事件位设置为1。
/* 设置事件组: bit0 */
xEventGroupSetBits(g_xEventGroupTest, (1<<0));
这将设置事件组中对应的事件位。
使用 xEventGroupWaitBits
函数等待指定的事件位被设置为1。
xEventGroupWaitBits(xEventGroup, xBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait);
/*
xEventGroup 事件组句柄
uxBitsToWaitFor 等待哪些位
xClearOnExit 等待完成后是否清除事件位 pdTRUE: 清除uxBitsToWaitFor指定的位 pdFALSE: 不清除
xWaitForAllBits and还是or? pdTRUE: 等待的位,全部为1; pdFALSE: 等待的位,某一个为1即可
xTicksToWait 如果期待的事件未发生,阻塞多久。若为0,则立即返回;若为portMAX_DELAY,则无限等待。
*/
示例:
/* 等待事件:bit0 and bit1 */
xEventGroupWaitBits(g_xEventGroupTest, (1<<0)|(1<<1), pdTRUE, pdTRUE, portMAX_DELAY);
创建
设置、等待