SourceLizi / sourcelizi.github.io

3 stars 0 forks source link

202203/trice-and-rtt/ #4

Open utterances-bot opened 10 months ago

utterances-bot commented 10 months ago

配合OpenOCD的RTT使用Trice日志库 | 搬砖笔记

之前在Memfault的博客上发现了一个很有意思的日志库Trice。它专为嵌入式设备设计输出日志体积小型且可以以极高速率输出日志。作者号称在不输出时间戳的情况下可以用四条指令即可完成打日志,原因在于它并不会直接输出某个字符串,而是给每个字符串预先

https://sourcelizi.github.io/202203/trice-and-rtt/

ser-Mi commented 10 months ago

Info : rtt: Searching for control block 'SEGGER RTT' Info : rtt: No control block found Info : Listening on port 9100 for rtt connections Error: The 'tcl_port' command must be used before 'init'. 这种情况如何解决

SourceLizi commented 10 months ago

@ser-Mi 根据你的信息我不能回答出解决的方案,你的配置文件,代码以及执行启动trice的命令格式都有可能不正确,文章中的配置文件也只是提供了我的环境下的配置,并不代表可以在任何环境下直接使用

Althrone commented 9 months ago

博主你好!看到这篇文章才发现原来openocd已经支持rtt了,而且我测试了可以同时调试+rtt输出 我使用的是daplink,还有个问题我想请教一下 1:rtt的那个telnet端口可以支持输入吗?我的代码又msh,但是在rtt的端口输入貌似没有反应 2:rtt的输出对齐貌似有点问题,请问博主有遇到过吗

SourceLizi commented 9 months ago

博主你好!看到这篇文章才发现原来openocd已经支持rtt了,而且我测试了可以同时调试+rtt输出 我使用的是daplink,还有个问题我想请教一下 1:rtt的那个telnet端口可以支持输入吗?我的代码又msh,但是在rtt的端口输入貌似没有反应 2:rtt的输出对齐貌似有点问题,请问博主有遇到过吗

@Althrone 首先第一个问题,据我所知telnet端口是openocd的调试端口,是用于将主机连接上去人工调试的,并不是你说的在rtt上有telnet端口,建议先阅读有关openocd用法的文档。第二个问题我没有遇到过,目前我的用途也就只有使用这个日志库调试,具体rtt输出对齐的问题可能与你输出字符串换行方式以及你查看rtt输出的软件有关

Althrone commented 9 months ago

@SourceLizi 谢谢博主回答!我处理了rtt的输出问题,原因只是我的代码在换行的时候只输出换行符没有输出回车符,设置好putty之后就可以了(我是用putty做cmd窗口的)。 关于我问的第一个问题,可能我没表述清楚,segger rtt是支持输入输出的,也就是我可以用segger提供的那个上位机软件发送信息(字符)给mcu,但是我不清楚openocd的rtt实现,所以想请教一下。 我用wireshark抓包127.0.0.1/8765,当我按下键盘的回车键的时候,显示是能抓到包的,里面的就是0x0d和0x0a,但是openocd貌似没有将这两字符发给单片机

Althrone commented 9 months ago

回复下今天的进展,我打开了openocd 的debug_level 3 以便看openocd的运行情况。 现在发现其实每当我按下任意按键,openocd的tcp接口实际上是接收到东西的,但是在target_rtt_write_callback这个函数里会报告:rtt: Wrote 0 bytes into down-channel 0 不知道是写入缓冲区不成功还是通道冲突了

SourceLizi commented 9 months ago

@Althrone 如果不是你的RTT下行缓冲区没有配置好的话,那很有可能是openocd的问题,毕竟这个是个新功能,用的人太少了。现在你这种情况已经可以去openocd的项目下问问开发者怎么说了