打印
[ZLG-ARM]

周立功的ADS模版在RVDS下编译需要改什么?

[复制链接]
2144|2
手机看帖
扫描二维码
随时随地手机跟帖
沙发
虚拟电路| | 2009-7-24 13:21 | 只看该作者

可以看看

  RVCT的优化级别与优化方向
    提到RVCT就不能不提armcc的4个优化级别和2个编译选项,分别是-O1、-O2、-O3、-O4,以及-Otime、-Ospace。-Ospace和-Otime负责提供代码优化的大方向,告知编译器编译任务的主要目标是代码密度(-Ospace)还是代码性能(-Otime);而-O1、-O2、-O3、-O4则分别代表4种逐次递进的不同优化级别。
  (1)Ospace还是Otime?
    显然代码密度与代码执行速度在很多情况下是一对矛盾体。以下面的代码为例。例1中左右两段代码可以完成相同的任务,但是左边的有较高的代码密度,右边的则有较高的执行速度。因为当expr  = 0且标志循环结束时,右边的代码可以顺序执行下去;而左边代码必须先跳转至循环体首部判断expr的值,随后再跳转至循环体尾,继续执行下一条指令。
   例1  代码执行速度与代码密度的对比。
        while (expr) {if (expr) do  {
            do
          body;{ body; }
            while (expr);
          }  }
    那么什么时候使用Otime,什么时候使用Ospace呢?这需要开发人员根据系统实际需求来决定,最好是在两者之间找到一个合适的平衡点,而不是单纯地追求高速度或者小尺寸。也就是针对不同的代码模块根据其特性分别使用不同的编译选项。
    此外,RVCT编译器支持很多非常有用的编译选项,如--no_inline(取消所有代码的内联函数)、--split_ldm(限制LDM/STM指令的最大操作寄存器数目)、--split_sections(将每个函数,而不是源文件,作为一个编译单元进行操作)等。
    编译器的所有这一切都可以严格满足开发者的要求,帮助开发人员得到系统真正需要的优化过的代码。
   (2)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的主要优势有以下几点。当用户使用

使用特权

评论回复
板凳
armqt| | 2009-7-24 17:19 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

127

帖子

0

粉丝