跳至主要内容

【转】ARM ADS中的AXD 调试经验集锦

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即可

评论

此博客中的热门博文

【转】AMBA、AHB、APB总线简介

AMBA 简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用。在基于IP复用的SoC设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。   AMBA 片上总线        AMBA 2.0 规范包括四个部分:AHB、ASB、APB和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。下面将简要介绍比较重要的AHB和APB总线。 基于 AMBA 的片上系统        一个典型的基于AMBA总线的系统框图如图3所示。        大多数挂在总线上的模块(包括处理器)只是单一属性的功能模块:主模块或者从模块。主模块是向从模块发出读写操作的模块,如CPU,DSP等;从模块是接受命令并做出反应的模块,如片上的RAM,AHB/APB 桥等。另外,还有一些模块同时具有两种属性,例如直接存储器存取(DMA)在被编程时是从模块,但在系统读传输数据时必须是主模块。如果总线上存在多个主模块,就需要仲裁器来决定如何控制各种主模块对总线的访问。虽然仲裁规范是AMBA总线规范中的一部分,但具体使用的算法由RTL设计工程师决定,其中两个最常用的算法是固定优先级算法和循环制算法。AHB总线上最多可以有16个主模块和任意多个从模块,如果主模块数目大于16,则需再加一层结构(具体参阅ARM公司推出的Multi-layer AHB规范)。APB 桥既是APB总线上唯一的主模块,也是AHB系统总线上的从模块。其主要功能是锁存来自AHB系统总...

【转】select问题

问: 该串口初始化如下 ioctl(comm2Fd,FIOBAUDRATE,9600) ioctl(comm2Fd,FIOSETOPTIONS,OPT_RAW) 使用如下 FD_ZERO   (&readFds); FD_SET   (comm2Fd,   &readFds);   width   =   comm2Fd   +   1; FD_ISSET   (comm2Fd,   &readFds); FOREVER { if(timeoutvalue==0) { printf("\nselect   start!\n"); selectnum   =   select   (width,   &readFds,   NULL,   NULL,   NULL); printf("\nselect   over!\n"); }                                 ........... } 现在的状况是程序跑一段时间后会死机或这个串口通讯任务死掉,每次死机都是"select   start!"打印出来,而"select   over!"打印不出来,在仅这个串口通讯任务死掉的情况下,用comm1Fd超级终端登陆,查询任务状态,会发现tExcTask任务居然处于挂起状态??? 哪位大哥帮忙分析一下或给予一点提示,小弟不胜感激!! 答: sele...

搞笑

1.55岁的周润发宣布死后将捐出99%的财产,什么都不想带走。作家顾晓军评论道:千万不要捐到大陆来,不要害了无辜的官员。 2.发改委成立至今只做过两件事:1)涨价,2)替涨价辩护。 3.目前中国有效的反腐手段有:1夫妻反目;2家中被盗;3情人举报;4狗咬狗,5站错队 4.国外奶粉热销中国的原因:1没有三聚氰胺;2如果有,可以索赔巨款;3如果索赔不成,不会坐牢 5.1955年中国的人均收入是韩国的3.2倍,日本的1.1倍。但经过50多年翻天覆地的增长,2008年中国的人均收入是日本的3%,韩国7%,但韩国、日本从来没宣布自己经济怎么翻番,只有中国是天天说自己翻了很多番。 6.中国人固有一死,或死于地沟油,或死于石灰面粉,或死于结石奶粉,或死于毒疫苗,或死于危房,或死于拆迁,或死于躲猫猫,或死于日记,或死于酒色,或死于车轮下,或死于被自杀……死并不可怕,可怕的是你根本不知道自己是怎么死的! 7.中国不一定是和邻国土地争端最多的国家,但肯定是和本国公民土地争端最多的国家。 8.在谈所谓大国崛起之时,请扪心自问:你的收入崛起没有、你的住房面积崛起没有、你的护照免签国家数量崛起没有、你的食品安全崛起没有、你的医保社保崛起,你的国防力量增强了没有...如果都没有,那么大国再崛起关你P事。 9.日本人冈本真夜1997年的一首歌无耻地抄袭了我们2010年世博会的会歌,太可恶了!!? 10.什么是奇迹?我建了一座豆腐渣大楼,然后雇了150个短工装修,很多人说这房子容易塌,我充耳不闻。结果「哗啦」的塌了,把他们埋在废墟里整整八天八夜,我找人挖开塌坍时,有一百多人活着。这是个奇迹,更奇迹的是我他妈不但无罪,表彰会上我还成了救人的大英雄! 11.统计局宣布:中国城市人均月收入已突破9000人民币大关。拖祖国后腿的请自觉转发。 看到这个消息我不禁黯然神伤,仔细算算,我何止才拖了祖国的大腿,我都扒到祖国的臀部了,对不起,祖国---我是否扯到你的蛋了!!