XIVN1987 发表于 2021-6-3 22:00:40

分享用Python写的Jlink Commander替代工具JLKCmdr!

本帖最后由 XIVN1987 于 2021-6-3 22:03 编辑

之前分享过一个HardFault分析工具JHFView和一个基于SVD文件的外设寄存器查看工具JSVDView。
经过一段儿时间的使用,发现一些存在的问题:
1、单独为HardFault专门写个工具显得有点儿小题大做
2、JSVDView查看寄存器时以外设为单位,而一些高级外设的寄存器非常多,读取数据量过大且大多数根本不会看
3、有些寄存器是不能读的,比如数据寄存器用JLink读走了程序就读不到了,,会影响程序正常功能

所以,就将之前为DAPLink做过的类JLink Commander命令行工具DAPCmdr移植到了JLink上,,然后又增加了HardFault诊断和基于SVD文件的外设寄存器查看功能,,做了这个JLKCmdr。

https://github.com/XIVN1987/JLKCmdr

启动界面和帮助界面如下:
J-Link Commander v0.6
blank line for connection, ? for help
address and value use hexadecimal, count use decimal

√C:\Programs\Segger\JLink_V692\JLink_x64.dll
√C:\Programs\MDK\Arm\Pack_s\Keil\STM32F1xx_DFP\2.0.0\SVD\STM32F103xx.svd
√C:\Users\WMX\Desktop\STM32F1\out\STM32F1.dis

CPU core is Cortex-M3

JLKCmdr > help
Documented commands (type help <topic>):
=====================================================================
disgo    help   pathrd32regs   savebinwr16wr8
envhaltloadbinrd16rd8   resetsv       wr32wreg

JLKCmdr >
其中rd8、rd16、rd32、wr8、wr16、wr32、savebin、loadbin、regs、wreg、reset、halt、go是模仿的JLink Commander中的基本命令

其中halt和regs命令在检测到处理器发生hardfault时自动打印触发原因、hardfault发生的位置、以及调用层次(从反汇编文件中解析,不一定准确),,不再需要手动输入
JLKCmdr > halt
R0 : 20000000    R1 : 00000001    R2 : 00000000    R3 : 08000DA9
R4 : 08000E08    R5 : 08000E08    R6 : 00000000    R7 : 00000000
R8 : 00000000    R9 : 20000160    R10: 00000000    R11: 00000000
R12: 00000000    SP : 200003E0    LR : FFFFFFF9    PC : 08000422
MSP: 200003E0    PSP: 20000800    XPSR: 61000003
CONTROL: 00 (when Thread mode: privileged, use MSP)

a divide by zero has taken place (can be set only if DIV_0_TRP is set)

Stack Content @ 0x200003E0:
200003E0:20000000 00000001 00000000 08000DA9 00000000 080001C9 0800015C 61000000
20000400:00000000 00000000 00000000 00000000 00000000 00000000 00000000 08000E08
20000420:08000E08 080001C9 00000000 08000DA9 08000E08 08000D81 FFFFFFFF FFFFFFFF

Call Stack:
0x0800015CSerialInit
0x080001C9main

基于svd的寄存器查看和修改演示如下:

输入路径和寄存器时做了模糊补全功能,减轻输入负担。。

欢迎坛友使用、点赞{:lol:}

XIVN1987 发表于 2021-6-4 11:13:38


补充个免安装的exe文件,,方便没有python环境的坛友使用,,

fengyunyu 发表于 2021-6-3 22:08:43

不错,学习

cantonguy 发表于 2021-6-3 22:14:38

不是stm32的M3也可以用吗?

XIVN1987 发表于 2021-6-3 22:17:36

cantonguy 发表于 2021-6-3 22:14
不是stm32的M3也可以用吗?


可以用,,M0、M4也可以用

我是一个大白菜 发表于 2021-6-4 11:07:28

感谢分享,楼主总是满满的干货

hexenzhou 发表于 2021-6-4 11:41:51

感谢楼主分享,现在试试。

weiwei4 发表于 2021-6-4 13:53:03

谢谢分享

yyliu 发表于 2021-6-4 15:14:45

这个是要在仿真状态下才能用吧?

syj0925 发表于 2021-9-24 23:50:27

好东西,谢谢分享。这个应该不能用在乐鑫的ESP32吧?毕竟不是cortex核
页: [1]
查看完整版本: 分享用Python写的Jlink Commander替代工具JLKCmdr!