织梦CMS - 轻松建站从此开始!

罗索

ARM上的C编程

落鹤生 发布于 2015-04-13 18:07 点击:次 
1.arm c编译器默认char类型是8位无符号的,与其它编译器有点不同 2.局部变量最好用int型,因为寄存器是32位的,如果变量不是32位的就需要额外的指令限制范围. 例如:变量i,操作i++ ,如果int i, 则只需add r1,r1,#1 如果char i,则变成add r1,r1,#1 and r1,r1,0xff.
TAG: 优化  ARM  

1.arm c编译器默认char类型是8位无符号的,与其它编译器有点不同
2.局部变量最好用int型,因为寄存器是32位的,如果变量不是32位的就需要额外的指令限制范围.
例如: 变量i,操作i++ ,如果int i, 则只需add r1,r1,#1  如果char i,则变成add r1,r1,#1 
and r1,r1, 0xff  .多了一条指令

3.循环最好用do{}while()型的,相比for(;;)型循环每次循环可以节省3条指令

4.函数参数也最好用int 型的,例如 short add(short x,short y)
      编译器为了保证输入参数的是short型的会添加额外的指令,比如确保x是short型的,需要
      mov r0,r0,lsr #16    mov r0,r0,asr #16

5.函数参数最好不要超过4个,因为前4个参数是通过寄存器r0-r3传递的,超过4个后的参数使用堆栈传递,速度慢多了.

6.适当的展开循环.循环有一定的开销,在一个循环中多做几遍操作,减少循环的次数可以减少循环的开销.
例如:  i = 0;         int i;
               do                                        do{
              {                                             i++;
                 i++;                                     i++;
              }while(i<64)   改为             i++;}while(i<64)
    当然,这样做也增加了代码长度.

7.使用减计数到0的循环结构,这样就不用用寄存器保存终止值.

8.使用无符号的循环计数值,循环条件是i!=0,而不是i>0, 这样循环的开销只有2条指令 

(guanchanghui)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201504/17278.html]
本文出处:CSDN博客 作者:guanchanghui 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容