中断管理
小于 1 分钟
中断管理
FreeRTOS的中断管理
- FreeRTOS对于中断没有特别的处理程序
- 对于大部分内核函数不能在中断内调用, 或者要调用中断版本 XXXFromISR (如果是 CMSIS RTOS, 可以调用部分函数, 但参数有限制)
- 即使是拥有最小优先级的中断也会打断拥有最高优先级的任务
延迟中断处理
- 在竞争调度模式下, 小优先级任务进入中断后, 离开中断时, 是否继续执行小优先级任务需要使用函数 portYIELD_FROM_ISR(BaseType_t xHigherPriorityTaskWoken) 决定 (参数 pdFALSE 时不发生切换)
- 中断会打断内核, 当中断持续时间过长或调用内核函数, 将导致系统不稳定, 通过延迟中断, 将控制权移交回内核, 可以让程序更加稳定
- 可以将中断处理任务定为最高优先级的任务, 并使用信号量阻塞
- 在中断函数中, 清除中断标志后, 给出信号量, 并使用 portYIELD_FROM_ISR, 进入处理任务