freertos知识点笔记——队列、二值信号量、计数信号量
队列
1、队列queue通常用于任务之间的通信,一个任务写缓存,另一个任务读缓存。
队列还会有等待时间,
2、阻塞超时时间。如果在发送时队列已满,这个时间即是任务处于阻塞态等待队列空间有效的最长等待时间。
如 果 xTicksToWait 设 为 0 , 并 且 队 列 已 满 , 则xQueueSendToFront()与xQueueSendToBack()均会立即返回。
3、如果在接收时队列为空,则这个时间是任务处于阻塞状态以等待队列数据有效的最长等待时间。
如果 xTicksToWait 设为 0,并且队列为空,则 xQueueRecieve()与 xQueuePeek()均会立即返回。
信号量
二值信号量主要用于任务同步,二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断同步。中断give,任务take。适用于中断频率比较底的同步当中。
计数信号量
一个二值信号量最多只可以锁存一个中断事件。在锁存的事件还未被处理之前,如果还有中断事件发生,那么后续发生的中断事件将会丢失。如果用计数信号量代替二值信号量,那么,这种丢中断的情形将可以避免。