在RTOS中,ISR内释放信号量或互斥量需特别注意:信号量释放(如xSemaphoreGiveFromISR)通常允许,但互斥量(含优先级继承)在ISR中释放是危险的,因为ISR不参与任务调度,无法执行优先级继承,可能导致优先级反转。实操建议:ISR内只释放信号量(或二值信号量),且使用带“FromISR”后缀的API,并检查pxHigherPriorityTaskWoken参数,若为pdTRUE则立即触发上下文切换(如portYIELD_FROM_ISR),以降低调度延迟。避免在ISR中释放互斥量;若必须,需在任务中重新获取并释放,或改用信号量。此外,ISR内释放信号量时,确保临界区保护(如关闭中断)最小化,防止嵌套中断导致延迟。设计上,尽量让ISR仅做标记,实际处理在任务中,以隔离调度影响。
mcuku 阿沐 · 2026-08-27