一、ADS生成bin的方法
Edit》DebufRel settings》Target Settings》Post-Linker》ARM fromELF
然后在ARM FromELF》Plain binary
下面的路径 似乎不用设置,空着就ok,我设了反倒出不来bin。奇怪。还有就是在代码框,也要设置DebufRel settings一遍,好像分开的。ok。
二、ARM在ADS1.2调试的设置(RAM调试)
对于ARM来说调试程序有两种方式,1.将程序下载到RAM里仿真.2.下载到FLASH里仿真。下面我们首先说一下在RAM里放着的编译器设置及调试代理软件的使用方法。
首先,安装ADS12(555,没钱啊有钱就搞ULINK了在MDK在仿真了),然后去网上随便down一个,LEDTEST的44B0(我用的是44b0的开发板)例程来。
然在从网上下载个,H-JTAG或是BANYAN,ARM7都行这些软件叫做调试代理软件,有他们我们就可以用廉价的WIGGLER或是JTAG(244的)简单仿真器,来实现一些调试的绝大部分功能了。
1.打开LEDTEST工程文件。然后在Target-》linker项目选择 ARM linker。
Target-》postlinker项目选择 ARM formELF
2.在linker-》ARM linker-》simple image选项中的 RO base 中填写 0xc008000 RW base 不填。
(注意:这项要根据你的开发板实际填写,我的44B0 SDRAM挂在了bank6上,而bank6的起始地址是0x0c000000,所以我可以添0xc000000以后的地址,但不要太靠后了保证的的程序能放的下,注意不要超出她的范围,44b0 bank6地址最大为0xe000000)
linker-》ARM linker-》option选项的 image entry point里面 填写镜像进入地址,这里也添0xc008000.
linker-》ARM linker-》layout选项的place at beginning of image 中填写镜像加载前须处理的文件(该文件一般最后都会有这条语句“bl Main”跳到主程序处),这里一般填写初始化文件,如INIT的,我的44bo为44binit.S则填写44binit.o文件后面的区域名添init因为该文件里一般不止一起区域我的就还有个ramdata的Area这里的Area是ARM伪指令,关于伪指令部分可查阅我的另一篇文章。
linker-》ARM fromELG-》output format 是文件输出格式,是烧写FLASH用的二进制文件或是HEX因为我们是在RAM里仿真所有可不填.output file name 也是同样。
3.运行仿真代理软件,运行检测CPU,检测目标板,(【注意】一般要将并口设置成EEP模式,如果是笔记本的并口可能不支持该模式,则也可以选择ECP模式(我在我的IBMT43上是可以的),然后还要在设备管理器的并口设置里面,设置成允许使用分配该并口的任何中断,如果你设置禁止使用中断,调试代理是检测不到你的片子的)能检测出型号的就表示连接正确。
然后运行AXD开始设置AXD,AXD设置比较简单,在configure interface-》general-》target connection选项中选ATTACH在configure target 里面选择驱动类型,前面运行的调试代理就是在这里选择的,一般如果用ARM7的调试代理就设置第一项,第二项是软件仿真,如果用其他代理则点ADD,选择调试代理的DLL文件,一般在安装后的文件目录里都能找到,完成后点configure 看看有没有跳出代理的窗口,好完成。
现在你就可以加载image文件来仿真程序了。
顺便说下,在RAM仿真时,我的机器是笔记本,有个并口,不过不支持EEP只支持ECP我选的ECP然后用banyan和h-jtag都好用,但是ARM我没连成功,估计可能是接口的问题。
三、ADS路径问题
以前写代码的时候都是形如:
#include “。.inc44b.h”
#include “。.inc44blib.h”
后来发现,在ads里面工程属性-》target-》access path里面勾选上Always Search User Paths就可以这样了~~~哎,发现的好晚啊~~~
#include “44b.h”
#include “44blib.h”
四、关于ADS的软件仿真
在ADS中点“debug”,打开AXD,选option——》Configure taget——》选择ARMUL,然后,在“ARMTDMI”上点右键,“Load Image”,去打开编好的axf文件。
五、ADS中查找函数的方法
在ADS中,环境下编写程序时,右键单击一个函数名选择“go to definition”以后,可到其函数原型处。查看search的下拉菜单,有“go back”或快捷键(cttl+shift+b) 可回到原位置。
六、Error : A1163E: Unknown opcode SOURCE.S line 46
Answer:
查看是否用了中文的标点符号(,;等),
若是标识符(定义的变量,常量等)要顶格写,其后面不能跟:
若是指令不能顶格写
七、Error : A1150E: Bad symbol SOURCE.S line 49
49 00000070 LDR R1,=INTMAK ; 设置中断屏蔽寄存器,只允许定时器0中断
A: LDR R1,=INTMAK 指令中INTMAK未定义。而是定义了INTMASK(INTMASK EQU 0x3FF4008)
八、C_CALL_ASM
问题:在ads1.2中按下F7调试好后,按下F5或者(Ctl+F5)进入AXD,跳出来的不是C源程序或汇编程序文件,而是disassembly的窗口。之后也不知道处理如何进入源代码的窗口。
原因:ADS ARM Linker下没有设置Place at begining of image,这里要设置映象文件的入口段,就是ResetEntry所在的那个代码段
解决方案:Edit/DebugRel Setting/ARM Linker/Layout/Place at beginnig of image
的Object/Symbol框中填入在Options中设置的入口地址(Image entr point)
九、进入AXD后 fileLoad image 菜单是不可用的灰色状态
解决方案:
OptionsConfigure target
选择其中一个调试器,默认的已选ARMUL,直接按OK即可
十、Error:(Fatal)L6015:Could not any input file to link
文件没有添加到工程文件中
解决:切换到工程文件界面,右键单击Add file
十一、Error:L6207E:Invalid argument for -keep/-first/-last command:‘0x8000’
解决:Edit/DebugRel Setting/ARM Linker/Layout/Place at beginnig of image
的Object/Symbol框中填入在Options中的入口地址值没设置正确,改为entry后符号地址即可
十二、#include file wouldn‘t open
将#include 改为#include “ucos_ii.h”
《》编译器从标准库路径开始搜索
“”编译器从用户的工作路径开始搜索filename.h ,如果没有找到再从标准库路径开始搜索 filename.h
十三、Warning: L6304W: Duplicate input file E:armAppMyUartMyUart_DatadebugRelObjectCode****.o ignored
解决:DebugRelObjectCode里的****.o文件重复输入,原来是我把.s文件和.c文件取了相同的名字,它们都会生成.o文件,名字相同的话,就重复了。改成不同名字就OK,可能还有其他办法,比如让.C文件不生产.O文件,不过没试过,等下次熟悉ADS后再玩。
十四、ADS中,make编译,产生数据容量表:
方法:ADS》》debugrel setting》》linker》》ARM linker》》listings》》Total,打钩。
十五、H-JTAG仿真时的设置问题。
打开H-JTAG软件,检测到cpu后(选dectection),在AXD中》options》configure target》add。。。》选择H-JTAG安装目录下的H-JTAG.DLL文件,最后,载入映像文件,ok。
评论
查看更多