
本帖最后由 TLLED 于 2018-4-21 09:43 编辑 低功耗模式实验 对于M4内核,FreeRTOS代码里已经提供tickless低功耗实现的代码。使用时只需要在FreeRTOSConfig.h文件中配置宏定义configUSE_TICKLESS_IDLE为1且系统运行满足以下两个条件时,系统内核会自动的调用低功耗宏定义函数portSUPPRESS_TICKS_AND_SLEEP(): 满足的条件: > 用户任务在挂起或阻塞态,系统当前运行空闲任务。 > 根据配置configEXPECTED_IDLE_TIME_BEFORE_SLEEP的大小,只有系统可运行于低功耗模式的 时钟节拍数大于等于这个参数时,系统才能进入低功耗模式。此参数在FreeRTOS.h中定义,定义的内容如下: ![]() 也可以在FreeRTOSConfig.h文件中重新定义。 > 在空闲任务中,调用vPortSuppressTicksAndSleep()函数进入低功耗模式。此函数在portmacro.h中被定义: ![]() 函数:vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime );是实现低功耗的具体程序,在port.c中定义。参数:xExpectedIdleTime是系统可以处于低功耗的系统节拍数。 低功耗实验模型: ![]() 程序执行条件: > 程序中创建两个任务: 任务1:vAppTicklessTask() -- 统计系统当前运行的节拍数。 任务2:vAppKeyTask() -- 接收信号量,唤醒任务。 程序函数源码: 任务1的函数: ![]() 任务2的函数: ![]() 程序执行结果: 1、任务1输出tick count: n ,板子上LED1闪烁 2、任务2在按下用户按键后,输出一帧数据,然后任务停止。 ![]() 疑问: 程序按照低功耗模式设置好后,两个任务不是应该都进入睡眠模式,按下板子上用户按键后唤醒任务。实现这个程序出现任务1一直在运行。 |
实验4需要的那个软件我的电脑上装不上,正在查找原因。先把实验5做了