基于ARM编译器版本5的工程迁移与适配到ARM编译器版本6.12的过程
 2019.12.08    |      嵌入式学习    |     AilsonJack    |     暂无评论    |     1466 views
广告位C招租:1
By: Ailson Jack
Date: 2019-12-08
个人博客: http://www.only2fire.com/
<p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">为了描述方便,将ARM Compiler 5简称为AC5,将ARM Compiler 6.12简称AC6.12<span style="color: rgb(0, 0, 0);">。</span></span></p><p style="text-indent: 0em;">&nbsp;&nbsp;ARM官方的迁移文档,下载地址:<a class="btn btn-success" href="https://pan.baidu.com/s/1bQUrnbFPfqyHM9X4n2Iwig" target="_blank">点此下载</a>,密钥:<span style="color: rgb(255, 0, 0);">0iaf</span>。</p><p class="artical_littlestyle1">1、为什么要进行ARM编译器版本的更换</p><p style="text-indent: 2em;">目前,AC5基本处于停止更新状态,如果想要使用AC5编译器编译新的ARM架构或者内核的代码,基本是不可能了,因此自然要使用ARM Compiler 6来代替之前的ARM Compiler 5。<br/></p><p style="text-indent: 2em;">其实,我自己觉得还有一个比较重要的原因,那就是AC6支持使用armclang编译GNU语法格式的汇编代码,这样在以后的项目开发中,可以只编写GNU语法格式的汇编代码(不必像以前一样还要再写一份符合ARM语法格式的汇编代码),这样既可以使用ARM-GCC编译工具链编译这个项目,也可以使用ARM Compiler编译这个项目,汇编代码维护更加方便了。<br/></p><p class="artical_littlestyle2">2、AC6.12的组成</p><p style="text-indent: 0em;">(1).armclang:armclang编译器替代了AC5的armcc,并且具有如下优点:<br/></p><p style="text-indent: 2em;">基于LLVM和Clang技术;<br/></p><p style="text-indent: 2em;">支持编译GNU语法的汇编代码;<br/></p><p style="text-indent: 2em;">高度兼容当初为GCC编译的源代码;<br/></p><p style="text-indent: 2em;">实现包括ANSI/ISO C和C++,用于Arm架构的ABI,用于64位Arm架构的ABI以及Arm C语言扩展(ACLE)等规范。<br/>(2).armlink:功能丰富的专用嵌入式链接器,能够将对象和库组合在一起以生成可执行文件。<br/>(3).fromelf:镜像文件转换和反汇编功能。<br/>(4).armar:压缩程序。<br/>(5).armasm:ARM语法的汇编代码编译器。<br/>(6).ARM C和C++库:ARM C库经过ARM公司的优化有很好的的性能和代码密度;ARM C++库基于LLVM libc++项目。<br/>下图展示了ARM Compiler 6.12编译工具链的整体结构:<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2019.12.08/1575811860601017.png" onclick="preview_image(&#39;/uploads/AilsonJack/2019.12.08/1575811860601017.png&#39;)"/></p><p class="artical_littlestyle3">3、ARM Compiler 5和ARM Compiler 6编译工具链的差异</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">AC5和AC6的主要差异是AC6使用armclang代替了armcc,因此在AC6中就没有armcc这个编译工具了。并且armclang的编译参数相对于之前的armcc的编译参数也有许多不同。</span><br/></p><p style="text-indent: 2em;">下表列出了ARM Compiler 5和ARM Compiler 6之间各个工具的功能:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2019.12.08/1575811860473157.png" onclick="preview_image(&#39;/uploads/AilsonJack/2019.12.08/1575811860473157.png&#39;)"/></p><p class="artical_littlestyle4">4、编译工具链升级过程</p><p style="text-indent: 2em;">其实将AC5更换为AC6.12编译工具链,无非就是找出这两个工具链的编译参数的差异进行修改即可。当然了,基本上编译参数变化还是挺大的,这里推荐大家参考如下手册进行编译工具链升级。<br/></p><p style="text-indent: 2em;">参考手册:《<span style="color: rgb(0, 112, 192);">migration_and_compatibility_guide_100068_0612_00_en.pdf</span>》。因为AC5和AC6.12的差异主要体现在ARM Compiler 6使用armclang代替了armcc,因此这篇文章,可以重点关注Chapter 2和Chapter 3,当然了也可以通过搜索一些编译参数来快速定位。<br/></p><p class="artical_littlestyle1">5、我在升级过程遇到的问题</p><p style="text-indent: 2em;">我在迁移一个项目使用AC6.12的过程中,主要还是参考《<span style="color: rgb(0, 112, 192);">migration_and_compatibility_guide_100068_0612_00_en.pdf</span>》文档进行参数修改,起初还算比较顺利,但是涉及到汇编代码的编译过程中死活编译会有问题。这里简单的记录下吧。我这里仍然使用armasm来编译之前的ARM语法格式的汇编代码。<br/></p><p style="text-indent: 2em;">修改汇编的编译参数时,一定要注意编译选项<span style="color: rgb(0, 112, 192);">--cpreproc</span>,该编译选项在AC5的含义是命令armasm调用armcc预处理输入的汇编源代码;在AC6的含义是命令armasm调用armclang预处理输入的汇编源代码。<br/></p><p style="text-indent: 2em;">我的工程,在使用AC5编译工具链时,在汇编过程中,使用的编译参数配置和armcc的编译参数配置是一样的,并且也添加了编译选项<span style="color: rgb(0, 112, 192);">--cpreproc</span>。<br/></p><p style="text-indent: 2em;">升级到AC6.12之后,因为armclang的编译参数和armcc的差异比较大,自然的就不能够直接用于armasm的配置,因此我按照AC5的armasm配置作为AC6.12armasm的配置,此时能够进行汇编,但是提示:<strong><span style="color: rgb(255, 0, 0);">armclang: fatal error: no target architecture given; use --target=arm-arm-none-eabi or --target=aarch64-arm-none-eabi</span></strong>。<br/></p><p style="text-indent: 2em;">当时我就在想,为什么我使用armasm编译汇编代码怎么会调用armclang呢,还以为编译工程的脚本有问题,检查了编译脚本也没发现问题,后来还是查看《<span style="color: rgb(0, 112, 192);">migration_and_compatibility_guide_100068_0612_00_en.pdf</span>》文档才有所收获。<br/></p><p style="text-indent: 2em;">原来在汇编过程中调用armclang是armasm的编译选项<span style="color: rgb(0, 112, 192);">--cpreproc</span>在作怪,该编译选项是命令armasm调用armclang预处理输入的汇编源代码。ARM Compile 6中armasm需要另一个编译选项<span style="color: rgb(0, 112, 192);">--cpreproc_opts</span>,用于填写armclang预处理汇编代码时的一些配置参数。由于先前没有配置<span style="color: rgb(0, 112, 192);">--cpreproc_opts</span>,当然的在使用armclang进行预处理时会提示armclang: <strong><span style="color: rgb(255, 0, 0);">fatal error: no target architecture given; use --target=arm-arm-none-eabi or --target=aarch64-arm-none-eabi</span></strong>。<br/></p><p style="text-indent: 2em;">问题解决办法:对armasm新增编译选项<span style="color: rgb(0, 112, 192);">--cpreproc_opts</span>,并且填写上armclang预处理汇编代码需要用到的一些配置信息。例如:<br/><span style="color: rgb(255, 0, 0);">armasm --cpu=cortex-a9 --cpreproc --cpreproc_opts=--target=arm-arm-none-eabi,-mcpu=cortexa9,-D,DEF1,-D,DEF2 -I /path/to/includes1 -I /path/to/includes2 input.S </span><br/></p><p style="text-indent: 2em;">对于<span style="color: rgb(0, 112, 192);">--cpreproc</span>和<span style="color: rgb(0, 112, 192);">--cpreproc_opts</span>编译选项,可参考《<span style="color: rgb(0, 112, 192);">migration_and_compatibility_guide_100068_0612_00_en.pdf</span>》文档的 <span style="color: rgb(0, 112, 192);">3.3 Command-line options for preprocessing assembly source code</span>。<br/></p><p class="artical_littlestyle2">6、下面简单列举一些编译参数的差异</p><p style="text-indent: 0em;">(1).对于armcc和armclang之间,编译参数存在的差异如下:<br/></p><table><tbody><tr class="firstRow"><td style="border: 1px solid rgb(163, 163, 163); padding: 5px; word-break: break-all;" width="142" valign="top"><p>AC5 Option</p></td><td style="border-color: rgb(163, 163, 163) rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: solid solid solid none; border-width: 1px 1px 1px medium; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="336" valign="top"><p>AC6 Option</p></td><td style="border-color: rgb(163, 163, 163) rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: solid solid solid none; border-width: 1px 1px 1px medium; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">描述</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px; word-break: break-all;" width="152" valign="top"><p>--cpu=Cortex-M4</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px; word-break: break-all;" width="346" valign="top"><p><span style="font-size: 16px;">--target=arm-arm-none-eabi -mcpu=cortex-m4</span></p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">Co</span><span style="font-size:16px;font-family:宋体">rtex-M4</span><span style="font-size:16px;font-family:宋体">处理器的修改,其他处理器可能不一样,请参考我这里提供的官方手册.</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--thumb</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-mthumb</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">支持</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">thumb</span><span style="font-size:16px;font-family:宋体">指令集</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--fpu=fpv5_sp_d16</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px; word-break: break-all;" width="346" valign="top"><p>-mfloat-abi=hard -mfpu=fpv5_sp_d16</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">支持硬件浮点</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--fpu=softvfp</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-mfloat-abi=soft -mfpu=none</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">软件浮点</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--unaligned_access</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-munaligned-access</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">设定处理器可以生成地址非对齐的数据</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--apcs=interwork</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>没有对应的编译选项</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="260" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">在</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">AC6</span><span style="font-size:16px;font-family:宋体">中总是允许</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">ARM</span><span style="font-size:16px;font-family:宋体">指令和</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">Thumb</span><span style="font-size:16px;font-family:宋体">指令一起使用</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">,</span><span style="font-size:16px;font-family:宋体">因此没有对应的编译选项</span><span style="font-size:16px;font-family: &#39;Calibri&#39;,sans-serif">.</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--split_sections</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-ffunction-sections</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">生成的函数在自己的段中</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--debug/-g</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-g</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">生成调试信息</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--c99&nbsp; --gnu</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-xc -std=gnu99</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">允许编译器编译带有</span><span style="font-size:16px;font-family: &#39;Calibri&#39;,sans-serif">GNU</span><span style="font-size:16px;font-family:宋体">扩展的</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">C99</span><span style="font-size:16px;font-family:宋体">代码</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--cpp&nbsp; --gnu</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-xc++ -std=gnu++03</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">允许编译器编译带有</span><span style="font-size:16px;font-family: &#39;Calibri&#39;,sans-serif">GNU</span><span style="font-size:16px;font-family:宋体">扩展的</span><span style="font-size:16px;font-family:&#39;Calibri&#39;,sans-serif">C++03</span><span style="font-size:16px;font-family:宋体">代码</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--no_exceptions</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-fno-exceptions</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">禁止生成需要支持</span><span style="font-size:16px;font-family: &#39;Calibri&#39;,sans-serif">C++</span><span style="font-size:16px;font-family:宋体">异常的代码</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>--no_rtti</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">-fno-rtti [ALPHA]</span></p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="258" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">禁止生成需要支持</span><span style="font-size:16px;font-family: &#39;Calibri&#39;,sans-serif">C++ Run</span><span style="font-size:16px;font-family:宋体"> Time Type Information(RTTI)</span><span style="font-size:16px;font-family:宋体">特征的代码</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>-Otime</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>默认支持</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="250" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">减少执行时间的优化,代价就是执行文件的大小会增加</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>-O3 -Otime</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-Omax</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="250" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">Highest optimization for performance</span></p></td></tr><tr><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163); border-style: none solid solid; border-width: medium 1px 1px; border-image: none 100% / 1 / 0 stretch; padding: 5px;" width="152" valign="top"><p>-O3 -Ospace</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px;" width="346" valign="top"><p>-Oz</p></td><td style="border-color: currentcolor rgb(163, 163, 163) rgb(163, 163, 163) currentcolor; border-style: none solid solid none; border-width: medium 1px 1px medium; padding: 5px; word-break: break-all;" width="250" valign="top"><p style="text-align:left"><span style="font-size:16px;font-family:宋体">Highest optimization for code size</span></p></td></tr></tbody></table><p style="text-indent: 0em;">(2).对于AC6使用armasm需要注意的事项:<br/></p><p style="text-indent: 2em;">使用AC6编译汇编代码时,编译选项和AC5基本差不多,这里再强调一下编译选项:<span style="color: rgb(0, 112, 192);">--cpreproc</span>。在AC6中如果使用了编译选项<span style="color: rgb(0, 112, 192);">--cpreproc</span>,那么就必须附带的使用编译选项<span style="color: rgb(0, 112, 192);">--cpreproc_opts</span>,并且填写上armclang预处理汇编代码需要用到的一些配置信息,例如:<br/><span style="color: rgb(255, 0, 0);">armasm --cpu=cortex-a9 --cpreproc --cpreproc_opts=--target=arm-arm-none-eabi,-mcpu=cortexa9,-D,DEF1,-D,DEF2 -I /path/to/includes1 -I /path/to/includes2 input.S</span><br/></p><p style="text-indent: 2em;">好了,我在这里简单的记录了下ARM Compiler 5升级到ARM Compiler 6.12的过程,给以后有需要的朋友留作参考吧。<br/></p><p style="text-indent: 2em;">如果觉得文章写的不错,对你有帮助,欢迎点赞,关注博主哟!<br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
广告位C招租:2
广告位C招租:3
广告位D招租:1
广告位D招租:2
暂无评论,要不要来个沙发
发表评论

 
广告位E招租
Copyright © 2015~2021  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号