目录
- 九、中断管理
- 9.1 基本概念
- 9.2 两套API
- 9.3 中断服务程序
九、中断管理
该部分暂无代码
9.1 基本概念
FreeRTOS中的中断管理主要涉及:两套API、中断服务编写
- 不能阻塞、不能处理耗时任务
- ISR的优先级高于任务:即使是优先级最低的中断,它的优先级也高于任务。任务只有在没有中断的情况下,才能执行。
9.2 两套API
FreeRTOS中很多API函数都有两套:一套在任务中使用,另一套在ISR中使用。后者的函数名含有"FromISR
"后缀。
原因是:很多API函数会导致任务进入阻塞状态,但中断函数不能进入阻塞状态,所以设置了一套中断专用函数FromISR
9.3 中断服务程序
中断服务例程是由中断触发执行的函数。在FreeRTOS中,通常会使用portYIELD_FROM_ISR
或xSemaphoreGiveFromISR
等宏来实现从中断服务例程中让出CPU,以确保在中断处理完成后能够及时切换到合适的任务。
目的就是:及时切换
// 中断服务
void vExampleISRHandler(void) {
// 中断服务的处理逻辑
// ......
// 通知任务
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(xSemaphore, &xHigherPriorityTaskWoken);
// 如果有更高优先级的任务需要唤醒,则进行任务切换
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}