发展了16年,一直致力于为客户提供最好的编译器。RVDS 是
ARM公司继SDT 与ADS1.2之后主推的新一代
开发工具,目前最高版本是3.1。它由RealView编译器(RVCT)、RealView汇编器(armasm)、RealView连接器(armlinker),以及RealView调试器(RVDebugger)三部分组成。
RVDS对代码密度的提升、代码执行速度的提高,都可以由ARM开发工具自动实现,而不需要软件开发人员花费过多的时间手动优化高级语言代码。这是RVDS的优势所在。
先前版本中的编译器armcc,tcc,armcpp,tcpp 已经整合成一个编译器armcc,可以将标准的C或C++语言源程序编译成32位ARM指令代码或者16位Thumb指令代码或者Thumb-2指令代码。编译器输出的ELF格式的目标文件,包含调试信息。除此之外,编译器可以输出所生成的汇编语言列表文件。
RVDS的编译器根据最新的ARM架构进行特别的优化,针对每个ARM架构都提供最好的代码执行性能,最优的代码密度。可以根据需要选择调试信息级别,以及不同的代码优化方向和优化级别。
RVCT中C和RogueWaveC++库包括
·完整ISO标准C语言库
标准C语言函数集,C语言库需要的支持函数以及在Semihosted执行环境中需要的目标相关的函数。ARM C语言库结构使用户很容易定义目标相关函数,以适应特定的目标环境。
·浮点函数库使用ARM 在IEEE754标准(二进制浮点算法)上实现的浮点环境。
·RogueWaveC++库
RogueWaveC++库包含标准C++函数,编译器需要的支持函数。
各种源文件经过ARM编译器编译后生成ELF 格式的目标文件。这些目标文件和相应的C/C++运行时库经过ARM连接器处理后,生成ELF格式映像文件。
ARM连接器可以去除使用不到的代码段和函数,这样可以减少内存的使用。
ARM连接器可以将不同的指令代码和数据代码放置到不同的内存地址范围。
(http://www.arm.com/support/faqdev/1245.html)
通常在嵌入式系统中,指令和数据代码会固化在非易失性存储器中(ROM或Flash),可以从这些地方上电启动。从运行速度方面考虑,部分指令和数据代码会在启动后搬运到易失性存储器(RAM)中,因此连接器可以使用一些方法机制来配置调度。
这种分散装载(scatterloading)的机制可以让把不同的指令和数据分散的放到不同的地址,而且这些地址在系统启动和系统运行可以是不同的映射。
详细的地址分配可以是用参数来指定,或者用一个描述文件来作为连接器的参数。使用描述文件会使维护起来非常简单,而且如果要改变地址分配,不需要把整个项目完全重新来做,只要把项目中需要的目标重新连接即可。
一个scatterloading文件的示例:
LOAD_FLASH 0x04000000 0x80000 ; 启动地址和长度
{
EXE_FLASH 0x04000000 0x80000
{
init.o (Init, +First) ;
* (+RO) ;
}
32bitRAM 0x0000 0x2000
{
vectors.o (Vect, +First) ;
int_handler.o (+RO)
}
16bitRAM 0x2000 0x80000
{
* (+RW,+ZI)