[开发工具] 如何在 FreeRTOS 中通过无滴答模式实现低功耗支持

[复制链接]
2273|18
 楼主| duo点 发表于 2024-10-29 11:49 | 显示全部楼层 |阅读模式
大家好,

我现在使用 Board NUCLEO-U031R8 进行测试。

我有一个旧的 FreeRTOS 项目,专为节能应用而设计,我正准备将其迁移到新的 IC STM32U031 系列 MCU。

在旧项目中,将configUSE_TICKLESS_IDLE设置为1可以让系统在任务空闲时进入低功耗模式,并且由制造商提供低功耗支持功能。

所以我开始使用STM32CubeMX创建一个简单的项目并安装“X-CUBE-FREERTOS”中间件(CMSIS RTOS2),并将configUSE_TICKLESS_IDLE设置为1。然后使用STM32CubeIDE导入.ioc文件,最后添加长时间LED闪烁任务以确保系统进入无滴答空闲模式。

LED 按预期运行,但我注意到电流消耗平均约为 5mA,这表明低功耗功能可能无法按预期运行。我是否遗漏了什么或错误的理解?

是否有推荐的方法在 FreeRTOS 中实现具有无滴答功能的低功耗模式?
tpgf 发表于 2024-11-4 16:41 | 显示全部楼层
在FreeRTOSConfig.h文件中,将宏configUSE_TICKLESS_IDLE设置为1
keaibukelian 发表于 2024-11-5 08:04 | 显示全部楼层
确保滴答定时器的重装载值不会溢出,即不能超过滴答定时器的最大计数值
elephant00 发表于 2024-11-5 10:45 | 显示全部楼层
修改FreeRTOSConfig.h文件将configUSE_TICKLESS_IDLE宏定义为1,以启用无滴答空闲模式。
八层楼 发表于 2024-11-5 15:08 | 显示全部楼层
configEXPECTED_IDLE_TIME_BEFORE_SLEEP定义了系统可以进入低功耗模式的最小时钟节拍数,默认值为2个系统时钟节拍,如果需要,可以在[size=0.875]FreeRTOSConfig.h文件中重新定义这个参数
观海 发表于 2024-11-5 18:01 | 显示全部楼层
FreeRTOS提供了[size=0.875]portSUPPRESS_TICKS_AND_SLEEP()函数来实现Tickless模式
guanjiaer 发表于 2024-11-5 19:48 | 显示全部楼层
如果滴答定时器的频率太高,会导致频繁的进出睡眠模式,从而增加能量消耗
heimaojingzhang 发表于 2024-11-5 21:37 | 显示全部楼层
确保下一个要运行的任务能够被准确唤醒
哈根达斯uz 发表于 2024-11-14 22:52 来自手机 | 显示全部楼层
所以我开始使用STM32CubeMX创建一个简单的项目并安装“X-CUBE-FREERTOS”中间件
故意相遇 发表于 2025-1-8 22:12 | 显示全部楼层
在 FreeRTOS 中实现低功耗支持的一种常见方法是使用无滴答模式(Tickless mode)。在无滴答模式下,RTOS 的滴答时钟(也称为系统时钟或心跳时钟)不是固定频率的,而是按需运行
风凉 发表于 2025-1-9 02:00 | 显示全部楼层
当没有任务在等待时间延迟或中断时,系统时钟不会消耗电能。这有助于在嵌入式系统中实现低功耗运行

捧一束彼岸花 发表于 2025-1-9 03:00 | 显示全部楼层
确保你的系统时钟源是可配置的,并且支持低功耗模式。在某些微控制器上,你可能需要选择一个低功耗的时钟源(如低速振荡器)来降低功耗

失物招領 发表于 2025-1-9 04:00 | 显示全部楼层
FreeRTOS 中,可以通过修改 FreeRTOSConfig.h 文件中的配置选项来启用无滴答模式

她已醉 发表于 2025-1-9 05:00 | 显示全部楼层
你需要设置 configUSE_TICKLESS_MODE 1 来启用它。此外,还需要配置 configEXPECTED_IDLE_TIME_BEFORE_SLEEP 来定义系统空闲多长时间后进入休眠状态

将爱藏于深海 发表于 2025-1-9 06:00 | 显示全部楼层
在启用无滴答模式后,你需要提供一个自定义的睡眠函数来让系统进入低功耗模式。这个函数应该根据当前的系统状态来确定睡眠的时间长度。通常,这个函数会在系统空闲时调用,并且在这段时间内关闭不必要的硬件和时钟源以节省电能

春日负喧 发表于 2025-1-9 07:00 | 显示全部楼层
在无滴答模式下,中断和唤醒机制变得尤为重要。你需要确保在中断发生时能够正确地恢复系统的状态,并且在需要时唤醒系统。这可能需要配置中断服务程序(ISR)来处理外部事件或定时器的唤醒请求

温室雏菊 发表于 2025-1-9 08:00 | 显示全部楼层
在无滴答模式下,任务调度也需要特别注意。确保任务不会长时间等待资源或事件,因为这可能会导致系统长时间处于空闲状态并消耗不必要的电能。优化任务优先级和调度逻辑可以帮助减少空闲时间

白马过平川 发表于 2025-1-9 09:00 | 显示全部楼层
在实现低功耗支持后,进行充分的测试来验证系统的功耗表现是否符合预期。使用功耗分析工具来监控系统的功耗情况,并根据测试结果调整配置和优化代码

西洲 发表于 2025-1-9 10:00 | 显示全部楼层
一般来说是可以通过芯片的本身低功耗实现的吧?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

548

主题

2402

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部