arm编译工具
深圳市米尔科技有限公司是arm公司官方授权全线工具产品代理商, 提供arm公司原装正版开发工具(包括本产品 mdk-arm)的销售服务,以及arm工具产品的市场推广、产品更新、js555888金沙老品牌的技术支持和js555888金沙老品牌的售后服务。
概念:mdk-arm也称keil mdk-arm、keil arm、realview mdk、i-mdk、uvision4 等,系为同一产品。
arm编译工具链(之前被称为arm realview编译工具)包含:
- arm c/c 编译器(armcc)
- microlib
- arm macro汇编器(armasm)
- arm链接器(armlink)
- arm工具(librarian and fromelf)
基于以上专门针对arm架构的微控制器编译器,工程师可以使用c或者c 编写应用程序。通过以上编译器的编译,可以获得arm汇编语言的高效率和高速度。
arm编译器将c/c 元文件编译成可重定位(relocatable)的目标模块,并且在其中嵌入供uvision调试器或在线调试器调试的符号信息。同时,arm编译器能帮助生成listing file,它可以包含symbol table(符号表)和交叉引用信息。
arm rvct编译器被广泛视为行业最佳的基于arm架构的编译器。它定位于最佳代码密度的编译器,可以帮助生成代码量最小的编译器,帮助节省代码量对内存的要求从而降低硬件成本。同时,编译器支持iso标准的c/c 语言,可以将32-bit arm, the 16-bit thumb,及混合的32/16-bit thumb2指令集生成经过高度优化的代码。
arm公司一直致力于持续改善arm编译器在代码密度和代码性能两方面的性能,同时增添了很多新的特点,如microlib等。
arm c/c 编译器(armcc)
arm and thumb生成模式:工程师可以在同一个源文件中编写arm和thumb代码。arm允许编写更快的代码,特别适合于中断操作。而thumb模式提供了最小的代码尺寸。
- 行业领先的代码尺寸优化:能帮助您通过产生最小尺寸的代码而节省对存储空间的要求,从而节省硬件成本。
- 行业领先的代码性能优化:在不需要提高系统时间速率的基础上,编译器生产的高性能代码能帮助减少能量消耗。
- 用于支持硬件的函数属性:通过arm c编译器提供的函数属性可以访问相关的arm硬件特点。例如:
- __irq允许在c语言中编写中断服务程序。
- __swi(id)允许调用软件中断处理函数r。
- 嵌入的汇编器:工程师可以在c函数定义中插入汇编代码。这一功能对于快速dsp和其他信号处理算法是非常必须。即便您的程序中嵌入了汇编代码,arm编译器能同样支持整段程序的优化。
- 内联函数:通过使用内联函数,你可以加快被频繁调用的函数的执行速度。内联函数为扩展性内联,不会因为函数调用、参数传递和返回等造成开销。
- cpu寄存器中的参数传递:arm编译器自动使用cpu寄存器来传递绝大多数函数参数。它甚至可以帮助在寄存器中传递返回小型的c数据结构。
- 可重入的运行时库reentrant run-time library:大多数库函数是可重入的,可以在主函数或者中断中被条用。而且不需要为库的调用考虑特殊scheme保护。
- ieee-754兼容单/双精度浮点:高精度的浮点支持。
microlib
对mdk-arm v4.1x以上版本进行了改进。
microlib是一个用c语言编写的经过高度优化的嵌入式应用的库(基于arm架构)。相对包含在arm编译器里面传统标准c库,microlib无疑拥有更好的代码尺寸优势,可以满足大多数嵌入式系统要求。
microlib与标准c库之间的主要区别在于:
- microlib主要为高级嵌入式应用而设计。
- microlib已被进行过优化,同使用arm标准库相比,使用更少的代码和数据内存。
- microlib被设计成能脱离操作系统单独工作,当然这并不防碍它同任何os或rtos(例如keil rtx)一起被使用。
- microlib不包含文件i/o或者宽字符支持。
- 由于microlib已经被优化,减小了代码大小,因此相比在arm编译工具里的标准c库例程,一些函数会执行得更加缓慢。
microlib和arm标准库两者均被包含在keil mdk-arm中。
为了在你的嵌入式应用时使用microlib,首先要在μvision设置中勾选microlib选项框,然后编译你的应用即可。μvision会使用microlib来链接你的程序,可快速轻松地减小你的程序代码大小。
mdk-arm v3.1或更高版本方可支持microlib。
arm宏汇编器(armasm)
- 标准宏汇编器:宏处理机支持你可能用来重复或自动汇编指令序列的汇编宏使用
- 条件汇编支持:条件汇编允许你通过控制汇编源代码来创建来自相同的源文件的多个目标应用程序
- 带符号引用的源码列表:列表文件包含一个可选的交叉引用,而该引用可提供关于汇编源文件的详尽信息
arm链接器(armlink)
- 详细的列表文件:链接器创建一个易于理解的综合列表文件。该文件包含像内存配置、输入模块、内存映射图、符号列表以及交叉引用等详细的内容。
- 全局代码列表:链接器创建一个全局的代码列表文件。该文件标明生成代码的拆卸符号。
- 静态堆栈分析:在链接时,链接器计算所要分配的堆栈。这种方法可省去在目标应用程序的运行时堆栈检查。
arm实用程序
-
arm库管理程序armar:让你能够使用一个标准格式的ar库来收集和维护elf目标文件集。通过创建能够传递到链接器来替换多个elf目标文件的可重复利用模块的方式,能够为你节省时间。
使用armar你可以实现: - 创建新的库
- 添加文件到一个库里
- 替换库中的单独文件
- 在一个简单的操作中使用指定文件来替换库中的所有文件
- 控制库中的文件存在位置
- 显示关于指定库的信息(例如,列出所有库中的成员)
-
arm elf工具fromelf:能够让你处理由编译器、汇编器和链接器产生的arm elf目标和镜像文件。
使用fromelf你可以实现:
- 转换elf镜像为其它能被rom工具使用或直接加载到内存的格式
- 显示关于输入文件的信息,例如拆卸输出或符号列表,要么为stdout,或者为一个文件文件。
编译器验证
在超过20年的时间里,arm编译器工具链已经提供一个强大的平台用于软件开发。arm编译器常被用于开发各个行业的软件应用,包括航天航空、保键、自动化、交通、制造业、消费、军事以及电信。今天,在全世界有超过20亿设备运行的软件是使用arm编译器工具链开发的。
每一个arm编译器版本均要经过一个全面的检测过程,这里面包含了在目标代码正确产生的情形下成百上千次的严格测试。编译器、汇编器、链接器和库会被使用不同的优化级别和指定结构选项在仿真和硬件目标来进行测试。
c的验证套件plum hall
c验证套件plum hall是一套用于c编译器验证的行业标准。该标准同时使用正向和反向测试来实现以下目标:
- 基础测试要符合iso c90和c99 c语言标准。
- 产生自检c程序,以便能测试操作符和数据类型的排列变化。
- 确定归定编译时间限制的大小,例如标准符的重要长度或者可能嵌套的包含文件级数。
- 通过产生任意复杂的自检表达式来测试合法表达式。
c 的验证套件plum hall(suite )
suite 是用于ansi/iso c 标准的行业领先的兼容性测试。suite 描述超过4600种用于测试编译器对iso/iec 14882:2003兼容性的正反测试情景。
c 库的验证套件plum hall
libsuite 描述超过2500种用于测试库对iso/iec 14882:2003兼容性的测试情景。
内部验证套件
- 差异测试 –为在代码质量上进行差异检测,arm公司会将从新编译器版本产生的代码与先前测试版本产生的代码进行比较。该测试套件能产生一个关于与先前版本间差异的内部报告。通过对该报告分析,arm公司可以核实是否有任何无法预料的代码差异。
- 回归测试套件 –当缺陷被确定后,测试会被添加到我们的回归测试套件,以便能确定这种缺陷是否能通过将来的编译器升级来弥补。
- 语言扩展 – arm公司维护一组用于测试那些不包含在ansi/iso标准的产品扩展语言的内部测试套件。
- c头文件测试 –验证标准c头文件的内部一致性。通过运行在每个头文件里的编译器和转变它的内部状态来进行测试。然后检查结果,以确保一致性。
- 零空间测试 –测量期望的编译器行为的一致性,优化跨语义等价但语法不同的源代码。
- 数学库测试 –浮点和数学库不仅要经过指定情境的直接测试,而且还使用已知高难度的数值来进行测试。
- 收敛测试 –该套件测试arm编译器是否能进行自身编译。主要包含两阶段:首先使用arm编译器来编译一个本身为arm目标的半主机机制版本。然后c使用该版本来编译第二个版本,和将最后的镜像与目标进行比较。
- 编码数据库(codedb) – codedb为开源就用和认可的用户代码的一个集合,用来验证复杂真实环境的应用,而这种应用要求能使用最新的编译器版本编译能过。
- 产品集成测试 –这些测试可确保不同产品元件已经被成功集成和产生更佳的用户体验。新测试会被产生,以便用于测试发行里的每一个包括新功能的版本。除些之外,产品集成测试由超过1200种回归测试案例组成。
edison设计组(edg)前后端测试套件
edg前后端软件使用gimpel's flexelint, plum hall和成熟的商业测试套件来进行测试。同时,在过去的20多年发展中,该前后端软件已接受~25000种本地回归测试。
roguewave c 库自测试
提供一个附带roguewave c 标准模板库(stl)自测试套件。
gnu审核
这些测试从属于gnu c编译器发布的一部分。它们包括自检测试和用于编译器前后端测试。
abi测试套件
该套件用于测试arm-thumb嵌入式应用二进制接口(eabi)程序调用标准(atepcs)的一致性。
调试测试
该工具检查arm编译器正在产生的有效dwafr调试信息,并能过使用目标-设计语言和dval(dwarf验证者注释语言)的嵌入式注释来分析源文件信息。
缺陷管理
各种缺陷在缺陷数据库中被编号、记录和按优先级排序。根据优先级,它们会定期地被查看和作为修正目标。通过每夜的备份和异地存储使得缺陷数据更加安全。
iso认证
arm公司保持iso9001:2008认证(编号为:lrq 0963114),这种认证适用于在arm处理器上进行的设计、开发和的软件js555888金沙老品牌的解决方案质量管理。
keil产品集成
自从2006年发布以来,arm编译器已经可以使用在所有keil mdk-arm版本(微控制器开发工具)。
更多内容