1 低功耗模式知识总结
1.1 三种模式
1)睡眠模式
2)停止模式
3)待机模式
1.2 睡眠模式
1、进入睡眠模式:
WFI 指令:__WFI
WFE 指令:__WFE
2、退出睡眠模式:
任何中断或事件都可以唤醒睡眠模式
1.3 Tickless低功耗模式的原理
Tickless低功耗模式的本质是通过调用指令 WFI 实现睡眠模式!
因此,可以在本该空闲任务执行的期间,让MCU 进入相应的低功耗模式;当其他任务准备运行的时候,唤醒MCU退出低功耗模式
2 Tickless模式相关配置项
1) configUSE_TICKLESS_IDLE 1 使能 0 不使能 2 自己实现低功耗使能
此宏用于使能低功耗 Tickless 模式
2)configEXPECTED_IDLE_TIME_BEFORE_SLEEP
此宏用于定义系统进入相应低功耗模式的最短时长
3)configPRE_SLEEP_PROCESSING(x)
此宏用于定义需要在系统进入低功耗模式前执行的事务,如:进入低功耗前关闭外设时钟,以达到降低功耗的目的。
4)configPOSR_SLEEP_PROCESSING(x)
此宏用于定义需要在系统退出低功耗模式后执行的事务,如:退出低功耗后开启之前关闭的外设时钟,以使系统能够正常运行。
3 Tickless模式实战
3.1freertos_demo.c
#include "freertos_demo.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./SYSTEM/delay/delay.h"
/*FreeRTOS*********************************************************************************************/
#include "FreeRTOS.h"
#include "task.h"
/*注意要点:
*1.在FreeRTOSConfig.h中设置以下两个宏的值
*configUSE_TICKLESS_IDLE 置为1
*configEXPECTED_IDLE_TIME_BEFORE_SLEEP 置为2(预计低功耗持续时间至少为2秒)
*
*2.在FreeRTOSConfig.h中两个函数宏定义
* configPRE_SLEEP_PROCESSING(x) PRE_SLEEP_PROCESSING() 定义在进入低功耗模式前执行的函数
*configPOST_SLEEP_PROCESSING(x) POST_SLEEP_PROCESSING() 定义在退出低功耗模式后执行的函数
*
*3.在freertos_demo.h与freertos_demo.c 中分别声明和定义void PRE_SLEEP_PROCESSING(void)、 void POST_SLEEP_PROCESSING(void)
*
*4.在在FreeRTOSConfig.h中注意包涵"freertos_demo.h"文件
*/
/*FreeRTOS配置*/
/* START_TASK 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define START_TASK_PRIO 1 /* 任务优先级 */
#define