AXD 使用经验

1、使用AXD进行调试:

AXD不会自动去帮你配置SDRAM,配置SDRAM是用户的事情。AXD只不过提供了命令行,让用户可以配置CPU内部的管理单元。AXD下载的时候,假设用户已经配置好了SDRAM,所以在下载的时候,是用户的责任去确保下载的区域是可写的。所以在AXD中应在运行程序之前让AXD运行一段自动配置SDRAM的指令。

AXD中的VECTOR CATCH的作用,其实VECTOR CATCH的原理就是在相应的位置设置断点,捕捉中断。你在VECTOR CATCH的设置的地方设置了相应的位,就会设置断点。

在AXD中可以随意设置PC。下载到RAM中设定PC为0x30000000(64SDRAM,s3c2440时)如果你想让程序从地址0x0开始执行,你可以在AXD里自己设定PC的值,不过你自己要保证从地址0x0能取到有效的指令

2、1. AXD调试没有什么特别的,他的工作原理是将编译好的运行时映像download到ARM相应地址中去,

然后捕获arm 的PC 强制其到 ADS中 entry point 所设置的映像入口地址上,然后你一点击run,pc就从这个入口地址取指,后面该咋执行就咋执行去了。实际代码的硬件运行环境就是ARM芯片的运行环境。

首先要明确一点的是ADS(AXD) 在线debug时要将编译好的运行时代码download到ARM 的相应地址上去,这里这个download的地址,就是arm上存储部件的地址,必须是RAM型的存储特性才可以被AXD进行download,如果这个地址域被映射成是Flash存储器,AXD 是download不了的,虽然AXD不报错,但可以

通过在AXD下用dissambly 查看一下,如果是flash则看不到正确的指令。

3、正确download之后就是执行程序了,一般外扩SDRAM要有对它时序的配置,这里用AXD调试注意一点

当用外部SDRAM进行download程序时,比如说刚复位过的ARM,extern SDRAM这时还没有对他进行时序配置,这时用AXDdownload到 SDRAM的话可能会有问题,(AXD是通过jtag口在通过sdram把code放到sdram上去的,如果不在axd加载code前实现配置好sdram时序就无法保证加载的正确性,和运行时的正确性,)运行会产生什么异常指令之类的怪现象。sothat ,定要给AXD提供一个已经配置好时序确实可用的SDRAM 这样才能保证download。

正确做法是:在AXD界面内执行菜单Options/Configure Interface/Session File,选择Run Configuration Script,单击Browse,找到该初始化脚本.注意,初始化脚本"2440init.txt"必须放在英文目录下.在AXD界面内的Command Line Interface,可以看到AXD是否运行了该初始化脚本,初始化脚本的内容为(micro2440 ):

Setmem 0x53000000 0x00000000 32
Setmem 0x4A000008 0xFFFFFFFF 32
Setmem 0x4A00001C 0x000007FF 32
Setmem 0x53000000 0x00000000 32
Setmem 0x56000050 0x000055AA 32
Setmem 0x4C000014 0x00000007 32
Setmem 0x4C000000 0x00FFFFFF 32
Setmem 0x4C000004 0x00061012 32
Setmem 0x4C000008 0x00040042 32
Setmem 0x48000000 0x22111120 32
Setmem 0x48000004 0x00002F50 32
Setmem 0x48000008 0x00000700 32
Setmem 0x4800000C 0x00000700 32
Setmem 0x48000010 0x00000700 32
Setmem 0x48000014 0x00000700 32
Setmem 0x48000018 0x0007FFFC 32
Setmem 0x4800001C 0x00018005 32
Setmem 0x48000020 0x00018005 32
Setmem 0x48000024 0x008E0459 32
Setmem 0x48000028 0x00000032 32
Setmem 0x4800002C 0x00000030 32
Setmem 0x48000030 0x00000030 32

可以把这保存为.txt格式的,然后放在没有中文的目录下,在用刚才那样导入进去就行了。在ads中点击调试后,如果SDrAM被配置过了,在axd的command line中会出现

4. 正确进行AXD download 后,接下来就是执行代码了, 这里也有要注意的事情,就是,代码里不要有再次对SDRAM进行时序配置的指令出现,这就好比,程序已经在SDRAM里运行了,然后在运行的过程中又对SDRAM进行了配置,这会出现什么异常之类的怪现象的。但全速运行可能没事。

5.不要用AXD的"reload current image" 进行reload 可以通过设定PC指针:setpc 0x30000000 在command line中让程序从起始处执行

6.cpu 发生中断的跳转地址永远是0x00000000 - 0x000020。

对于发生其他的几种异常也是这样,当发生了这些异常后,cpu的pc指针就自动指向此处,在这些地址通常放一些跳转指令,跳转到真正的中断程序或者其他异常处理程序。(对于2440来说是这样)

AXD 运行错误;

1.Processor ARM720T raise a exception cause : the processor was reset

