WDS2期第29课 1 2 3 裸板调试方法 点灯 串口 JTAG 重定位前的代码不能用源码级别的调试只能用汇编级别的调试,逐条指令调试。

本文详细介绍了裸板调试的基本方法,包括结合汇编源码进行点灯、串口打印,以及使用JTAG技术进行硬件和软件断点设置。探讨了通过openJTAG进行逐条指令和源码级别的调试技巧,涵盖了不同调试环境下如命令行、Eclipse GUI的具体操作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

裸板调试方 需要结合汇编源码

点灯

串口打印

JTAG

JTAG(Joint Test Action Group,联合测试工作组),主要用于芯片内部测试。
标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

JTAG位于CPU内部,当cpu与外设的地址信号,数据信号都要经过JTAG。
电脑上的应用程序有 keil、ADS、openOCD
JTAG调试器有Jlink、openJTAG、并口wigger。

可以控制cpu,
如,当地址信号 == xxx 时,让cpu停止工作,读寄存器,重新运行 ,,,硬件断点(ARM9只有两个比较器)
如,当数据信号 == xxx时, 让cpu停止工作,读寄存器,重新运行,,,软件断点

cpu从0地址执行,想让运行在某地址时停止

1. 设置硬件断点

设置JTAG的比较器,让ADDR == xxx,当cpu发出xxx地址时停止。

2.设置软件断点

设置JTAG的比较器 DATA == B 并且修改xxx地址的内存的值为B,当CPU读入的值 == B时 停止。重新运行时回复xxx地址的原来值。

用硬件断点只能打两个断点,可调nor上的程序。
软件断点可以是无数个,前提是各个xxx地址可写,因此无法调试NOR 和 rom等无法像内存一样写的存储器上的程序。

汇编级别 用openJTAG调试 逐条指令调试

装好驱动,打开telnet功能,点击telnet,
在这里插入图片描述
结合汇编代码,难度大,要求高,

  1. 先停止cpu halt
  2. 再加载bin到内部ram的0地址 load_image nand.bin 0
  3. poll 查看当前pc值 cpu执行的到哪里的
  4. step 0 使cpu从0地址开始执行一步 pc置0
  5. step 运行一条指令
  6. resume 0从头开始运行
  7. reg 查看寄存器值
  8. mdw 0x53000000 读取某个地址的值
  9. mww 0x30000000 0x12344567 将值写入地址
    在这里插入图片描述

源码级别 用openJTAG调试

重定位之前的代码不能用源码级别的调试,只能用汇编级别的调试,逐条指令调试。
有工具 arm-linux-gdb,win下arm-elf-gdb,但都是用的命令行,这些工具依赖
有eclipse软件,图形界面,但是也是依赖arm-elf-gdb,所以需要先安装gcc-arm-none-eabi-xxxx-major-win32.exe

源码级别调试,有前提
  1. 源码已经重定位好,处于对应的连接地址。在源文件某处A设置断点,底层的情况,JTAG会根据断点A所在内存地址的位置去修改内存(软断点)。
    • 若程序链接地址是SDRAM,用openocd初始化SDRAM
    • 用openocd下载代码到SDRAM
  2. 链接脚本lds对代码的分段必须是固定形式,.text .data(.rodata .data) .bss
  3. 被调试的程序为elf格式,里有“调试信息” 编译时加-g
命令行源码级别调试
  • 先用openocd初始化内存,借助init.bin,(halt---load_image init/init.bin
  • 再用gnu-gcc-arm工具连接openocd,(arm-xxx nand_elf---target remote 127.0.0.1:3333)
  • 再下载elf文件,(load )
  • 执行一条指令si
  • 设置断点 break main.c:21 文件的21行
  • 继续运行到断点处,c (continue)
  • 列出当前处源代码,l (list)
    在这里插入图片描述
    在这里插入图片描述
eclipse GUI源码级别调试

也必须先设置内存,初始化内存。。。。
新建新工程
虫子 调试配置
新建调试文件,选择文件
commands窗口填写:
target remote 127.0.0.1:3333
load
break _start
c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值