在ADS中,用户必须在分散加载文件中明确的将特定section代码放置在Root Region中。而MDK为了支持新的RW压缩机制,采用了新的region table格式,这种新的格式并不包含ZISection$$Table,而且新的scatter-loading (__scatter*.o) 与 decompressor (__dc*.o)必须被放置在root region中。所以EX3中ADS的分散加载文件应该被修改成新的形式。例3中提供了两种修改分散加载文件的方法,分散加载文件1通过InRoot$$Sections自动将所有必须的库目标放至在root region中,而分散加载文件2则详细的注明了__scatter*.o与 __dc*.o的位置。
5 C库函数的差异
为了与新的ABI一致,MDK中的库函数名称与ADS可能会有不同。ADS中的__rt_*库函数被替换为__aeabi_*。如果用户的ADS工程中曾经重定义(retarget)过这些库函数,那么在移植到MDK时,需要重新实现这些函数,以满足新ABI的要求。表3列出了部分函数的对应关系。
移植实例
结合以上对MDK与ADS差异的描述,本节将以实例的形式叙述如何将ADS1.2上的遗留代码移植到MDK上。
以Philip的LPC2294(ARM7TDMI)为处理器,将一个在ADS1.2上开发的由LPC2294控制LED闪烁的工程移植到MDK上来。该工程(Legacy_ADS.mcp)共有4个源文件(Startμp.s、tartget.c、IRQ.s、main.c),以及一个分散加载文件(Scatterload)。
使用ADS1.2编译器,编译选项为:-O1 -g+;链接选项为:-info totals -entry 0x00000000 -scatter .\SRC\Scatterload.scf -info sizes,我们得到最终代码尺寸信息如下:
Total RO Size(Code + RO Data) 1640 (1.60kB)
Total RW Size(RW Data + ZI Data) 1128 (1.10kB)
Total ROM Size(Code + RO Data + RW Data) 1640 (1.60kB)
为了能够使用ARM新工具MDK的一系列特性,我们需要把ADS中的遗留工程移植到MDK上来。其具体步骤如下。
1 在MDK中新建工程
打开MDK,在主菜单中选择Project-->New…-->μVision Project,并给新工程命名为New_MDK.uv2并保存。
在MDK自动弹出的器件选择窗口(Select Device for Target)中选择该工程所对应的处理器型号,“LPC2294”。当MDK提示用户是否自动添加启动代码时,选择“否”。
2 添加源文件,并设置工程属性
将Legacy_ADS.mcp工程中所有的源文件都添加到新的New_MDK.uv2工程中来。单击工程属性快捷键,打开工程属性设置窗口,并选择C/C++标签页,设置编译器属性。用户可以根据以前ADS工程的编译属性设置,也可以根据当前具体需求重新设置编译属性。在本例中,我们将ADS遗留工程的编译属性,“-O1 -g+”修改为“-O1 -g -W”后,复制到“Misc Controls”栏中来。这是因为由于编译器版本的变化,其对应的编译选项也有所变化的缘故。注意:-W选项可以抑止所有的warning。
对ADS工程中的链接选项作适当修改如下,使其复合POSIX格式。
--info totals --entry 0x00000000 --scatter .\src\Scatterload.scf --info sizes
选择Linker标签,将修改过的链接选项复制至MDK工程属性的Linker属性中,并单击“确定”按钮。
3 Build工程并适当修改代码
当所有的工程属性都设置好之后,单击“Build all target file”快捷键,对整个工程进行编译链接。在MDK窗口的build输出一栏中,我们会发现系统出现了一个链接错误L6238E,这是由于MDK中新版本编译链接工具与ADS的老版本build工具采用不同的ABI造成的。
4 重新编译链接该工程
代码修改完毕之后,单击“Build all target file”快捷键,对该工程进行二次编译链接。MDK将成功生成New_MDK.axf文件,并显示其代码尺寸信息为:
Program Size: Code=1576 RO-data=64 RW-data=0 ZI-data=1128
这些信息同样可以从链接生成的New_MDK.map文件中得到。
5 代码调试与固化
与其他ARM开发工具相比较,MDK拥有非常出色的仿真功能,可以帮助用户在纯软件的平台上进行较为精确的调试。用户可以在工程属性设置窗口选择simulator调试或者通过硬件调试工具(uLink)进行调试。
当选择simμlator调试时,单击debμg快捷键,打开simulator调试窗口。为了验证该程序在LPC2294硬件平台上是否能够正确执行,通过GPIO口驱动LED进行循环闪烁,用户可以单击Peripherals->GPIO->Port2,将GPIO端口2的仿真界面打开。
单击运行快捷键,可以看到在GPIO端口2的仿真调试窗口中,IO口的输出在不停的循环变化。
当程序通过了仿真调试之后,用户就可以通过MDK的硬件调试工具,uLink,将最终代码固化在非易失性的存储器中了。
点击此处查看全文
本文关键字:暂无联系方式ARM单片机,单片机-工控设备 - ARM单片机
上一篇:基于ARM9的嵌入式网关的研究