FreeRTOS实时操作系统(十五)Tickless低功耗模式

系列文章

FreeRTOS实时操作系统(一)RTOS的基本概念

FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库)

FreeRTOS实时操作系统(三)任务挂起与恢复

FreeRTOS实时操作系统(四)中断任务管理

FreeRTOS实时操作系统(五)进入临界区、任务调度器挂起与恢复

FreeRTOS实时操作系统(六)列表与列表项

FreeRTOS实时操作系统(七)时间片调度及RTOS的滴答定时器

FreeRTOS实时操作系统(八)任务状态查询及时间统计函数

FreeRTOS实时操作系统(九)时间延时函数及消息队列

FreeRTOS实时操作系统(十)信号量

FreeRTOS实时操作系统(十一)队列集

FreeRTOS实时操作系统(十二)事件标志组

FreeRTOS实时操作系统(十三)任务通知

FreeRTOS实时操作系统(十四)软件定时器

FreeRTOS实时操作系统(十五)Tickless低功耗模式

FreeRTOS实时操作系统(十六)内存管理


文章目录

  • 系列文章
  • 低功耗模式
  • Tickless低功耗模式
    • 宏定义配置
  • 实验测试


低功耗模式

在之前的逻辑开发中学习过STM32的低功耗模式,在FreeRTOS中的低功耗模式,方便操作系统进入低功耗模式。

stm32中的低功耗模式:
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第1张图片

Tickless低功耗模式

本质是调用指令WFI实现睡眠模式,在在整个系统的运行过程中,其实大部分时间是在执行空闲任务的,所以在空闲的时候进入低功耗,在其他任务准备运行的时候再退出低功耗模式。

运行方式:
进入低功耗后,获取到下一个任务的进入时间,就设置低功耗的退出时间,为了防止滴答定时器的中断唤醒MCU,频繁中断影响效果,将滴答定时器的中断周期修改为低功耗的运行时间,退出低功耗模式后,再补上节拍数

宏定义配置

configUSE_TICKLESS_IDLE
此宏用于使能低功耗 Tickless 模式

configEXPECTED_IDLE_TIME_BEFORE_SLEEP
此宏用于定义系统进入相应低功耗模式的最短时长(>1)

configPRE_SLEEP_PROCESSING(x)
此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的

configPOSR_SLEEP_PROCESSING(x)
此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行

实验测试

开启宏定义
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第2张图片

默认事件设置:
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第3张图片

FreeRTOS实时操作系统(十五)Tickless低功耗模式_第4张图片
需要对这两个函数重新定义:在文件中,如果对这两个宏没有定义的话会自己定义,所以我们需要提前定义,编译器就会自动识别为我们定义的函数。
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第5张图片
在开头直接提前定义
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第6张图片

在main文件中记得包含该文件;
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第7张图片
设置进入休眠后我们的操作即可;还可以关闭其他的外设来降低功耗
FreeRTOS实时操作系统(十五)Tickless低功耗模式_第8张图片

代码:


#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();
}

你可能感兴趣的:(FreeRTOS,单片机,嵌入式硬件,FreeRTOS,嵌入式操作系统)