从裸机迁移到FreeRTOS,中断配置需注意三点:1) 优先级分组:Cortex-M建议用NVIC_PRIORITYGROUP_4(4位抢占优先级),确保configMAX_SYSCALL_INTERRUPT_PRIORITY(通常5)以下的中断可调用FromISR API。2) FromISR API:仅能在优先级不高于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断中调用,且必须使用带FromISR后缀的版本,并传入pxHigherPriorityTaskWoken参数,在退出中断前根据其值决定是否手动触发PendSV。3) 临界区嵌套:使用taskENTER_CRITICAL()/taskEXIT_CRITICAL(),内部有嵌套计数,但不可在中断中调用;中断中应使用taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR()。实战配置清单:①在FreeRTOSConfig.h中设置configPRIO_BITS=4、configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY=5;②所有调用FromISR的中断优先级数值≥5;③临界区成对使用,避免在临界区内调用阻塞API;④使用vPortValidateInterruptPriority()辅助调试。
mcuku 阿沐 · 2026-09-14