41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""RTT 传输:薄封装 rtt_pitch_reg_test 的 J-Link/RTT 实现(单一事实来源,避免复制)."""
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from contextlib import contextmanager
|
|||
|
|
|
|||
|
|
from ..paths import TOOLS_DIR # noqa: F401 (确保 sys.path 已注入)
|
|||
|
|
|
|||
|
|
import rtt_pitch_reg_test as _rtt
|
|||
|
|
|
|||
|
|
# 直接复用,保持零行为变更
|
|||
|
|
connect_jlink = _rtt.connect_jlink
|
|||
|
|
find_rtt_control_block = _rtt.find_rtt_control_block
|
|||
|
|
wait_rtt_ready = _rtt.wait_rtt_ready
|
|||
|
|
RttSession = _rtt.RttSession
|
|||
|
|
analyze_lines = _rtt.analyze_lines
|
|||
|
|
CheckResult = _rtt.CheckResult
|
|||
|
|
|
|||
|
|
|
|||
|
|
@contextmanager
|
|||
|
|
def open_session(device: str = "AT32F403AC"):
|
|||
|
|
"""连接 J-Link + 启动 RTT,yield RttSession;退出时清理."""
|
|||
|
|
_rtt.import_deps()
|
|||
|
|
jlink = connect_jlink(device)
|
|||
|
|
try:
|
|||
|
|
cb = find_rtt_control_block(jlink)
|
|||
|
|
if cb is None:
|
|||
|
|
raise SystemExit("SEGGER RTT control block 未找到(固件未运行?)")
|
|||
|
|
print(f"RTT CB @ 0x{cb:08X}", flush=True)
|
|||
|
|
jlink.rtt_start(cb)
|
|||
|
|
wait_rtt_ready(jlink)
|
|||
|
|
sess = RttSession(jlink)
|
|||
|
|
sess.pump(0.3)
|
|||
|
|
yield sess
|
|||
|
|
finally:
|
|||
|
|
try:
|
|||
|
|
jlink.rtt_stop()
|
|||
|
|
except Exception:
|
|||
|
|
pass
|
|||
|
|
jlink.close()
|