打印

常用的降低软件功耗的方法

[复制链接]
2128|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhengbo7hui|  楼主 | 2012-1-10 17:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、用查表的方法代替实时的计算,尽量减少CPU的运算量。特别是在没有硬件浮点处理单元的MCU进行浮点处理时,直接用MCU进行浮点处理将会消耗大量的时间。将一些运算的结果预先算好,放在Flash中,用查表的方法替代实时的计算,减少CPU的运算工作量,可以有效地降低CPU的功耗。很多微处理器都有快速有效的查表指令和寻址方式,用于优化查表算法,这种处理方法在离散余弦变换和AD数据采集中能够了带来可观的效率提升。

相关帖子

沙发
zhengbo7hui|  楼主 | 2012-1-10 17:44 | 只看该作者
2、对于不可避免的实时计算,应注意计算的精度,算到精度够了就应立即结束,避免“过度”的计算。在精度允许的情况下,使用简单函数代替复杂函作近似运算,也是减少功耗的有效方法

使用特权

评论回复
板凳
zhengbo7hui|  楼主 | 2012-1-10 17:49 | 只看该作者
3、尽量使用短的数据类型,如尽量使用字符型的8位数据代替16位的整型数据。
4、尽量使用分数运算而避免浮点运算
5、用移位运算代替乘除运算。采用MCU计算乘除也是非常耗时的,如果采用左移和右移的办法来实现乘除法运算,将会减少运算时间,注意,除法的移位计算只能针对除数比较特殊的情况。

使用特权

评论回复
地板
zhengbo7hui|  楼主 | 2012-1-10 17:55 | 只看该作者
6、采用快速算法。在搜索算法中,使用二分搜索法和分段查找算法的效率是不同的,从理论上可以估算,在1024个测量值的查找中,二分搜索最坏情况下10将可以查找到结果,顺序搜索最坏可能需要1024次。这在测量数值更多的情况下更为突出,一个高效率的查找算法有助于减少程序的运行功耗。
7、数字信号处理中的运算,采用FFT和快速卷积等,可以节省大量运算时间
8、一个程序使用中断方式还是查询方式,对于很多应用来说并不是那么重要,但在软件低功耗设计特性上却相差甚远。能用中断就用中断,不要用采询方式
9、采用定时器,在程序中可以采用软件延时,但是,如果系统的定时器资源充裕,在需要定时的场合,最好采用硬件定时器,当定时器到定时后,向MCU发出中断请求信号。

使用特权

评论回复
5
zhengbo7hui|  楼主 | 2012-1-10 18:00 | 只看该作者
10、用宏代替子程序。在程序执行过程中,读RAM需要比读Flash更大的功耗,宏是在编译器预处里阶段进行替代,而在子程序的调用中MCU需要进行现场保护。在一次子程序调用中,因为CPU进入子程序时会首先将当前的CPU寄存器压栈,返回时出栈,这样最少有两次的RAM操作。对于程序设计来说,调用一个子程序还是一个宏,在程序写法上并没有什么不同,但宏会在编译时展开,CPU只是顺序执行指令,避免了调用子程序,唯一的问题是增加了代码的长度(代码量)。但现在的单片机的Flash一般都够用。

使用特权

评论回复
6
永远的不知| | 2012-1-12 16:35 | 只看该作者
总的指导思想就是让cpu少工作,多休眠。

使用特权

评论回复
7
caiwenbin| | 2012-1-12 20:03 | 只看该作者
多休息,对大家都有好处!别让老板发现就成!

使用特权

评论回复
8
peter_zheng| | 2012-1-12 20:22 | 只看该作者
精简代码,减少执行代码指令,让cpu完成相同的工作执行更少的代码,降低功耗

使用特权

评论回复
9
litgb| | 2012-1-12 21:17 | 只看该作者
讲的是这么个理

使用特权

评论回复
10
爱之翼V| | 2012-1-16 11:01 | 只看该作者

使用特权

评论回复
11
爱之翼V| | 2012-1-18 17:09 | 只看该作者
多谢楼主告诉我们那么多降低功耗的方法,多休息肯定没错

使用特权

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

本版积分规则

50

主题

502

帖子

1

粉丝