欢迎来到天天文库
浏览记录
ID:34163296
大小:508.05 KB
页数:11页
时间:2019-03-03
《ADS1.2_to_MDK3.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、从ADS1.2到RVMDK3.0ARM中国姜宁1概述Keil是业界最好的51单片机开发工具之一,它拥有流畅的用户界面与强大的仿真功能。ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RVMDK,它将ARM编译器RVCT与Keil的工程管理、调试仿真工具集成在一起,是一款非常强大的ARM微控制器开发工具。2007年5月,ARM正式授权中国深圳英蓓特公司代理中文版RVMDK的出售事务。很多嵌入式系统开发工程师对ARM的老版本开发工具ADS1.2非常熟悉,而RVMDK与ADS相比较,从外观、仿真流程以及内部二进制编译链接工具上都有了不少改进,用法稍有不同。本主的主旨是介绍通用
2、的流程,以及一些注意事项,帮助ADS1.2用户将老的,遗留的ADS1.2工程转化成在RVMDK上进行开发调试的工程。2工具结构的改进ARM新推出的微控制器开发工具RVMDK与ADS1.2在工具架构组成上有一些不同,这些区别包括:不同版本的ARM编译器(compiler),不同的调试器(debugger),不同的仿真器(simulator),以及不同的硬件调试单元。作为ARM的新一代微控制器开发工具,RVMDK不但包含ARM的最新版本编译链接工具,即RVDS3.0的编译链接工具,而且根据微控制器调试开发的特点采用了与ADS,RVDS完全不同的调试、仿真环境,uVisiondebugger与s
3、imulator。RVMDK集成了RVDS3.0的编译工具RVCT3.0,与ADS1.2相比,除去编译、连接工具的可执行二进制文件不同之外,RVCT3.0的很多编译连接选项与ADS编译器也有不同。2.1POSIX格式RVCT3.0采用了POSIX格式的编译连接选项,所有的多字符选项前必须使用双下划线。例如:ADS的编译选项-cpu,在RVMDK中需要改写成--cpu,否则用户在RVMDK中直接使用ADS的makefile时,工具会产生一个如下警告:Warning:L3910W:Oldsyntax,pleaseuse‘--xxx’2.2编译器例化形式在ADS中,当用户需要将高级语言代码编译成
4、目标文件时,需要根据目标机器码的不同(16位的Thumb代码或者32位的ARM代码),以及高级语言的不同(C代码或者C++代码)选择不同的编译器可执行文件;RVCT3.0编译器则将它们全部统一为armcc,仅仅通过不同的编译选项进行区分。表1较为详细的罗列了其中的差别。表1RVMDK与ADS编译器的例化形式对比ADS1.2RVMDK3.0默认的编译选项armccarmcc--c90–armTccarmcc–thumb--c90armcpparmcc--cpp--armTcpparmcc--thumb--cpp注表1中“默认的编译选项”是指在没有其它编译选项时指编译器的缺省选项。2.3连接器
5、的使用对目标文件进行链接之前,ARM工具的连接器会严格检查各个文件(objects),判断它们是否复合ARM体系结构的ABI表准。由于RVCT与ADS编译链接工具所遵循的ARMABI不同,所以将ADS的遗留工程直接移植到RVMDK并进行连接时,用户可能会遇到如下的错误或者警告:Error:L6238E:foo.o(.text)containsinvalidcallfrom'~PRES8'functionto'REQ8'functionWarning:L6306W:'~PRES8'sectionfoo.o(.text)shouldnotusetheaddressof'REQ8'functio
6、nfoobar这是因为新工具的ABI要求在函数调用时,系统必须保证堆栈指针8byte对齐,即每次进栈或者出栈的寄存器数目必须为偶数。这是为了能够更加高效的使用STM与LDR指令对“double”或者“longlong”类型的数据进行访问。而老的ARM开发工具ADS并没有考虑到新的ARM内核架构,其ABI对于堆栈的操作仅仅要求4byte对齐。所以当用户将在ADS中编译连接成功的工程代码移植到RVMDK上,或者将老的、ADS遗留的目标文件、库文件在新工具RVMDK中进行连接时,RVMDK的连接器就会报出以上的错误。对于以上情况,用户可以通过简单修改代码并重新编译链接,或者使用特殊的编译选项来解
7、决。2.3.1重新编译所有代码当用户拥有该ADS遗留工程的所有源代码时,使用RVMDK重新编译链接全部代码是最好的解决方法。RVMDK中的新版本编译工具会重新生成满足堆栈8byte对齐要求的目标文件,避免由于堆栈不对齐引起的连接错误。当工程中包含汇编代码时,用户可能还需要做少量的代码修改。这些修改包括:1)检查汇编源码中的指令,确保堆栈操作指令是8byte对其的。如Ex1中,ADS的遗留代码一次性将5个寄存器压栈,由于A
此文档下载收益归作者所有
点击更多查看相关文章~~