基于ARM的高效C语言编程
引言
本文引用地址:http://www.amcfsurvey.com/article/151466.htmARM处理器以其高性能、低功耗、低成本等优势被广泛应用于各种成功的32位嵌入式系统中。提高执行速度和减小代码尺寸是嵌入式软件设计的关键需求。尽管大多数的ARM编译器和调试器都带有性能优化工具,但是为了保证其正确性,编译器必须是稳妥和安全的,而且它还受到处理器自身结构的限制。因此,编程人员必须在理解编译器工作特点的基础上来实现代码优化。代码的优化方法较多,本文针对函数优化方法进行阐述。
1 函数局部变量的数据类型
局部变量包括函数内局部变量、函数参数、函数返回值。由于ARM数据操作都是32位,即使数据本身只需要8位或16位,对于这三类局部变量也应尽可能使用32位的数据类型int或lONg,以提高代码执行效率。下面以简单求和函数为例进行分析。
函数add1计算包含10个字的数组array的累加和,add2与add1功能相同,只是将函数add1的参数array类型改为16位的short,函数内局部变量i类型改为8位的char,sum改为16位的short。add1、add2的C源代码如下:
int add1(int *array){
unsigned int i;
int sum=0;
for(i=0;i10;i++)
sum=sum+array[i];
return sum;
}
short add2(short *array){
char i;
short sum=0;
for(i=0;i10;i++)
sum= sum+array[i];
return sum;
}
add1经编译产生的汇编代码:
add1
mov r2,r0
mov r0,#0
mov r1,#0
add1_loop
ldr r3,[r2,r1,lsl #2]
add r1,r1,#1
cmp r1,#0x0a
add r0,r3,r0
bcc add1_loop
mov pc,r14
add2经编译产生的汇编代码:
add2
mov r2,r0
mov r0,#0
mov r1,#0
add2_loop
评论