JTAG调试原理

        在单片机程序开发过程中,使用调试器给程序打断点、单步运行等调试功能是很方便了解程序的运行情况的,但是这些调试的底层原理是怎样的,本文就来介绍下。

        以S3C2440为例,其cpu是基于arm9架构的,在cpu的内部有个JTAG模块,这个模块具有以下特点:

        1、cpu发出的地址信号、数据信号都是通过JTAG模块的;

        2、JTAG可以控制cpu的运行;

        3、JTAG可以直接访问外设,读取外设的寄存器数据。

        在调试单片机的时候,实际操作都是通过JTAG模拟器(并口wiggler、JLink、openJTAG等)一端连接到开发板,另一端连接到pc机上,在pc机上运行ADS、keil和openOCD就可以对单片机进行调试了。

        arm9 cpu实现调试程序的原理是其内部设有2个比较器,当比较器判断运行程序相关的值与预设的值相同时,就会产生断点。断点的实现有两种方式,一种是硬件断点,即比较地址,首先预设断点地址A,当程序运行到地址A时就会产生断点,由于arm9 cpu只有两个比较器,因此这种方式的断点只能有两个;另一种是软件断点,当给程序设置断点时,cpu中的JTAG模块把断点地址处的数据进行替换,当cpu运行到断点地址处,取出的数据等于替换的数据,产生断点,程序重新运行时,再把原数据替换回去,这种断点理论上可以有无数个,但是有个前提,就是要求内存中的数据可写,因此无法调试NOR Flash和ROM上的程序。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值