土豪这个词用在接下来要进场的C言语再适宜不过了。他们在嵌入式C言语里占尽了豪华,但是究竟咱们更需求一个节约型的微生态环境。在这儿简略给咱们剖析一下嵌入式C言语编程时用到的除法与移位。
除法土豪
除法在嵌入式微处理器里可算是一个耗费大户,杂乱的完成办法不只占用了大师名贵的核算时刻并且精度有限状况下占用了大片的RAM。因而,常常在各类文章里看到,编程人员应该运用右移运算来代替除法。这个右移办法没有问题,也的确能进步微处理器的核算才能,节约处理时刻。但是,咱们有必要要注意到,这种办法只适用于整数运算的2的倍数的除法,即除以2、4、8、16等数值。“尽量运用右移来代替除法”这个说法,我是不赞成的。首要由于现在的编程环境都可以优化,像这种以2的倍数的除法,编译器假如以为移位运算要好于除法,那么其就会自觉地编译成为移位运算,而无须用户干涉。
这儿咱们再假定一种状况:咱们在进行一次数据收集处理,每组数据共16个,然后咱们经过迭代的办法将这16个数据求和,然后,再右移4位(除以16)。但是,或许这儿就为咱们日后的更新程序埋一下了个严重危险。恰巧咱们求和的迭代次数是经过一个#define来界说的,而某次收集咱们不需求16个数据,而是15个,咱们将其更新为15。这样,咱们就不得不再从头规划、编写咱们的程序——将无聊的移位悉数换成除法。当然,假如咱们没有意识到这次求均匀的除数是移位4次的问题,那么,15个数据将依然被除以16以求均匀,成果可想而知。
用移位操作时用移位,用除法是便是除法
软件的各种bug,有些是来自原作者,而更多的是来自那些对程序的更新、保护、移植时所形成的。因而,软件代码的应该有较强的可读性与杰出的可移植性。除非是那些特别的函数与结构自己来搞定,大部分的优化仍是交给编译器去做吧!