中断与任务协作
ISR 里应该做什么
- 读状态。
- 清中断标志。
- 记录最小必要信息。
- 通知任务尽快接手。
ISR 里不应该做什么
- 长时间循环。
- 重计算。
- 大量打印日志。
- 调用不适合中断上下文的 API。
FromISR 系列 API
xQueueSendFromISR()xSemaphoreGiveFromISR()- 任务通知相关
FromISRAPI
这些接口的意义是:让中断在合适的上下文规则下安全地和任务交互。
常见协作模式
- 中断捕获到事件。
- ISR 把事件或数据交给队列、信号量或任务通知。
- 被唤醒的任务在正常任务上下文里做重活。
这一篇要盯住什么
- ISR 负责抢时间,任务负责做重活。
- “能不能在中断里直接调这个 API”必须分清。
- 中断和任务的边界越清晰,系统越好维护。