2026-03-20 9:50 PM
经我这三两天的多次调试,我终于找到了问题所在
先说segger rtt viewer的工作方式
首先,我将segger rtt的源码编译烧录到stm32mp257d_m33那里去。这时m33核的暂存会持有一个_segger_rtt结构体。然后我将这个结构体地址提供给segger rtt viewer,这时就会成功建立起通讯
现在我通过segger rtt viewer向stm32mp257d_m33发送数据,这时jlink这个硬件工具就会通过swd直接操作暂存将数据写入到_segger_rtt结构体的下行缓冲区,按理会同时更新_segger_rtt结构体下行缓冲区的写位置WrOff
而我在stm32mp257d_m33的用户代码逻辑是,将从swd收到的数据即刻原封不动的发还回去
下面是我实际使用segger rtt viewer时的输入输出窗口的内容
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 556
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 56456
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 5465465
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 465465
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 546546
00> WrOff=557, RdOff=557, HasData=0
< 54646
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 54646
00> WrOff=557, RdOff=557, HasData=0
< 564564
00> WrOff=557, RdOff=557, HasData=0
00> WrOff=557, RdOff=557, HasData=0
< 554646
00> WrOff=615, RdOff=615, HasData=0
< 64654
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 1321231846
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 54654132154465
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 56454846465
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 231321464653
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 4654123123146
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 6546523132184645
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 6413123899
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 3214632131
00> WrOff=615, RdOff=615, HasData=0
< 3132156465
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 313215654643
00> WrOff=615, RdOff=615, HasData=0
< 13156565464
00> WrOff=615, RdOff=615, HasData=0
00> WrOff=615, RdOff=615, HasData=0
< 13164445
00> WrOff=615, RdOff=615, HasData=0
< 5645464564
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
< 5664848946
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> WrOff=770, RdOff=770, HasData=0
00> 5645464564
00> 5664848946
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
00> WrOff=792, RdOff=792, HasData=0
WrOff,RdOff,HasData这三个值在stm32mp257d_m33的用户代码逻辑是每隔1秒访问一次具体数值,并将之发送到segger rtt viewer那里去
从输入输出窗口的内容可以看到,最开始我多次向stm32mp257d_m33发送数据下去(并且segger rtt viewer的后台也全部都显示发送已完成),却没有马上有同样的数据回复上来,甚至都没有数据回复.并且WrOff,RdOff,HasData这三个值也迟迟没有更新
直到最后发送5645464564和5664848946,才间隔几秒将这两段数据一次性发还回来
从上述调试内容可以看到具体的问题
数据发送下去了,却没有立即回复或者直接没有回复,并且jlink这个硬件工具也没有立即更新WrOff的数值.只是较低概率地偶尔间隔几秒发回之前累积的若干数据
所以要么是jlink这个硬件工具有问题,要么是stm32mp257d_m33从swd接口接收数据的这个过程有问题
2026-03-26 3:36 AM
Hi @csvir ,
Can you please post your question in english ?
Thanks
Olivier