什么是事件组
在 FreeRTOS 中,事件组(Event Group)是一个用于管理和同步任务的机制。它允许任务之间通过事件标志(bits)来通信和同步。事件组中的每一位(bit)代表一个独立的事件,任务可以设置、清除、等待或查询这些事件标志位。
事件组的主要功能包括:
- 设置事件标志位:任务或中断服务例程可以设置一个或多个事件标志位,以表示某些事件已经发生。
- 清除事件标志位:任务可以清除一个或多个事件标志位,以重置或表示某些事件已经处理完毕。
- 等待事件标志位:任务可以阻塞等待,直到一个或多个特定的事件标志位被设置。这种等待可以是一直等待,直到所有指定的事件都发生,或者只要其中的一个事件发生就退出等待。
- 查询事件标志位:任务可以查询当前事件组的状态,以检查哪些事件已经发生。
主要函数及说明
1. 创建事件组
函数:xEventGroupCreate
功能:创建一个事件组。
原型:
EventGroupHandle_t xEventGroupCreate( void );
返回值:返回事件组的句柄。如果返回 NULL
,表示事件组创建失败。
示例:
EventGroupHandle_t xEventGroup;
void createEventGroup(void)
{
xEventGroup = xEventGroupCreate();
if(xEventGroup == NULL)
{
printf("事件组创建失败\n");
while(1);
}
}
2. 设置事件标志位
函数:xEventGroupSetBits
功能:设置事件组中的一个或多个事件标志位,即触发事件。
原型:
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );
参数:
xEventGroup
:事件组句柄。uxBitsToSet
:要设置的事件标志位。
返回值:返回设置前事件组的事件标志位。
示例:
#define EVENT_BIT_0 (1 << 0)
void setEventBits(void)
{
xEventGroupSetBits(xEventGroup, EVENT_BIT_0);
}
3. 清除事件标志位
函数:xEventGroupClearBits
功能:清除事件组中的一个或多个事件标志位。
原型:
EventBits_t xEventGroupClearBi