FreeRTOS 3. 事件标志组
FreeRTOS事件标志组
事件标志组就是所有任务共享的3个字节(24位),相当于一个全局的标志变量,事件组有两个功能:等待和同步。
1.等待 :
当在某个任务执行到等待函数xEventGroupWaitBits(,Bit1,,,)
时,CPU会判断该函数里面需要等待的位(Bit1
)是否被置为1。若没有该任务停止执行,直到其他任务将该位置为1后继续执行。
相当于使用一个if(Bit1)
进行循环判断,但是如果使用if
判断需要一直浪费CPU的资源,使用事件组就可以节约很多资源。但是事件组也有一些缺点,一个事件组有24位,在写代码的过程中,需要明确每一位代表的含义。一旦一不小心弄错各个位所代表的内容,很可能造成程序上的错误,另一方面在读代码时也可能会很费劲。
2.同步:
在实际的程序中,可能出现几个任务需要同时运行,事件组的同步功能就是同步各个任务执行的进度。实现的原理就是使用等待功能实现,只是换了几个函数的名字而已。
等待功能实现
1. 创建事件标志组
Ⅰ. 首先引用头文件#include <freertos/event_groups.h>
Ⅱ. 定义全局的事件组句柄static EventGroupHandle_t My_Event_Group;
一定要定义成全局的。
Ⅲ. 在主函数里面创建事件组My_Event_Group = xEventGroupCreate();
2. 等待事件
1 | xEventGroupWaitBits( My_Event_Group, //事件组的句柄 |
3. 事件标志组置位函数
xEventGroupSetBits(My_Event_Group, Bit10);
这句话的含义是将My_Event_Group
这个事件组里面的第十位置为1.
这个函数可以将事件标志组里面的某一位置为1,返回值是设置之后事件组的内容.
4. 其他函数xEventGroupClearBits(My_Event_Group,0xffffff);
将某些位清为0xEventGroupGetBits(My_Event_Group);
读取事件组内容
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Roiy Blog!