在FreeRTOS中设计中断及其ISR(中断服务程序)时,核心原则可以用通俗的语言总结为以下几点:
1. 中断要快进快出
-
解释:中断服务程序(ISR)就像是一个“急救医生”,它的任务是快速处理紧急情况(比如读取数据、清除中断标志),然后马上离开,不能在里面做太多复杂的事情(比如处理大量数据或等待其他事件)。
-
为什么:如果ISR占用太长时间,其他更紧急的中断可能无法及时响应,系统会变得不实时。
-
怎么做:在ISR中只做最必要的操作,复杂的工作可以交给任务去处理。
2. 不要阻塞中断
-
解释:ISR不能调用会“等待”的函数(比如延时函数
vTaskDelay
),因为这些函数会阻塞程序的运行,而ISR需要快速完成。 -
为什么:阻塞会导致系统无法响应其他中断,甚至可能死机。
-
怎么做:在ISR中只能使用带
FromISR
后缀的函数(比如xQueueSendFromISR
),这些函数是专门为ISR设计的,不会阻塞。