新闻  |   论坛  |   博客  |   在线研讨会
你知道RTOS应用中节省功耗的方法吗?
13261589816 | 2022-07-19 14:24:53    阅读:437   发布文章

你知道在空闲任务中使用一行代码可以节省多少能量吗?FreeRTOS商业版本OpenRTOS及安全版本SAFERTOS的提供商WHIS创建了一个基本应用程序,在RTOS的idle hook中添加了一条WFI指令,通过测量系统节省了超过37%的能耗。如果此RTOS解决方案部署在100万个处理器上,则节省的电量将相当于为165个英国家庭在同一时期供电所需的电量。

通过添加一行代码实现节能、环保的RTOS应用设计

图片

在Cortex-M架构处理器中使用 RTOS 时,WHIS通过在空闲任务中使用等待中断 (WFI) 指令,使处理器能耗节约三分之一以上。

在 ARM Cortex-M 平台上的低功耗实现非常简单:

当使用基于优先级的抢先式RTOS时,只要没有用户任务需要调度,默认情况下RTOS会运行最低优先级的任务,通常是空闲任务。空闲任务执行一个无限循环,每次循环调用“空闲钩子函数”。为了节省空闲任务的功耗,空闲钩子函数需要配置处理器工作在低功耗模式。

一个简单有效的低功耗实现方法是在空闲钩子函数中添加一条WFI指令,将处理器设置为低功耗模式,可以被中断唤醒。

void vApplicationIdleHook( void )

{

asm volatile ("WFI \n" );

}

如果系统在执行空闲任务,则非空闲任务被调度执行的唯一可能方式是响应中断,通常是系统节拍。当中断发生时,处理器恢复到正常模式并继续执行。

结果验证

WHIS基于从 FreeRTOS 升级到 SAFERTOS workshop Demo(请点击“阅读原文”),彩色LED循环应用程序来实现了验证工作。应用包含多个任务,但任务大部分时间处于阻塞状态,因此处理器的每个节拍时间中大部分运行在空闲任务中。在应用中创建了一个空闲钩子函数,其包含一条WFI指令。为了量化可以节省的功耗,我们使用WFI运行应用,然后将其与注释掉WFI指令的应用程序进行比较。

测量结果如下:

图片

单个处理器节省的绝对功率非常小,但是考虑到全球每年部署的大量处理器,可以节省的功率确实可以扩展。大量嵌入式设计中已采取许多硬件/软件措施降低系统功耗,但对于普通的设计,强烈建议设计人员考虑在空闲钩子函数中添加WFI指令。仅需一行代码,如果所有设计都针对功耗进行了优化,节省的能量将是相当可观的。欢迎关注微信公众号【麦克泰技术】


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
北京麦克泰软件技术有限公司(中文简称麦克泰,英文简称 BMR)成立于1995年, 是国内专业的嵌入式系统软件企业,与世界领先的嵌入式软件供应商合作有二十多年的时间,为嵌入式研发提供丰富的工具,软件,解决方案和培训服务。
推荐文章
最近访客