基于ARM的嵌入式系统程序开发要点六——开发高效程序的技巧

基于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嵌入式
  • 嵌入式系统ARM
  • 嵌入式系统设计师
  • 嵌入式系统开发
  • 嵌入式入门
  • 语言分析
  • 工程电路

基于ARM的嵌入式系统程序开发要点六——开发高效程序的技巧相关文档

最新文档

返回顶部