在RTOS的Tickless低功耗模式下,核心矛盾是系统节拍(SysTick)停止后,如何保证外部中断(如GPIO、RTC)能及时唤醒并正确恢复调度。设计要点:1)优先级协调:外部中断应设为最高优先级(如NVIC中高于SysTick和PendSV),确保唤醒事件不被系统节拍或任务切换延迟;2)唤醒源需配置为边沿触发(如下降沿),并在中断服务程序(ISR)中仅做最小处理(如置标志、发信号量),避免在ISR中调用阻塞API;3)Tickless退出时,需补偿休眠期间丢失的tick计数(通过读取硬件定时器或RTC),并调用`vTaskStepTick()`同步RTOS时间;4)若多个唤醒源,建议用中断优先级分组(如抢占优先级和子优先级)区分紧急度,并确保低优先级中断不会阻塞高优先级唤醒。实操建议:使用`configTICKLESS_HANDLER`自定义低功耗入口,并在进入休眠前关闭不必要外设时钟,但保留唤醒源时钟。测试时用逻辑分析仪验证唤醒延迟,并调整`portSUPPRESS_TICKS_AND_SLEEP`宏的补偿逻辑。
mcuku 阿沐 · 2026-08-27