打印
[开发工具]

如何在 FreeRTOS 中通过无滴答模式实现低功耗支持

[复制链接]
763|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,以启用无滴答空闲模式。

使用特权

评论回复
5
八层楼| | 2024-11-5 15:08 | 只看该作者
configEXPECTED_IDLE_TIME_BEFORE_SLEEP定义了系统可以进入低功耗模式的最小时钟节拍数,默认值为2个系统时钟节拍,如果需要,可以在[size=0.875]FreeRTOSConfig.h文件中重新定义这个参数

使用特权

评论回复
6
观海| | 2024-11-5 18:01 | 只看该作者
FreeRTOS提供了[size=0.875]portSUPPRESS_TICKS_AND_SLEEP()函数来实现Tickless模式

使用特权

评论回复
7
guanjiaer| | 2024-11-5 19:48 | 只看该作者
如果滴答定时器的频率太高,会导致频繁的进出睡眠模式,从而增加能量消耗

使用特权

评论回复
8
heimaojingzhang| | 2024-11-5 21:37 | 只看该作者
确保下一个要运行的任务能够被准确唤醒

使用特权

评论回复
9
哈根达斯uz| | 2024-11-14 22:52 | 只看该作者
所以我开始使用STM32CubeMX创建一个简单的项目并安装“X-CUBE-FREERTOS”中间件

使用特权

评论回复
10
故意相遇| | 2025-1-8 22:12 | 只看该作者
在 FreeRTOS 中实现低功耗支持的一种常见方法是使用无滴答模式(Tickless mode)。在无滴答模式下,RTOS 的滴答时钟(也称为系统时钟或心跳时钟)不是固定频率的,而是按需运行

使用特权

评论回复
11
风凉| | 2025-1-9 02:00 | 只看该作者
当没有任务在等待时间延迟或中断时,系统时钟不会消耗电能。这有助于在嵌入式系统中实现低功耗运行

使用特权

评论回复
12
捧一束彼岸花| | 2025-1-9 03:00 | 只看该作者
确保你的系统时钟源是可配置的,并且支持低功耗模式。在某些微控制器上,你可能需要选择一个低功耗的时钟源(如低速振荡器)来降低功耗

使用特权

评论回复
13
失物招領| | 2025-1-9 04:00 | 只看该作者
FreeRTOS 中,可以通过修改 FreeRTOSConfig.h 文件中的配置选项来启用无滴答模式

使用特权

评论回复
14
她已醉| | 2025-1-9 05:00 | 只看该作者
你需要设置 configUSE_TICKLESS_MODE 1 来启用它。此外,还需要配置 configEXPECTED_IDLE_TIME_BEFORE_SLEEP 来定义系统空闲多长时间后进入休眠状态

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
18
白马过平川| | 2025-1-9 09:00 | 只看该作者
在实现低功耗支持后,进行充分的测试来验证系统的功耗表现是否符合预期。使用功耗分析工具来监控系统的功耗情况,并根据测试结果调整配置和优化代码

使用特权

评论回复
19
西洲| | 2025-1-9 10:00 | 只看该作者
一般来说是可以通过芯片的本身低功耗实现的吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

440

主题

1681

帖子

1

粉丝