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