高效的软件编码

gol*_*ean 42 embedded power-management

在典型的手持/便携式嵌入式系统设备中,电池寿命是设计H/W,S/W以及设备可支持的功能的主要问题.从软件编程的角度来看,人们了解MIPS,内存(数据和程序)优化代码.我知道H/W深度睡眠模式,待机模式用于为较低周期的硬件提供时钟或将时钟全部转换为一些未使用的电路以节省电力,但我从这个角度寻找一些想法:

其中我的代码正在运行并且它需要继续执行,因此我如何有效地编写代码"power"以便消耗最小功率?

是否有任何特殊的编程结构,数据结构,控制结构,我应该看一下,以实现给定功能的最低功耗.

在代码结构设计时,或者在低级设计期间,是否存在任何s/w高级设计考虑因素,以使代码尽可能节省功耗(最少功耗)?

mac*_*die 22

  • 如上所述1800 INFORMATION,避免投票; 订阅事件并等待它们发生
  • 仅在必要时更新窗口内容 - 让系统决定何时重绘它
  • 更新窗口内容时,请确保您的代码尽可能少地重新创建无效区域
  • 使用快速代码,CPU可以更快地返回深度睡眠模式,并且此类代码更有可能保留在L1缓存中
  • 一次操作小数据,因此数据也保留在缓存中
  • 确保您的应用程序在后台不执行任何不必要的操作
  • 使您的软件不仅功能高效,而且还具有电源感知功能 - 在电池供电时更少显示图形,禁用动画,减少硬盘抖动

并阅读其他一些指导原则.;)

最近,一系列名为"优化软件应用程序的电源"的帖子开始出现在英特尔软件博客上.可能对x86开发人员有一些用处.


Tim*_*oft 9

Zeroith,使用可以在空闲时停止的全静态机器.你无法击败零赫兹.

首先,切换到无滴答操作系统调度程序.每一毫秒左右醒来就浪费了力量.如果不能,请考虑减慢调度程序中断.

其次,确保您的空闲线程是省电,等待下一个中断指令.你可以在大多数小型设备所处的监管"用户空间"中做到这一点.

第三,如果你必须轮询或执行用户信心活动,比如更新UI,睡觉,做,然后再回到睡眠状态.

不要相信你没有检查过"睡眠和旋转"类代码的GUI框架.特别是你可能想要用于#2的事件计时器.

使用select()/ epoll()/ WaitForMultipleObjects()在读取时阻塞线程而不是轮询.强调线程计量器(和你的大脑),但设备通常没问题.这最终会改变你的高级设计; 它变得更整洁!轮询所有你可能做的事情的主循环最终会在CPU上缓慢而浪费,但确实可以保证性能.(保证慢)

缓存结果,懒洋洋地创建东西.用户希望设备速度慢,所以不要让他们失望.减少运行更好.尽可能少地跑步.当你不再需要它们时,可以杀掉单独的线程.

尝试获得比您需要的更多内存,然后您可以插入多个哈希表并保存搜索.如果内存是DRAM,这是一个直接的权衡.

查看一个比您认为可能需要的实时系统.它可以节省时间(原文如此).他们也更好地应对线程.


180*_*ION 5

不要民意调查.使用事件和其他OS原语等待可通知的事件.轮询可确保CPU保持活动状态并延长电池寿命.


Gar*_*ler 5

从我使用智能手机的工作来看,我发现保持电池寿命的最佳方法是确保禁用程序在该特定点运行所不需要的一切.

例如,只在需要时打开蓝牙,类似手机功能,在不需要时关闭屏幕亮度,降低音量等.

这些功能使用的功率通常远远超过代码使用的功率.