原创 ARM ADS中的AXD 调试经验集锦

2007-7-5 11:01 10998 14 21 分类: MCU/ 嵌入式

1、如何设置AXD连接的Target。


在菜单的Configure Target…选项中可以设置。一般选择MutiIce或者ARMUL两种。


ARMUL是一种ARM的模拟器。一般的算法或者一些无需和硬件中断等设备打交道的程序都可以通过这个进行调试。使用上非常简单。


我们一般上板子进行调试都是通过MutiICE来进行。在刚刚安装了系统的时候,菜单中没有MutiICE,需要我们手动添加:


点击ADD按钮,然后在弹出的文件浏览中,选择“C:\Program Files\ARM\Multi-ICE\Muti-ICE.dll”(默认安装的话)。然后点击“确定”。这样就把MutiICE的调试接口安装上了。


2、如何保存当前的调试现场。


我们在调试过程中,经常需要在不同的地方设置断点、设置Watchpoint或者打开很多source文件。但是,一旦我们关闭了AXD,所有的工 作都白费了。当我们再次打开AXD后,我们得到的仍然是没有任何断点、只打开一个entry文件的调试环境。这里介绍一种方法可以自动保存上一次的调试现 场(寄存器的数据都是保存的)。


        Options->General tab. 这里确认Save and load default sessions 选项 是选中的。然后打开Session File,确保Rselect Target和Reload images 选项是选中的。


        在设置保存后,我们在关闭AXD后,再次启动,就会自动加载上次的image,恢复寄存器了。


 


        如果需要保存多个现场,那么就在设置保存后,在File菜单中选择Save Session来进行保存。不过注意,保存的路径中不能 有空格和特殊字符。最好保存在ClearCase上。在需要恢复现场的时候,只需要Load Session就一切OK。你以前辛辛苦苦设置的断点、 Watchpoint全都回来了。


 


3、不能设置断点,怎么办?


不能设置断点时,我仅知有几种解决方案,这里列举一下:


A:清空CPU的Vector Catch 。


        在Options->Configure Process..中清除。


B:Run一下,马上暂停。


        这种方式对要求不高的断点(诸如设置在APP层中的断点)比较合适。方便。


C:清除以前的断点。


        一般发生在Flash调试的情况。首先清除以前的断点,然后才能设置新的断点。


D:命令行 spp vector_catch 0


     其实和A相同。如果写在开机script中,那么就可以自动排除开机无法设置断点问题。


E:启动AXD的时候使用—debug这个参数,这样就可以添加一个自动断点在Main()上。  


4、         如何不reload image就可以重新从头开始调试。


很多时候我们需要让代码重头跑起来复现一个bug。但是,一般来说,都是reload一下。如果image比较小还可以忍受,但是想660那种16M左右的巨型image,这种代价就未免太大。这里介绍几种我所知道的方法,可以从头开始调试:


A:设置Current寄存器。


        点击 打开process register->current 组。设置pc为0 , cpsr为 svc模式下。关闭Thumb模式。这时F5即可运行下去。


B:运行脚本


        这种方式速度更快,也方便。上上之选。


setpc 0

sreg cpsr 0xd3
 

5、         如何无条件跳转?


一般这种事情最好是在同一个函数中,某条语句无条件跳到另一条语句上时使用。最好不要跨函数使用(否则有堆栈错误,很难查的)


 


把光标定在需要跳转到的代码上,右键菜单execute->Set Next Statement .


 


6、         AXD有没有什么辅助工具?


有的。


 


IDA pro ,非常好的axf解析工具。可以统计axf文件中的函数、全局变量、调用关系等。界面非常友好,代码界面可以清楚看出函数引用关系、变量初始话、变量引用、修改的统计。


可以说,IDA Pro是汇编级的Source insight 。大家可以在网络上下载它的最新版安装使用。


 


7、 如何调试需要加载到Flash上的代码


以下是我的经验:


1、   在有jTag调试口的板子上Download一个版本。


2、   选择 File->load debug symbols 。然后选择CodeWarrior上Release版生成的那个AXF。


3、 现在就可以调试Flash上的程序了。和Debug完全一样。不过注意,在这种情况下,一般只能设置2个断点。


 


8、 使用fromelf命令


fromelf命令可以对我们生成的axf文件进行进一步操作的命令。


 


诸如:


从axf文件中抽出二进制代码:fromelf –bin –output a.bin a.axf


从axf文件中抽出二进制代码:fromelf –m32 –output a.s32 a.axf


9、 FAQ


Q:   生成的ram方式的redboot映像文件,应该使用什么工具调试编译的ram方式的redboot。

用ADS调试工具只能加载.axf格式的文件


A:   用ADS还可以加载bin文件(File->Load Memory From Memory...),可以使用ADS命令行或脚本初始化SDRAM


load bin文件时需要指定载入地址,对于s3c44b0x通常为0x0c040000,即在相应的ldi文件中指定的
SECTION_rom_vectors (ram, 0x0c040000, LMA_EQ_VMA)


将BIN程序Load后,将PC指针修改为0X0C040000即可