这个是AXD 检测到PC指针跳到 0x00000000,从0x00000000 取指执行 后产生的东东, 一般正常运行情况下PC只会产生其他7种异常(watch dog 例外). 当pc跳转到0x00000000 取指执行时会被AXD截获作为异常处理而弹出上面的终止框. (ex. mov pc,#0x0 这样的指令在AXD下全速运行时就会引起上面的终止) 其实有时用户就是想要在AXD监视下仍能使PC模拟复位的状况从0x00000000 执行程序,这样的话可以将AXD->option-->configurate processor 对话框中的vector catch选项的[R] 选项去掉. 这个选项就是AXD用来监视PC从0x00000000 取指时产生终止的功能。把它去掉,这样就可以在AXD下顺利模拟PC从复位(0x00000000)来取指执行了。还有其他几个选项是:

AXD使用技巧

1.如何保存当前的调试现场。
我们在调试过程中,经常需要在不同的地方设置断点、设置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全都回来了。

2.不能设置断点,怎么办?
不能设置断点时,我仅知有几种解决方案,这里列举一下:
A:清空CPU的Vector Catch 。
在Options->Configure Process..中清除。
B:Run一下,马上暂停。
这种方式对要求不高的断点(诸如设置在APP层中的断点)比较合适。方便。
C:清除以前的断点。
一般发生在Flash调试的情况。因为如果要在flash中调试的话,可以设置的断点数是有限的,首先清除以前的断点,然后才能设置新的断点。
D:命令行 spp vector_catch 0
其实和A相同。如果写在开机script中,那么就可以自动排除开机无法设置断点问题。
E:启动AXD的时候使用—debug这个参数,这样就可以添加一个自动断点在Main()上。

3. 如何不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即可

嵌入式 AXD调试经验,使用及问题相关推荐

  1. 使嵌入式系统调试更容易:有用的硬件和软件提示

    使嵌入式系统调试更容易:有用的硬件和软件提示 Making embedded system debug easier: useful hardware & software tips 嵌入式系 ...

  2. 嵌入式开发调试学习与思考

    截至今天,自己负责的一个项目算是告一段落,前前后后5个多月时间. 该项目是对公司设计的基于powerpc的处理器进行FPGA仿真阶段的软件验证,以及bootloader和kernel移植,以便芯片进行 ...

  3. 汇编怎么输入_一位过来人的嵌入式汇编语言学习经验

    笔者最近参与了一个项目,需要用嵌入式汇编写测试程序.汇编程序写过,C程序也写过,但是将它们混合起来写还是第一次,完全没有概念.只能上网找资料,自己慢慢摸索. 自己一直用Windows操作系统,但是我们 ...

  4. KEIL 调试经验总结

    来源:公众号[鱼鹰谈单片机] 作者:鱼鹰Osprey ID   :emOsprey 通过前面的多篇文章(已整理成专辑)我们已经了解了很多的 KEIL 调试方法,但是到底该怎么使用这些方法呢?这篇文章将 ...

  5. sja1000调试经验

    sja1000调试经验 去年年底的时候,一个公司给我打电话,问我最近有没有空,说要请我帮忙做一个基于CAN总 这里写代码片线通讯的东西,我去看了看,是一个数据采集系统,下面是一系列数据采集的智能板卡, ...

  6. 嵌入式系统调试诊断方法

    嵌入式系统开发过程实际上就是一个调试诊断的过程,而且调试诊断将一直伴随着一个产品的终身,即使是最成熟的产品也偶尔会出现这样或那样的问题,这都需要开发人员去诊断.排查.       嵌入式系统的调试包括 ...

  7. CMOS Sensor的调试经验分享(转)

    源:CMOS Sensor的调试经验分享 转载于:https://www.cnblogs.com/LittleTiger/p/8251670.html

  8. 分享在实际项目中积累的硬件调试经验 - 调试方法,以及常见调试案例

    文章目录 一.硬件调试的四个目标 二.硬件调试心得 三.一块新的板子的调试思路 四.硬件调试,一些网络资料 五.单片机硬件调试中常见的案例(杂记) 往期系列文章: 1.裸机项目开发经验分享 - 完整开 ...

  9. 海思PQTool进行CCM调试经验

    海思PQTool进行CCM调试经验 前提:事先在不同色温环境下抓取好RAW图,进而才能进行CCM调试. 界面位置 在导入RAW图之前,先配置好Options和黑电平,否则校正会出现一些颜色问题. 导入 ...

  10. 东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录

    东方马达步进电机AZM66AK-HS100+AZD-KD调试经验记录(20170803YC) 本次总结主要实现的功能如下:用MEXE02软件在步进电机驱动器中设置好控制动作,每个控制动作有一个特定的编 ...

最新文章

  1. 6条可以成为更好程序员的建议
  2. Collection接口详解
  3. AngularJS学习篇(十九)
  4. 量子力学 一 基础8 经典概率与量子概率
  5. kali 安装volatility_volatility取证学习-linux
  6. CSS3 -webkit-transition(属性渐变)
  7. CV_64F,CV_64FC1以及CV_64FC2
  8. python的基础字典_python 基础之字典一
  9. 程序员的算法课(9)-常见字符串算法
  10. PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案
  11. Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
  12. amd vega56 ubuntu 下 tensorflow GPU rocm 运行情况记录及跑分
  13. 滑块验证码的解决方法
  14. C++结构型模式-适配器模式
  15. MacBook不借助显示器通过u盘将openwrt安装到软路由硬盘
  16. java web 下拉列表_web中下拉列表的几种实现
  17. python七巧板绘制图案_p5.js绘制七巧板图案2020-09-02
  18. 撑不下去的时候,请看看这19张照片
  19. 基于Matlab的图像几何变换实现
  20. 根据输入的正整数y所代表的年份,计算输出该年份是否为闰年 闰年的判断标准:

热门文章

  1. Java中的注解是什么意思,有什么用
  2. adrunio蜂鸣器音乐(天空之城)c调
  3. DW个人网站设计 练习作业
  4. pentaho mysql_pentaho5.0.1,mysql5 配置,安装
  5. 石乙己——孔乙己程序员版
  6. spring使用之旅(二) ---- AOP的使用
  7. 计算机可以关闭家庭组,win10系统禁用(关闭)家庭组功能的具体方法
  8. 自由与钱无关,限制你的只是自己的格局——北漂18年(77)
  9. 张一鸣宣布卸任字节跳动CEO,联合创始人梁汝波将接任
  10. c语言null是什么意思,c语言null什么意思?