ARM 嵌入式系统开发综述

ARM 开发工程师入门宝典
技术分类: 电子/测试    来源:设计创新  发表时间:2007-10-18
          ;
  }
  }

  ·本文件定义了启动区域和三个执行区域。在大括号外面定义了启动区域(LOAD_FLASH),里面三个定义了执行区域(EXEC_FLASH,32bitRAM,16bitRAM)。
  ·为了提高运行速度,异常向量(在vectors.s)和异常句柄(在int_handler.c)被重新放置到32bitRAM的零地址开始的地方。
  ·可以读写的变量被复制到16bitRAM的0x2000地址开始的地方。
  ·零初始化的数据和可读写数据放在16bitRAM内。
  ·其他不需要搬运的代码只需要还放在Flash里就好。

  3.1 RVCT 的优化级别与优化方向
  提到RVCT就不能不提ARMcc的四个优化级别和两个编译选项,-O1、-O2、-O3、-O4,以及-Otime、-Ospace。-Ospace与-Otime负责给编译器提供代码优化的大方向,告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码性能(-Oti
me)。而-O1、-O2、-O3、-O4则分别代表4种逐次递进的不同优化级别。
  
  OSpace 还是OTime?
  显然代码密度与代码执行速度在很多情况下是一对矛盾。以下面的代码为例。例1中左右两段代码可以完成相同的任务,但是左边的有较高的代码密度,右边的则有较高的执行速度。因为当expr = 0时,标志循环结束时,右边的代码可以顺序执行下去;而左边代码必须先跳转至循环体首部判断expr的值,随后再跳转道循环体尾,继续执行下一条指令。
  例1 代码速度与尺寸的对比
  
  while (expr)          if (expr) do
  {                    {  do
  body;                    { body; }
  while (expr);
  }                    }
  
  那么我们什么时候使用Otime 什么时候使用Ospace呢?Otime与Ospace需要开发人员根据系统实际需求来决定,最好的情况是在两者之间找到一个合适的平衡点,而不是单纯的追求速度或者代码尺寸的缩小。即,将不同的代码模块根据其特性分别使用不同的编译选项。

  此外,RVCT编译器支持很多非常有用的编译选项,如--no_inline(取消所有代码的内联函数)、--split_ldm(限制LDM/STM指令的最大操作寄存器数目)、--split_sections(将每个函数,而不是源文件,作为一个编译单元进行操作)等等。

  编译器的所有这一切都可以严格根据开发者的要求,帮助开发人员得到系统真正需要的优化过了的代码。
  
  O3 还是O2?
  老的开发工具,如ADS1.2中,只有3种递进的代码优化级别,对应3种编译选项,即-O0(Minimum optimization)、-O1(Restricted optimization)、-O2(High optimization )。使用-O0编译选项时,RVCT编译器只对代码作最基本的优化操作,编译结束后用户得到的代码与用户手写源代码之间的差距很小,这种特性的主要作用是为了方便用户在程序开发阶段的调试工作,避免由于优化而产生的调试屏障。此外,很多资深软件工程师偏向于手写优化代码,在这种情况下,由于代码已经被优化过,可以使用-O0编译选项减少RVCT的工作量,节省编译链接的时间。

  -O1与-O2则分别是相对于-O0更加高级别的编译优化选项,前者提供有限的优化;后者则会对代码进行较大程度的优化改进操作。RVDS中新增加了-O3(Maximum optimization)编译选项,它可以最大程度的发挥RVCT编译器的优势,将代码编译成最优。O3与O2都是较高级别的编译优化选项,但-O3相比较于-O2,主要优































1】【2】【3】【4】【5】【6】【7】【8
收藏此页】【  】【打印】【关闭

精彩专题

超值订阅2009年度DESIGN NEWS China杂志

DESIGN NEWS China杂志向国内读者介绍国际上最先进的工业技术与设计,涉及电子/测试、运动控制/自动化、创新材料、工程软件/硬件、汽车设计等领域,现在订阅可获更多优惠…[ 详细内容 ]

浏览该文章的用户还看过

  • 文章
  • 论坛
  • 博客