183_FreeRTOS事件组的使用

         先做一个个人理解上的功能小结:

队列以及信号的功能:

 

1. 把task置于阻塞状态;

2. 信号发生的时候,结束阻塞;

 

时间组的特殊点:

 

1. 可以让一个任务等待一个或者多个时间;

2. 还可以一个信号组解除多个任务的阻塞。

 

         接下来,分析下官方的例程。

183_FreeRTOS事件组的使用

         创建一个事件组,这个里面的有效标志为是24个。创建了3个任务,优先级分别为1 2 3。

183_FreeRTOS事件组的使用

         优先级最低的任务,中间有2个阻塞行为,每次阻塞之后都打印一个提示字符串,然后对一个事件标志置位。置位的标志位分别是第一个和第二个。

183_FreeRTOS事件组的使用

183_FreeRTOS事件组的使用

         中断,里面先增加了一个中断延迟推送处理的功能,相应的推送函数会在守护程序中处理。接下来,第三位置位,之后请求任务切换。接收事件组的task,等待的不是全部事件发生。

         接下来的程序执行,应该是调度器启动后,500ms模拟中断触发,bit3会被置位。再此之前100ms,两外两个bit置位。由于,事件等待的task没有等待全部任务,而任务优先级比较高,因此每一次设置都会触发一个读取。

183_FreeRTOS事件组的使用

         代码修改,等待全部事件发生。

183_FreeRTOS事件组的使用

         运行效果:

183_FreeRTOS事件组的使用