打印
[STM32F4]

CubeIDE 调试器(GDB )的 SWO 输出问题

[复制链接]
160|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SocialButterfly|  楼主 | 2025-4-6 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CubeIDE 调试器(GDB )的 SWO 输出问题。
当我在调试配置中启用 SWO 输出并打印某些内容时,SWV ITM 数据窗口中只显示前几行。
然后发生以下情况之一:
  • Debugger无法识别taget
  • 由于访问未对齐而发生硬件故障00、
[backcolor=var(--darkreader-background-ffffff, #141617)]但是在调试配置中禁用了未对齐的访问异常,当相同的程序在不仿真的情况下运行时,可以长时间运行而不会出现异常。


使用特权

评论回复
沙发
公羊子丹| | 2025-4-7 07:25 | 只看该作者
我之前也遇到过类似问题,SWV ITM 输出前几行正常,之后就挂了,后来发现是时钟设置和实际不一致,Core Clock 那边要手动填对。

使用特权

评论回复
板凳
周半梅| | 2025-4-7 07:26 | 只看该作者
有时候 SWO 配置里面的 TPIU 设置不对也会导致输出中断,尤其是 async clock 频率写错了就很容易出错。

使用特权

评论回复
地板
帛灿灿| | 2025-4-7 07:27 | 只看该作者
你有没有在 ITM Stimulus Ports 那边把 Port 0 勾选上?SWV 只监听了端口 0,不开的话后面全丢了。

使用特权

评论回复
5
童雨竹| | 2025-4-7 07:28 | 只看该作者
STM32F4 默认是支持非对齐访问的,但如果你代码中手动启用了 UNALIGN_TRP,那在 ITM trace 输出时可能会触发异常。

使用特权

评论回复
6
万图| | 2025-4-7 07:29 | 只看该作者
我试过的一个 trick 是:调试开始后先别点运行,先点一下 SWV viewer,让它先开始监听,再运行程序,丢包现象少很多。

使用特权

评论回复
7
Wordsworth| | 2025-4-7 07:30 | 只看该作者
你可以在 SystemInit() 里确认是否真的关闭了非对齐访问异常,有时候 CubeMX 设置和实际代码不一致。

使用特权

评论回复
8
Bblythe| | 2025-4-7 07:32 | 只看该作者
如果调试过程中出现“无法识别 target”的提示,可能是 ST-Link 的固件需要更新,之前老版本会影响 SWO trace。

使用特权

评论回复
9
Pulitzer| | 2025-4-7 07:33 | 只看该作者
ITM trace 输出速度跟芯片主频和 trace 速率有关系,太高会丢数据,建议你在调试配置中把 SWO 输出速度降一点试试。

使用特权

评论回复
10
Uriah| | 2025-4-7 07:34 | 只看该作者
有时候 SWO 停止输出其实是芯片跑飞了,可以在 output 最后一行打个断点看是不是程序崩在某个位置了。

使用特权

评论回复
11
Clyde011| | 2025-4-7 07:35 | 只看该作者
看你说不仿真时能长时间跑,估计跟 debug 环境相关,GDB 和 SWO trace 占用资源多,有可能把调试接口冲垮。

使用特权

评论回复
12
海滨消消| | 2025-4-7 14:26 | 只看该作者
SWO 缓冲区溢出可能会导致部分数据丢失。

使用特权

评论回复
13
elephant00| | 2025-4-7 14:35 | 只看该作者
如果 ITM 通道未正确初始化,可能会导致数据无法正确传输到 SWV ITM 数据窗口。

使用特权

评论回复
14
两只袜子| | 2025-4-7 16:23 | 只看该作者
可能是SWO 配置错误。

使用特权

评论回复
15
laocuo1142| | 2025-4-7 16:23 | 只看该作者
CubeIDE 或 GDB 本身可能存在 bug,导致调试器无法正确处理 SWO 数据。

使用特权

评论回复
16
jcky001| | 2025-4-7 19:23 | 只看该作者
检查代码中是否存在未对齐的内存访问。

使用特权

评论回复
17
flycamelaaa| | 2025-4-7 23:00 | 只看该作者
升级 CubeIDE 和调试器固件,用最新版本。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

9

帖子

0

粉丝