一、包含头文件/源码
event_groups.c源代码
event_groups.h头文件
二、定义句柄/设置事件
static EventGroupHandle_t motor_event_group; //事件组句柄
const int MOTOR_START = BIT1; //启动
const int MOTOR_PAUSE = BIT2; //暂停
const int MOTOR_CLOSE = BIT3; //关闭
三、创建事件组
motor_event_group = xEventGroupCreate(); //创建事件组
如果成功建立事件组,则会返回事件组的句柄(指针),如果内存堆没有足够的内存则会返回NULL(创建失败)
四、等待事件位
while(1)
{
uxBits = xEventGroupWaitBits(motor_event_group, //正在测试的事件组
MOTOR_START | MOTOR_PAUSE | MOTOR_CLOSE, //事件组中要等待的位
true, //在返回之前应该被清除
false, //等待条件是否都要满足
portMAX_DELAY); //等待超时--#define portMAX_DELAY 0xFFFFFFFF
if (uxBits & MOTOR_START) //启动
{
DEBUG("motor is start");
}
else if (uxBits & MOTOR_PAUSE) //暂停
{
DEBUG("motor is pause");
}
else if (uxBits & MOTOR_CLOSE) //关闭
{
DEBUG("motor is close");
}
else //超时
DEBUG("xEventGroupWaitBits out time");
vTaskDelay(200 / portTICK_RATE_MS);
}
五、设置事件位
xEventGroupSetBits(motor_event_group, MOTOR_START);// 将指定的事件位置1, 用在任务中
xEventGroupSetBitsFromISR() // 将指定的事件位置1,用在中断服务函数中。
六、清除事件位
xEventGroupClearBits(motor_event_group, MOTOR_START);// 将指定的事件位清零, 用在任务中
xEventGroupClearBitsFromISR() // 将指定的事件位清零,用在中断服务函数中