菜鸟学uC/OS_II(14)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
By <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Norman
2008-8-4
为了得到更多的启动代码例程,我决定求助于MDK。因为ARM-ADS作为系统级的开发IDE,对于现阶段对ARM的学习没有多大帮助,而MDK又具有中文帮助文档等优点,直接针对ARM的应用,很实用。
作为例程,启动代码结构其实同ADS下ZLG给的差不多,不同的是MDK下全写在汇编中,而在ADS下,是由一个Target.c文件的,做的工作其实是一样的。
出现的问题:
1)为了编译uCOS,我直接利用了ADS中的移植文件。发现一个编译错误:
——OS_CPU_A.o(.text) contains invalid call from '~PRES8' function to 'REQ8' function——
这是一个对齐的问题,MDK中ABI是用8Bytes对齐的,ADS中则不是;压栈的时候,ADS可能压的是单数的寄存器,而MDK中需要的是偶数(这里,ZLG给出的代码中有一个R12的压栈,相信是为了匹配这个要求的),不过,只修改这些还不行,还需要在代码段开始的时候写一条语句:PRESERVE8——所以,这里有两个地方需要注意。
这个问题网上很多人遇到,也给出了具体解释,参看《从ADS到RealView MDK》一文。
2)error: L6236E: No section matches selector - no section to be FIRST/LAST
按照《从》一文的步骤,出现了这个没有提到的错误。在网上查查,原来是
AREA vectors,CODE,READONLY
——>
AREA RESET, CODE, READONLY
暂时不懂为什么要这样改,是段名一定要相同么?那为什么我改成Reset要报重复错误?
3)MDK中支持中断句柄否?
4)*** error 65: access violation at 0x400009E0 : no 'execute/read' permission
这是软件设置问题还是程序?
没有选择对目标器件——程序是针对LPC2148的,LPC2131的内存区域同2148有一定的出入,造成这种结果。如果将内存映射改一下,对应于LPC2131的内存,就可以运行了。不过仿真结果却不太理想,不知道这和软件、计算机硬件配置有没有关系。
tengjingshu_112148725 2009-3-16 18:17
用户1125921 2008-9-15 22:07