基于ARM的嵌入式系统程序开发要点六——开发高效程序的技巧
基于ARM的嵌入式系统程序开发要点六——开发高效程序的技巧
基于ARM的嵌入式系统程序开发要点(六)
——开发高效程序的技巧
■ ARM中国 费浙平
开发高效率的程序涉及很多方面,包括编程风格、算法实现、针对目标的特殊优化等。这部分主要从ARM的体系结构特点出发,介绍几个程序开发中的注意点。

在32位的寄存器中进行符号扩展,其中带符号的变量,要用逻辑左移(LSL)接算术右移(ASR)两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与(AND)指令对符号位进行清零。所以,使用32位的intint g(void);int errs;
void test1(void){errs += f();
errs += g();
}
void test2(void){int localerrs = errs;
localerrs += f();localerrs += g();errs = localerrs;
}
// f()和 g()不访问全局变量errs// 全局变量
由此可见,在变量声明的时候,需要考虑怎样最佳地控制存储器布局。当然,编译器在一定程度上能够优化这类问题,但是最好的方法还是在编程的时候,把所有相同类型的变量放在一起定义。
第二个问题是局部变量的类型定义。一般情况下,人们总是设法使用short或char来定义变量以节省存储器空间;但是,当一个函数的局部变量数目有限时,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。这样,使用short和char型变量不但起不到节省空间的作用,还会带来其它的副作用,如图2所示。假定a1是任意可能的寄存器存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要
// 定义冗余的局部变量
在第一种情况test1()里,每次访问全局变量errs时,都要先从相应的存储器load到寄存器里,经f()
84


你可能喜欢
- ARM嵌入式
- 嵌入式系统ARM
- 嵌入式系统设计师
- 嵌入式系统开发
- 嵌入式入门
- 语言分析
- 工程电路
- ARM嵌入式linux入门文章3页
- ARM嵌入式系统习题[1]6页
- ARM嵌入式系统初始化过程3页
- 基于ARM嵌入式系统的拟人机器人控制器的设计4页
- ARM嵌入式C编程标准教程363页
- ARM嵌入式系统硬件设计及工程应用45页
- 基于ARM核的嵌入式系统异常处理机制的设计5页
- ARM嵌入式系统习题[1]6页
- ARM嵌入式系统初始化过程3页
- 基于ARM嵌入式系统的拟人机器人控制器的设计4页
- 如何学习嵌入式系统(基于ARM平台)7页
- ARM嵌入式系统硬件设计及工程应用45页
- 嵌入式系统设计师考试笔记(完整整理版)65页
- 2007年下半年嵌入式系统设计师上午题12页
- 2007年下半年嵌入式系统设计师考试答案3页
- 嵌入式系统设计师笔记17页
- 嵌入式系统设计师_历年试题解析(2)15页
- 嵌入式系统设计师_历年试题解析(1)20页
- 医疗设备中的嵌入式系统开发策略4页
- 第2章嵌入式系统开发过程32页
- 基于GPRS网络的嵌入式系统的设计与开发7页
- 基于arm uClinux的嵌入式系统开发12页
- 嵌入式系统开发过程(3)(68p)68页
- 07 嵌入式系统接口及驱动程序开发42页
- 嵌入式入门文章18页
- 嵌入式入门学习指导word53页
- 关于嵌入式入门很好的一个帖子5页
- 嵌入式入门介绍23页
- 嵌入式入门7页
- 嵌入式入门8页
- 电气工程师_电路基础91页
- 电气工程师_电路的分析方法81页
- 20种工程电路7页
- 工程电路分析答案(英文版)15页
- 工程电路分析答案(英文版)34页
- 工程电路分析答案(英文版)19页


