【FreeRTOS】使用指南3:队列管理
本章期望能清晰地告诉读者以下事情:
哪些 FreeRTOS 的 API 函数可以在中断服务例程中使用。
延迟中断方案是处何实现的。
如何创建和使用二值信号量以及计数信号量。
二值信号量和计数信号量之间的区别。
如何利用队利在中断服务例程中把数据传入传出。
一些 FreeRTOS 移植中采用的中断嵌套模型。
1.哪些 FreeRTOS 的 API 函数可以在中断服务例程中使用。
只有以”FromISR”或”FROM_ISR”结束的 API 函数或宏才可以在中断服务例程中使用
2.延迟中断方案是处何实现的。
采用二值信号量同步
二值信号量可以在某个特殊的中断发生时,让任务解除阻塞,相当于让任务与中断
同步。这样就可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR)
中只是快速处理少部份工作。如此,中断处理可以说是被”推迟(deferred)”到一个”处理
(handler)”任务。
3.如何创建和使用二值信号量以及计数信号量。
vSemaphoreCreateBinary() //*创建二值信号量
xSemaphoreCreateCounting() //*创建记数信号量
xSemaphoreTake() //*获取(拿走)信号量
xSemaphoreGive()//*给出信号量
xSemaphoreGiveFromISR()//*中断中给出信号量
4.二值信号量和计数信号量之间的区别。
二值信号量只有0和1两种状态,最多只可以锁存一个中断事件,可以把二值信号量看作是只有一个数据单元的队列
计数信号量可以看作是深度大于 1 的队列
5.如何利用队利在中断服务例程中把数据传入传出。
使用中断安全版本的队列API
xQueueSendToFrontFromISR(),xQueueSendToBackFromISR()与 xQueueReceiveFromISR()
分别是 xQueueSendToFront(),xQueueSendToBack()与 xQueueReceive()的中断安全
版本,专门用于中断服务例程中。
6.一些 FreeRTOS 移植中采用的中断嵌套模型。