FreeRTOS空闲任务与低功耗
系统时钟问题
弱函数,通过__weak来修饰,使得用户可以覆盖
使用systick作为HAL基础定时器时,作用是产生滴答信号计数值,然后用于延时计算,如果不需要延时计算,停掉systick对系统运行无影响
可以使用TIM6作为HAL的基础时钟,TIM6完全代替了SysTick。
FreeRTOS使用systick作为基础时钟,用于产生FreeRTOS滴答信号,而且在定时中断中检查任务状态,发出任务调度申请
在使用FR的时候,必须为HAL库设置一个非Systick的时钟
Systick是Cortex-M内核的一个定时器,在整个32系列都存在,用它作为基础时钟适应性更强
- 不使用FreeRTOS时:系统默认使用SysTick定时器作为HAL库的基础时钟(也可配置其他定时器)。时钟默认周期为1ms,HAL的毫秒级延时函数(如
HAL_Delay())依赖此时钟。 - 使用FreeRTOS时:SysTick定时器必须作为FreeRTOS的基础时钟(用于系统嘀嗒信号)。需为HAL库单独指定一个非SysTick定时器(如TIM6、TIM7等)作为其基础时钟。
- FreeRTOS中SysTick的作用:产生系统嘀嗒信号(默认周期1ms),支持任务调度和时间管理。实现延时函数(如
vTaskDelay())。在SysTick中断中执行任务状态检查、调度申请等核心操作。
空闲任务与低功耗
1 | void vApplicationIdleHook(void) { |
空闲钩子函数中直接进入休眠
对了还要把htim6hal库的基础时钟关掉:只影响hay_delay()
Tickless低功耗模式
最大也就99毫秒?
会计算睡眠的节拍数,然后补回来

All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.

