跳至主要內容

中断管理

小于 1 分钟

中断管理

FreeRTOS的中断管理

  • FreeRTOS对于中断没有特别的处理程序
  • 对于大部分内核函数不能在中断内调用, 或者要调用中断版本 XXXFromISR (如果是 CMSIS RTOS, 可以调用部分函数, 但参数有限制)
  • 即使是拥有最小优先级的中断也会打断拥有最高优先级的任务

延迟中断处理

  • 在竞争调度模式下, 小优先级任务进入中断后, 离开中断时, 是否继续执行小优先级任务需要使用函数 portYIELD_FROM_ISR(BaseType_t xHigherPriorityTaskWoken) 决定 (参数 pdFALSE 时不发生切换)
  • 中断会打断内核, 当中断持续时间过长或调用内核函数, 将导致系统不稳定, 通过延迟中断, 将控制权移交回内核, 可以让程序更加稳定
  1. 可以将中断处理任务定为最高优先级的任务, 并使用信号量阻塞
  2. 在中断函数中, 清除中断标志后, 给出信号量, 并使用 portYIELD_FROM_ISR, 进入处理任务