Skip to content

通过JLink_x64.dll库文件自定义JLink功能

Notifications You must be signed in to change notification settings

ShadowThree/JLink_API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

链接

  1. pylink官方文档
  2. pylink博客
  3. 在安装JLink-tools的路径下可以获取到开发过程中需要使用的JLink_x64.dllJLinkARM.dll库文件;
  4. UM08002;
  5. python-JLINK博客

问题及措施步骤

  1. 目标:想要一个能带时间戳的RTT日志输出
  2. 找到了一个现成工具:RTT-T,但是在切换通道的时候发现总是多一个'ÿ'字符;
  3. 于是根据RTT-T项目,发现其使用了pylink-doc, pylink-source这个库;
  4. 而根据pylink库的example,可以直接接收RTT日志,但依旧还有'ÿ'字符;
  5. 又从pyink的文档中了解到,这个pylink只是通过python调用了JLink_x64.dll这个C库文件,而我对python不熟,搞了半天没成功去掉这个多余的字符;
  6. 于是打算直接用C语言调用JLink_x64.dll文件;
  7. 但是通过C语言的LoadLibrary()函数加载库文件时,一直出错,原来是32位的程序只能加载32位的库,64的程序才能加载64位的库;而JLink_x64.dllJLinkARM.dll这两个库的区别就是前者是64位的,后者是32位的库。
  8. 本来通过32位的库也是一样可以用的,但是我还是想知道64位库要如何调用,然后发现需要更新MinGW,原来我的编译器版本太低了,只支持32位。
  9. 然后下载MinGW-w64打算安装,却发现没有安装器不知道如何安装,折腾了老久才发现在这个页面的Files下面,有一个MinGW-W64-install.exe,本以为一切要大功告成了,但我还是高兴早了,这个在线安装器安装失败,说下载不正确。。。最终发现,在安装器下面还有一个链接x86_64-posix-seh,我只需要把这个下载并解压到安装路径,然后添加一下系统路径就可以了! MinGW-w64下载
  10. 现在终于可以在C语言中导入JLink_x64.dll这个库,并使用其中的内容了,但是这个DLL中具体有什么API可以使用呢?其中又有什么宏定义呢?请参考JLinkSDK header以及UM08002
  11. 现在的问题就是如何利用这个DLL库文件实现需求?
  12. 由于在DLL库中一直没找到如何设置MCU,最终还是在上面链接2的基础上完善了一下功能。
  13. 目前的pylink-rtt.py文件不仅可以给RTT日志加时间戳,还能将不同的RTT终端日志打印到不同的文件中。
  14. 生产的日志文件中,如果不需要时间戳可以通过正则表达式\[[0-9 :.]{21}\] 匹配删除。

说明

  1. pylink的官方文档,以及其GitHub上的源码及例程,可以直接运行pylink-rtt用于RTT日志的收发;
  2. 导入pylinkpython文件一定要和JLink_x64.dll(或者是JLinkARM.dll在同一路径下),不然找不到这个库文件会导致pylink在调用JLinkAPI时出错;
  3. 以下是一些接口的功能说明:
import pylink                       # 导入 pylink 模块

jlink = pylink.JLink()              # 创建对象

print("before open:")
print("    opened:          ", jlink.opened())            # opened() 用于判断JLink仿真器是否打开
print("    connected:       ", jlink.connected())         # connected() 用于判断JLink仿真器是否连接,和opened()区别是什么呢?
print("    target_connected:", jlink.target_connected())  # target_connected() 用于判断仿真器是否和MCU连接

print("\n*** OPEN ***\n")
jlink.open(serial_no=25952323)  # get the serial_no by command "showEmuList" in "J-Link Commander"

print("after open:")
print("    opened:          ", jlink.opened())            # open() 后,从 False 变成了 True
print("    connected:       ", jlink.connected())         # open() 后,从 False 变成了 True
print("    target_connected:", jlink.target_connected())  # open() 后,这个依然是 False

print("\nproduct_name:", jlink.product_name)              # SEGGER J-Link ARM
print("OEM:         ", jlink.oem)                         # None

print("\n*** CONNECT ***\n")
jlink.connect('STM32H743II')

print("after connect MCU:")
print("    opened:          ", jlink.opened())            # 保持 True
print("    connected:       ", jlink.connected())         # 保持 True
print("    target_connected:", jlink.target_connected())  # connect() 后,从 False 变成了 True

print("\ncore_id:    ", jlink.core_id())          # 把这个值转换成十六进制,就是在MDK中连接JLink时看到的这个值了
print("device_family:", jlink.device_family())

About

通过JLink_x64.dll库文件自定义JLink功能

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published