This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G3507:MSPM0:半主机在 CCS 中工作、但 OpenOCD 无法运行

Guru**** 2905430 points

Other Parts Discussed in Thread: MSPM0G3507

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1647402/mspm0g3507-mspm0-semihosting-works-in-ccs-but-fails-with-openocd

器件型号: MSPM0G3507

您好、

我目前正在使用 TI LaunchPad(MSPM0G3507 器件)、发现 Code Composer Studio (CCS) 和基于 OpenOCD 的设置之间的半主机行为存在差异、我计划稍后在 CI/CD 流水线中使用该差异。

首先、我在 CCS 中创建了一个空的 ticlang 示例工程、并保留了默认配置(包括 XDS110 调试器)。 使用一个最小的示例应用程序、在 CCS 中进行调试时、`printf` output 和文件写入(到.txt 文件)都能正常工作。  

下面是一个最小代码示例:
image.png

但是、当尝试使用 OpenOCD 和 GDB 复制此行为时、它无法按预期工作。 我在一个终端中运行 OpenOCD、并在另一个终端中连接` arm-none-eabi-gdb `、加载编译的应用二进制文件。


通过此设置、我可以连接到目标并逐步完成应用程序。 不过:

-`printf`输出不会出现在 OpenOCD 终端中
-通过半主机写入文本文件不起作用
 
以下是来自 OpenOCD 和 GDB 的日志、可供进一步了解。  

OpenOCD 日志:
openocd -f board/ti_mspm0_launchpad.cfg
开放片上调试器 0.12.0+dev-g6872f7e (2025年07月25日 16:56)
在 GNU GPL v2 下获得许可
有关错误报告、请阅读
    http://openocd.org/doc/doxygen/bugs.html
警告:已弃用:自动选择传输“SWD“。 使用“transport select SWD“可禁止显示此消息。
警告:已选择传输“SWD“
Cortex_m reset_config sysresetreq
INFO:正在侦听端口 666 中的 TCL 连接
INFO:侦听端口 4444 的 telnet 连接
INFO:XDS110:VID/pid = 0451/bef3
信息:XDS110:固件版本= 3.0.0.41
信息:XDS110:硬件版本= 0x0028
信息:XDS110:通过 SWD 连接到目标
信息:XDS110:SWCLK 设置为 2500kHz
INFO:时钟速度 10000 kHz
信息:SWD DPIDR 0x6ba02477
信息:[mspm0x.cpu]检测到 Cortex-M0+ r0p1 处理器
INFO:[mspm0x.cpu] target 有 4 个断点、2 个观察点
INFO:[mspm0x.cpu]检查成功
info:[mspm0x.cpu]启动 3333 上的 gdb 服务器
INFO:正在侦听 gdb 连接的端口 3333
INFO:在 TCP/3333 上接受'gdb'连接
[mspm0x.cpu]由于 debug 请求而停止、当前模式:处理程序硬故障
xPSR:0x0100003 PC:0x0000027a MSP:0x200004f8
信息:数据区域不可用!
[mspm0x.cpu]由于 debug-request 而停止、当前模式:线程
xPSR:0xF1000000 PC:0x00000270 MSP:0x20000570、半主机
[mspm0x.cpu]由于 debug-request 而停止、当前模式:线程
xPSR:0xF1000000 PC:0x0000136a MSP:0x20208000、半主机
[mspm0x.cpu]由于 debug-request 而停止、当前模式:线程
xPSR:0xF1000000 PC:0x0000136a MSP:0x20208000、半主机

GDB 日志:

arm-none-eabi-gdb
(gdb) 文件 empty_LP_MSPM0G3507_nortos_ticlang.out
从 empty_LP_MSPM0G3507_nortos_ticlang.out 读取符号...
(gdb) 目标扩展远程:3333
使用:3333 进行远程调试
fopen.c:220 处的_openfile (_fname=0x24c5 “-\006\320 (x“、_fp=0x20000518、_mode=0x10 ““)
警告:220  fopen.c:没有此类文件或目录
(gdb) MONITOR ARM 半主机使能
启用半主机
(gdb) 负载
加载段.intvecs、大小为 0xc0 lma 0x0
加载段.text、大小为 0x12c0 lma 0xc0
加载段.rodata、大小 0x90 lma 0x1380
加载段.cinit、大小为 0x88 lma 0x1410
起始地址 0x0000125c、加载大小 5272
传输速率:4 KB/秒、1318 字节/写入。
(gdb) 监视重置停止
[mspm0x.cpu]由于 debug-request 而停止、当前模式:线程
xPSR:0xF1000000 PC:0x0000136a MSP:0x20208000、半主机
(gdb) break main
警告:无法将主机编码 (CP1252) 中的“main“转换为 UTF-32。
通常不会发生这种情况、请提交错误报告。
位于 0xfe0 处的断点 1:文件..\empty.c、第 39 行。
注意:自动对只读地址使用硬件断点。
(gdb) c.
继续。

断点 1、main () 位于..\empty.c:39
39      f = fopen(“C:/Temp/msg_from_mspm0g3_armclang.txt、“w“);
(gdb) c.
继续。


设置:

- CCS 版本:20.5.0
- OpenOCD 版本: 0.12.0+dev-g6872f7e.
- GDB: GNU gdb (xPack GNU Arm Embedded GCC) 16.3.90
操作系统: Windows

问题:
1.使用 OpenOCD 时、MSPM0 器件是否正式支持半主机?

2.如果是、启用和配置半主机的正确方法是什么(包括 OpenOCD、GDB 或工程设置中任何 MSPM0 特定的要求)?

3.更一般而言、 在 CCS 环境之外的 MSPM0 器件上(例如在 CI/CD 流水线中)实现控制台输出和文件操作的建议或支持方法是什么?

提前感谢您的支持!