ARM嵌入式C语言设计小技巧

1 变量定义
先来看下边的两处变量定义

char a;
short b;
char c;
int d;

char a;
char c;
short b;
int d;
显然两处定义的变量是相同的,不同之处在于定义的顺序。看一下他们分别在数据区的布局
(pad为无意义的填充空间)

a pad b
c pad
d

a c b
d
由上可得出一般意义上的准则:
最好把所有相同类型变量放在一起定义,以便优化存储器布局。
下面说一个例外的情况:
当函数局部变量数目有限时候,编译器会把局部变量分配给内部寄存器,每变量占用一个寄存器。此时使用32位int 或 unsigned int 局部变量最有效率。因为8或15位变量完成加法后还要在32位寄存器里面完成符号扩展。
还有就是冗余变量的使用,一般我们总是避免类似情况的使用。但是也有例外:
int f(void);
int g(void);
int errs;

void test1(void)
{
errs += f();
errs +=g();
}

void test2(void)
{
int localerrs = errs;
localerrs += f();
localerrs += g();
errs = lpcalerrsl
}
在test1中,每次访问全局变量errs,都需从相应存储器load到寄存器中,经函数调用后在store回原来存储区。共有两次load/store操作。在test2中显然只有一次load/store操作。
2参数传递
一般参数数目超过四个,则使用堆栈传递,因此尽量将参数控制在四个以下。
3循环条件
计数循环
for(loop=1; loop <= limit;loop++)是常用的循环形式。递减计数则很少使用。在逻辑上两种方式并没有差异,但映射到具体体系结构,就有了很大的不同。
本质原因:当进行非零常数比较时候,必须利用专门的CMP指令来执行。但是一个变量与0比较时候,可以直接利用条件执行的NE来判别。因此ARM体系下,建议递减至0的方式设置循环条件。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值