【Jlink】JLink Commander调试方法

简介: 上面的信息连可以看到当前运行的PC指针,再可以结合生成的map文件,就可以看到当前运行的函数。例如上面运行的PC指针为0x01000E72,下图是固件的map文件,查看map文件对应地址的函数为SEGGER_RTT_Write。用来读取内存的数据,参数为内存的地址和读取的长度。也可以直接用mem命令按照8位来读取。常用的命令有halt,go,mem(mem8,mem16, mem32), write(write1, write2, write4 )用来写入对应的内存地址,参数为内存的地址和写入的数据。

1. 背景

  • 目前开发中常用的调试手段主要有串口、IO口输出作为调试方式。目前串口的限制较多,有些硬件不太方便接串口或者一些实时的数据,当时没有接串口则无法实时获取调试信息。

    • IO调试,可获得的信息较少,在设备出现运行异常,如死机等情况,无法通过串口和IO口获得较多现场的信息。
      Jlink可以通过commander命令调试口或者比较多现场实时的数据以及调试信息。例如:
      1)获取当前运行PC指针,
      2)获取ram以及flash中的数据,结合map文件可以查看代码中的变量值
  • 这些信息有助于提高开发效率以及快速定位问题。
    Jlink commander命令还可以和JLINK RTT结合,用来打印应用log,RTT可以用来替换uart串口。

目标

提高开发效率,获取代码现场数据,缩短定位bug的时间。

实现方法

硬件条件:
JLink(V8版本以上),
安装JLink驱动,JLink驱动要求V4.9以上,
支持Jlink的设备

JLINK Commander使用方法。

  1. 连接JLink到设备,并安装好对应的驱动,
  2. 打开Jlink Commander 终端
  3. 输入connect命令
  4. 按照提示输入:?
  5. 系统会弹窗并提示选择对应平台,以富芮坤8018为例,这里选择Cortex M3
  6. 选择接口为SWD,并设置传输速率
  7. 界面显示识别到了Cortex M3 ,便连接上了目标板,如下图所示

image-20211013163026166

  1. 此时我们就可以使用jlink commander命令来进行调试 ,commander 命令可参考segger官方说明文档:https://wiki.segger.com/J-Link_Commander

    常用的命令有halt,go,mem(mem8,mem16, mem32), write(write1, write2, write4 )

    其他的命令可以自行体验: 如setpc命令用来设置PC指针。Erase命令用来擦除flash

    命令 功能 参数 备注
    halt 停止运行 停止运行后,会显示PC指针,SP地址等信息。
    go 运行
    mem 读取内存地址 起始地址 读取长度 可以结合map文件读取对应变量的值。
    write 写对应地址。 可以和mem命令配合使用 起始地址 读取长度 结合map文件写入变量的值。
    • halt 命令是可以与go命令配合使用,执行halt命令后,设备会停止运行,并再commander终端显示当前寄存器的数值。里面可以重点关注PC指针,SP指针和R14寄存器值。

    image-20211013170030699

    上面的信息连可以看到当前运行的PC指针,再可以结合生成的map文件,就可以看到当前运行的函数。例如上面运行的PC指针为0x01000E72,下图是固件的map文件,查看map文件对应地址的函数为SEGGER_RTT_Write。

image-20211013171321990

  • go 命令:

    用来运行程序,需要和halt命令配合执行,在halt执行后,再运行go。

  • mem:

    用来读取内存的数据,参数为内存的地址和读取的长度。 mem8 mem16 mem32分别用来读取不同长度单位的数据。 也可以直接用mem命令按照8位来读取。

    例如下图命令读取0x20003300地址16个字节的内容,里面存放的是“SEGGER RTT”的字符串

    image-20211013181436054

    write:

    用来写入对应的内存地址,参数为内存的地址和写入的数据。write1 write2 write4分别用来写入不用的自己长度。

    例如要在上面0x20003300地址写入12345678,则执行如下命令:write4 0x20003300 12345678

    在通过mem命令读取0x20003300地址数据,可以看到数据已经变成了12345678

image-20211013182156671

目录
相关文章
|
监控 NoSQL
JLink + GDB 调试方法
本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。 调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图) 运行JLinkGDBServer 按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面 注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。
7469 46
|
iOS开发
LLDB 调试命令、插件和技巧(上)
LLDB 调试命令、插件和技巧(上)
662 0
|
7月前
|
JSON NoSQL C++
VScode调试C/C++项目调试多个C++程序makefile
VScode调试C/C++项目调试多个C++程序makefile
254 0
|
7月前
|
小程序 存储控制器 Android开发
OPENJTAG调试学习(二):OpenOCD、OpenJTAG 烧写程序、调试程序
OPENJTAG调试学习(二):OpenOCD、OpenJTAG 烧写程序、调试程序
756 0
3.4bochs的调试方法
3.4bochs的调试方法
285 0
【Jlink】使用Jlink RTT工具打印日志
RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实时性。实现原理: 固件代码将要输出的log数据按照RTT的格式写到确定地址的内存中去,然后RTT通过swd口读取对应内存地址的数据,并显示到PC终端上。
744 0
|
算法 关系型数据库 芯片
MDK 用Jlink调试无法使用断点
MDK 用Jlink调试无法使用断点
790 0
MDK 用Jlink调试无法使用断点
|
JavaScript 前端开发 Ubuntu
【cypress】2. 安装Cypress(windows系统),以及cypress open报错解决。
【cypress】2. 安装Cypress(windows系统),以及cypress open报错解决。
【cypress】2. 安装Cypress(windows系统),以及cypress open报错解决。
|
IDE 开发工具
关于 通过jlink使用jtag(或swd)下载程序成功后,keil4 uversion停止运行 的解决方法
关于 通过jlink使用jtag(或swd)下载程序成功后,keil4 uversion停止运行 的解决方法
关于 通过jlink使用jtag(或swd)下载程序成功后,keil4 uversion停止运行 的解决方法
|
缓存 JavaScript 前端开发