文章评论10条评论)

登录后参与讨论

用户755860 2008-6-10 17:07

关于如何调试需要加载到Flash上的代码的问题,能在说详细点吗?

我的油箱:thdzzgj@163.com

用户53358 2007-11-30 12:01

请问怎么把 AXD 仿真中的变量存储到文本文件??

谢谢

用户54384 2007-8-30 22:46

 2007-8-27 17:13:49 iris
为什么在使用AXD调试时,有时可以设置多个断点,但有时只能设置两个断点?
 
你用的是什么仿真器
一般仿真器,只能两个FLASH断点
而RAM则无限制.

用户393545 2007-8-27 17:10

为什么在使用AXD调试时,有时可以设置多个断点,但有时只能设置两个断点?

用户89532 2007-7-23 17:47

哦耶,第二个问题找到了。需要修改ADX用到的debugger的默认order byte设置。默认little-endian(小头)改成大头即可。
呵呵不好意思。可能还真没有谁家的项目改成大头做的,所以没人遇到过这个问题。改成大头据称与互联网协议一致,以便以后需要网络传输可执行文档时候兼容。哦耶。

用户89532 2007-7-23 17:22

又遇到两个问题:(互联网上查了很久别人几乎没有这些问题....实在不行找ADX supporter: Team-EFA去NND...)

1,不知何故AXD罢工:tool bar、menu上几乎所有按钮都浅淡不可用状态。(后来新建一个Windows账户用这个新用户登陆居然恢复了。但是不明白原因)

2,我们程序byte order用big-endian,板子上可以跑,ADX上不能跑。load到ADX就提示:“DBT Warning 00049: Image probably in wrong byte sex
”(RDI Log:
ARMulator ADS1.2 [Build 805]
Software supplied by: Team-EFA
ARM7TDMI, BIU, Little endian, Semihosting, Debug Comms Channel, 4GB, Mapfile,
Timer, Profiler, Tube, Millisecond [20000 cycles_per_millisecond], Pagetables,
IntCtrl, Tracer, RDI Codesequences
ARM RDI 1.5.1 -> ASYNC RDI Protocol Converter ADS v1.2 [Build number 805]. Copyright (c) ARM Limited 2001.

貌似仍以little-endian去load),查资料又说ARM支持little-endian,没说支持big-endian。(不排除前任程序员在自己写的imagee loader.exe中临时转换了 byte order的可能...)

问题1:不知道ADX加载image的时候是否可以指定byte order 呢?
问题2:ARM只支持little-endian么?

用户89532 2007-7-22 11:29

多谢了

用户73377 2007-7-16 13:48

我的ADS也是1.2版本的.

 

你要安装一下multi ice的调试代理软件.

Multi-ICE配套软件“Multi-ICE Server”下载:

Multi-ICE Server2.2安装版本
http://www.mcu123.com/product/multi-ice/Multi-ICE_server_V2.2.rar

Multi-ICE Server2.2.6升级版本
http://www.mcu123.com/product/multi-ice/Multi-ICE2.2.6.zip

请先安装Multi-ICE Server2.2,然后将Multi-ICE Server2.2.6升级包里面的WINDOWS文件夹下的文件覆盖到Multi-ICE Server2.2的安装目录下面即可。

用户89532 2007-7-11 18:25

hi,阁下用的ADS版本多少?

我怎么找不到“菜单的Configure Target…选项”?“C:\Program Files\ARM\Multi-ICE\Muti-ICE.dll”(默认安装)也找不到。ARM下只有“ADSv1_2”目录,没有看见“Multi-ICE”目录。。。。望不吝赐教!

用户89532 2007-7-11 18:21

jj...
相关推荐阅读
用户73377 2008-07-27 23:55
IAR下用JLINK 调试STM32心得
用JLINK 调试STM32心得相关配置:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&...
用户73377 2008-07-19 12:14
KEIL的一些BUG修复
一: 光标问题   Keil uv3 中会出现光标定位不准的问题,对程序员来说是个很大的困扰   修改方法:打开Keil文件夹下的Tool.ini文件做如下修改        NAME="User",...
用户73377 2008-07-19 12:12
LPC2378开发板
ARM7 KIT LPC2378特点:1、硬件资源丰富,可作LPC2378所有资源的实验。2、丰富的例程(实验大全,无一遗漏),让你快速上手,缩短学习ARM的时间加速项目的开发进度。3、良好的技术支持...
用户73377 2008-02-16 21:46
Keil uVision 的中文字体乱码解决办法
Keil uVision 的中文字体乱码解决办法来自http://www.mcu123.net/bbs/dispbbs.asp?BoardID=7&ID=6430&replyID=&a...
用户73377 2007-10-06 19:13
RO段、RW段和ZI段
一般而言,一个程序包括只读的代码段和可读写的数据段。在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中...
用户73377 2007-09-18 16:20
KEIL下用JLINK调试LPC2210外部FLASH
KEIL下用JLINK调试LPC2210外部FLASH ...
我要评论
10
14
关闭 站长推荐上一条 /2 下一条