简介
事件组能不用就不用,能看懂别人代码就好!!!
RTOS中的信号量、邮箱和消息队列都是事件。通过这些事件可以实现任务之间及任务和中断服务程序之间的通信。但信号量、邮箱和消息队列只能允许任务在阻塞状态下等待单个事件发生。当这些事件发生时,只能取消单个任务的阻塞状态。被取消阻塞状态的任务是等待事件列表中优先级最高的任务,对于FreeRtos,如果具有相同高优先级的任务等待该事件,则等待时间最长的那个任务获得该事件,从而取消阻塞状态。而事件组是RTOS的另一个功能,使用事件组可以实现多任务之间的同步。其具有如下特性。
1)事件组允许任务在阻塞状态下等待一个或多个事件的组合发生。
2)事件组在事件发生时取消阻塞等待同一事件或事件组合的所有任务。
事件组的这些独特属性使它们在同步多个任务、向多个任务广播事件、允许任务在阻塞状态下等待一组事件中的任何一个发生,以及允许任务在阻塞状态下等待多个操作完成等方面非常有用。事件组还提供了减少应用程序使用RAM的机会,因为通常可以用单个事件组替换多个二进制信号量。
API:
1)创建事件组的函数原型
EventGroupHandle_t xEventGroupCreate(void);
函数的返回值:如果创建成功,此函数返回事件组的句柄,此句柄是其他事件组函数的控制句柄;否则返回NULL。
在使用这个函数前需要定义事件组句柄,例如:
static EventGroupHandle_t mycreateEventGroup = NULL;
xCreatedEventGroup=myEventGroupCreate();
xEventGroupSetBits
xEventGroupWaitBits
xEventGroupGetBits
xEventGroupClearBits