完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简单给大家分析一下嵌入式C语言编程时用到的除法与移位。
除法土豪 除法在嵌入式微处理器里可算是一个消耗大户,复杂的实现方式不仅占用了大师宝贵的计算时间而且精度有限情况下占用了大片的RAM。因此,常常在各类文章里看到,编程人员应该使用右移运算来代替除法。这个右移方法没有问题,也确实能提高微处理器的计算能力,节省处理时间。但是,我们必须要注意到,这种方式只适用于整数运算的2的倍数的除法,即除以2、4、8、16等数值。“尽量使用右移来替代除法”这个说法,我是不赞成的。主要因为目前的编程环境都可以优化,像这种以2的倍数的除法,编译器如果认为移位运算要好于除法,那么其就会自觉地编译成为移位运算,而无须用户干预。 这里我们再假设一种情况:我们在进行一次数据采集处理,每组数据共16个,然后我们通过迭代的方式将这16个数据求和,然后,再右移4位(除以16)。可是,也许这里就为我们日后的更新程序埋一下了个重大隐患。恰巧我们求和的迭代次数是通过一个#define来定义的,而某次采集我们不需要16个数据,而是15个,我们将其更新为15。这样,我们就不得不再重新设计、编写我们的程序——将无聊的移位全部换成除法。当然,如果我们没有意识到这次求平均的除数是移位4次的问题,那么,15个数据将仍然被除以16以求平均,结果可想而知。 用移位操作时用移位,用除法是就是除法 软件的各种bug,有些是来自原作者,而更多的是来自那些对程序的更新、维护、移植时所造成的。因此,软件代码的应该有较强的可读性与良好的可移植性。除非是那些特殊的函数与结构自己来搞定,大部分的优化还是交给编译器去做吧! |
|
相关推荐
2个回答
|
|
|
|
666666
|
|
|
|
只有小组成员才能发言,加入小组>>
7344 浏览 1 评论
2927 浏览 0 评论
2681 浏览 3 评论
2062 浏览 2 评论
1685 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-7 20:35 , Processed in 0.723457 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号