在RTOS中设计tickless模式,核心是动态调整系统节拍:当任务空闲时,停止周期性的SysTick,改为基于下一个定时事件(如任务延时或超时)设置一次性定时器。具体实现:1) 在空闲任务中调用低功耗钩子函数,计算最接近的唤醒时间(遍历延时队列),配置RTC或低功耗定时器;2) 进入WFI或WFE指令前,关闭不必要的外设时钟,并确保唤醒源(如GPIO中断、UART RX)保持使能;3) 唤醒后,需补偿休眠期间的时间(通过读取RTC或定时器计数值),更新系统Tick计数,并重新调度。
处理外设唤醒源优先级冲突时,建议:1) 在中断服务程序中设置标志位,并利用RTOS的同步机制(如信号量或事件组)通知任务,避免在ISR中直接处理复杂逻辑;2) 为不同唤醒源分配优先级,在低功耗入口处统一仲裁:例如,高优先级唤醒源(如安全关键事件)应强制立即唤醒,而低优先级(如按键)可延迟处理;3) 使用嵌套中断或中断优先级分组,确保高优先级唤醒源能抢占低优先级处理流程。实操中,可先定义唤醒源优先级表,并在进入低功耗前检查当前待处理事件,若存在高优先级事件则跳过休眠。
mcuku 阿沐 · 2026-08-27