系列文章
FreeRTOS实时操作系统(一)RTOS的基本概念
FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库)
FreeRTOS实时操作系统(三)任务挂起与恢复
FreeRTOS实时操作系统(四)中断任务管理
FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复
FreeRTOS实时操作系统(六)列表与列表项
FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器
FreeRTOS实时操作系统(八)任务状态查询及时间统计函数
FreeRTOS实时操作系统(九)时间延时函数及消息队列
FreeRTOS实时操作系统(十)信号量
FreeRTOS实时操作系统(十一)队列集
FreeRTOS实时操作系统(十二)事件标志组
FreeRTOS实时操作系统(十三)任务通知
FreeRTOS实时操作系统(十四)软件定时器
FreeRTOS实时操作系统(十五)Tickless低功耗模式
FreeRTOS实时操作系统(十六)内存管理
文章目录
- 系列文章
- 低功耗模式
- Tickless低功耗模式
- 宏定义配置
- 实验测试
低功耗模式
在之前的逻辑开发中学习过STM32的低功耗模式,在FreeRTOS中的低功耗模式,方便操作系统进入低功耗模式。
stm32中的低功耗模式:
Tickless低功耗模式
本质是调用指令WFI实现睡眠模式,在在整个系统的运行过程中,其实大部分时间是在执行空闲任务的,所以在空闲的时候进入低功耗,在其他任务准备运行的时候再退出低功耗模式。
运行方式:
进入低功耗后,获取到下一个任务的进入时间,就设置低功耗的退出时间,为了防止滴答定时器的中断唤醒MCU,频繁中断影响效果,将滴答定时器的中断周期修改为低功耗的运行时间,退出低功耗模式后,再补上节拍数
宏定义配置
configUSE_TICKLESS_IDLE
此宏用于使能低功耗 Tickless 模式
configEXPECTED_IDLE_TIME_BEFORE_SLEEP
此宏用于定义系统进入相应低功耗模式的最短时长(>1)
configPRE_SLEEP_PROCESSING(x)
此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的
configPOSR_SLEEP_PROCESSING(x)
此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行
实验测试
开启宏定义
默认事件设置:
需要对这两个函数重新定义:在文件中,如果对这两个宏没有定义的话会自己定义,所以我们需要提前定义,编译器就会自动识别为我们定义的函数。
在开头直接提前定义
在main文件中记得包含该文件;
设置进入休眠后我们的操作即可;还可以关闭其他的外设来降低功耗
代码:
#define configPRE_SLEEP_PROCESSING( x ) PRE_SLEEP_PROCESSING()
#define configPOST_SLEEP_PROCESSING( x ) POST_SLEEP_PROCESSING()
/* 进入低功耗前所需要执行的操作 */
void PRE_SLEEP_PROCESSING(void)
{
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
}
/* 退出低功耗后所需要执行的操作 */
void POST_SLEEP_PROCESSING(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
}