提高51单片机代码效率

来源:互联网 发布:python web 框架 编辑:程序博客网 时间:2024/06/05 05:30

1、51单片机不支持符号运算,所以程序中不要出现带符号变量的运算。除了根据变量长度来选择变量类型外,还需要考虑变量是否出现负数,如果程序中不需要负数,就可以把变量都声明为无符号类型。

注:不支持符号运算:
带符号变量就是这个变量里存储的数据是可正可负的。51单片机没有直接进行带符号数运算的指令。例如:i 和 j 是两个带符号变量,两个数相加,则你编写程序的时候首先要判断它们是正数还是负数,然后根据正负进行相应的加法或减法运算。C语言里支持带符号变量的运算,如果在C语言里有两个带符号变量,可以直接进行加法运算,而不需要判断其正负。


2、为了提高代码效率,需要合理的选择数据和变量类型,使用位变量(bit),并避免使用浮点指针,如果浮点指针运算能被中断,则必须保证中断程序中不会使用浮点指针运算。如使用sin()这样的浮点运算程序时,应禁止使用中断,要在运算程序执行完以后再使用它。

使用运算量最小的表达式,如:
1》求余运算:a = a % 8 ==> a = a & 7,因为位操作只需要一个指令周期,而%运算需要调用子函数,代码长,执行慢。
2》平方运算:a = pow(a,3) ==> a = a * a * a,因为单片机内置乘法器,乘法运算速度比平方运算的速度快。
3》用移位运算代替乘除:a = a * 2 ==> a = a << 1,a = a / 2 ==> a = a >> 1,a = a * 5 ==> a = (a << 2) + a

使用自加自减指令
使用a += 1 编译器生成的代码指令字节要少于 a = a + 1

循环变量控制
1》将不必要在循环内执行的表达式,函数的调用,指针运算,数组访问等写道循环的外面
2》延时函数使用自减而不是自加
for(i = 0 ; i<1000 ; i++) ==> for(I=1000; i>0 ; i–)
这是因为所有的51单片机几乎都有为0转移的指令,使用自减就比自加少了1~3字节的指令
3》使用do…while而不是while,do…while的代码长度比while短。


0 0
原创粉丝点击