1、编译模式
Keil C51有三种编译模式:Large, Compact, Small模式,Large模式是把默认的变量都分配到外部存储空间,即xdata,通过DPTR访问,生成代码量最大,效率最低的模式;Small模式是把变量的默认位置分配在直接寻址的128字节空间中,即data,是效率最高,成生代码量最少的一种编译模式。
2、手工设置变量位置
xdata,pdata,idata,data,bdata,只有data与bdata是直接寻址的,效率最高,如果选择small编译模式,定义的变量默认都是这两种类型,也可以手工设置如:
unsigned char data i;
或者
data unsigned char i;
3、使用无符号型整数
在C51中没有专门的符号处理指令,两数比较时会生成比较符号的代码,如果没有必要就不要用带符号型的而用无符号型,这样生成的代码效率更高(用unsigned int与unsigned char 代替int, char)
4、用复合操作符
复合操作符如 |=, &=, ^=, >>=, <<=,用这样的操作符生成的代码比用单个的操作符效率更高,如
P1 = P1 | 0xF0,没有 P1 |= 0xF0的效率高,而且结果也不一样,前者是P1口的引脚值与0xF0相或,而后都则是用一条或指令对内部的IO寄存器进行操作
5、把自增与自减操作放到表达式外,如:
while(*string){
*string = '/0';
string++;
}
要比:
while(*string){
*(string++) = '/0';
}
效率高
6、使用指定类型的指针
如,要操作保存在xdata中的字符串,
定义
char xdata buff[];
unsigned char xdata *ptr
ptr = buff;
比定义成
unsigned char *ptr
效率要高,后者为通用指针
7、用单个变量,少使用结构
对于structure定义的变量,Keil 会通过地址的偏移量寻址,使的生成的代码效率很低,使用单个的变量,虽然组织起来稍麻烦一些,但效率较高
|