比较旧的调试方式是TRACE32 Remote API, 看起来比较麻烦
新的是RCL
trace32的安装路径下有官方的python教程, 用浏览器可以打开
<path>/demo/api/python/rcl/doc/html/index.html
需要先安装python库, 也在trace32安装路径下
<path>/demo/api/python/rcl/doc/dist
pip install lauterbach_trace32_rcl-latest-py3-none-any.whl
原理是python与Trace32客户端通过TCP通信, 所以需要先配置config.t32
文件, 填入端口等等
<mandatory blank line>
RCL=NETASSIST
PORT=20000
PACKLEN=1024
RCL=NETTCP
PORT=20000
<mandatory blank line>
然后先打开trace32, 再在python中连接
import lauterbach.trace32.rcl as t32
dbg = t32.connect(node='localhost', port=20000, protocol="TCP", timeout=10.0)
dbg.print("Hello World!")
点进rcl可以看到提供的接口, 这里用类封装了一些常用的, 比如调用cmm脚本, 打印, 暂停, 继续, 设置系统变量等; 还有设置地址,变量,控制内存,断点等等功能
import lauterbach.trace32.rcl as t32
import datetime
import time
def time_now():
return datetime.datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
class classLauterbach():
def __init__(self) -> None:
self.dbg = t32.connect(node="localhost", port=20000, protocol="TCP", timeout=10.0)
def print(self, msg):
self.dbg.print(msg)
def my_script(self):
self.dbg.cmm(cmd="./my_script.cmm", timeout=15.0)
def pause(self):
self.dbg.break_()
self.dbg.print(f"{time_now()} mcu pause")
def go(self):
self.dbg.go()
self.dbg.print(f"{time_now()} mcu go")
def system_down(self):
self.dbg.cmd("SYStem.Mode Down")
self.dbg.print(f"{time_now()} mcu system down")
def system_up(self):
self.dbg.cmd("SYStem.Mode Up")
self.dbg.print(f"{time_now()} mcu system up")
if __name__ == '__main__':
Lauterbach = classLauterbach()
Lauterbach.system_up()
print(f"{time_now()} system up")
time.sleep(30)
Lauterbach.pause()
time.sleep(30)
Lauterbach.go()
time.sleep(30)