ADS的使用

4538阅读 0评论2012-09-21 wangh0802
分类:嵌入式

一、ADS生成bin的方法

      Edit>DebufRel settings>Target Settings>Post-Linker> fromELF

      然后在
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 "..\inc\44b.h"
#include "..\inc\44blib.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后 file\Load image 菜单是不可用的灰色状态
解决方案:
Options\Configure 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:\armApp\MyUart\MyUart_Data\debugRel\ObjectCode\****.o ignored

解决:DebugRel\ObjectCode\里的****.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。

上一篇:ARM下载的H-JTAG与U-Boot(U-Boot下载裸机程序)
下一篇:ARM指令集及汇编学习