使用ADS调试bootloader

 

/**************************************************************************

**  标题: 使用ADS调试bootloader

**  作者: ProEmbedded & 韦伯嵌入式开发网

**  发布日期: 2011-2-12

**  最后修改: 2011-2-12

**  注意事项: 转载需注明出处,且转载过程中不得修改、删除文章中的任何内容;

**                     未经作者同意,商业网站不可转载

**************************************************************************/


所谓使用ADS调试WINCE的BOOTLOADER,实际上是用到ADS的调试工具AXD,当然其它的一些ARM开发平台也可以。

BOOTLOADER虽然不复杂,但是却是WINCE、LINUX等系统运行的前提保证,只有BOOTLOADER运行了才能进行后续的OS启动,而很多人对BOOTLOADER的调试很头疼,其实BOOTLOADER调试并没那么复杂。

既然是做WINCE或者LINUX的移植,那么首先拿到一套BSP是必须的,而这个BSP通常是针对某个平台可以正常运行的,BOOTLOADER功能相对简单,开发者只是根据自己的产品做些代码的修改,当自己修改的BOOTLOADER不能正常运行的时候完全可以借助,AXD来进行调试,而必需的工具是一个JTAG,调试ARM9可以使用并口的H-JTAG,ARM11可以用盗版的JLINK-V8等。
(原帖地址:http://www.veabol.com/thread-56-1-1.html,转载请注明bm)

 

当系统运行异常时不要断电,将JTAG连接好,启动AXD,这个时候就可以查看当前的PC值,然后进行单步运行,追踪问题。
假如无法连接JTAG,则可能系统出现了比较严重的异常等,导致CPU无法正常连接JTAG,这个时候可以找一段确保无误的代码,在其后边加入死循环while(1),(比如,你确认第N个函数执行正常,当执行第N个函数之后的代码时出现异常,那么便可以在第N个函数中加入死循环),下载到电路板上后运行死循环便会停住,此时查看当前的PC值比如,0x00000228,然后通过AXD的命令窗口将PC值置到下一句代码的位置,如setpc 0x0000022C,然后再音步执行,这样就可以继续查问题了。

这种调试方法需要一定的汇编语言分析能力,因为通过AXD查看的内容全是经过机器码反汇编出来的,但是源代码是自己编写的,对照着源代码分析是可行的,所以这个方法对于调试BOOTLOADER十分有用。

注意:while(1)之后的语句可能被优化掉,所以可以采取另一种方式,定义一个变量 i,在函数中将i = 1,然后在需要的地方加入while(i)就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值