1718|0

6614

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

嵌入式C语言里的土豪们之除法与移位 [复制链接]

    简单给大家分析一下嵌入式C语言编程时用到的除法与移位。

  除法土豪

  除法在嵌入式微处理器里可算是一个消耗大户,复杂的实现方式不仅占用了大师宝贵的计算时间而且精度有限情况下占用了大片的RAM。因此,常常在各类文章里看到,编程人员应该使用右移运算来代替除法。这个右移方法没有问题,也确实能提高微处理器的计算能力,节省处理时间。但是,我们必须要注意到,这种方式只适用于整数运算的2的倍数的除法,即除以2、4、8、16等数值。“尽量使用右移来替代除法”这个说法,我是不赞成的。主要因为目前的编程环境都可以优化,像这种以2的倍数的除法,编译器如果认为移位运算要好于除法,那么其就会自觉地编译成为移位运算,而无须用户干预。

  这里我们再假设一种情况:我们在进行一次数据采集处理,每组数据共16个,然后我们通过迭代的方式将这16个数据求和,然后,再右移4位(除以16)。可是,也许这里就为我们日后的更新程序埋一下了个重大隐患。恰巧我们求和的迭代次数是通过一个#define来定义的,而某次采集我们不需要16个数据,而是15个,我们将其更新为15。这样,我们就不得不再重新设计、编写我们的程序——将无聊的移位全部换成除法。当然,如果我们没有意识到这次求平均的除数是移位4次的问题,那么,15个数据将仍然被除以16以求平均,结果可想而知。

  用移位操作时用移位,用除法是就是除法

  软件的各种bug,有些是来自原作者,而更多的是来自那些对程序的更新、维护、移植时所造成的。因此,软件代码的应该有较强的可读性与良好的可移植性。除非是那些特殊的函数与结构自己来搞定,大部分的优化还是交给编译器去做吧!

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表