关于使用J-Link RTT 打印日志内容不全问题的解决方法

使用J-Link RTT Viewer查看RTT的输出日志,程序全速跑起来后,发现有时候内容打印不全,后面有一分部分内容直接没有了。这是RTT的缓冲区满造成的。我自己的解决方法有如下几种:

1、使用软件延时
在一下子输出了较多内容时,添加软延时函数,等待缓冲区输出完成。延时时间建议在20ms以上。

2、增大缓冲区
我一般直接使用通道0作为RTT输出通道。通道0也是RTT组件初始化后,默认初始化的通道。在SEGGER_RTT_Conf.h头文件中可以对通道0的参数进行配置。
BUFFER_SIZE_UP宏定义为上行(MCU->PC)缓冲区的大小,默认为1KB。
增大该缓冲区可以有效减少溢出发生的可能性。

#define BUFFER_SIZE_UP                            (1024*4)  // Size of the buffer for terminal output of target, up to host (Default: 1k)

3、修改发送模式
RTT默认的输出方式是非阻塞的,一旦缓冲区满了,就丢弃后面的内容。

#define SEGGER_RTT_MODE_DEFAULT                   SEGGER_RTT_MODE_NO_BLOCK_SKIP // Mode for pre-initialized terminal channel (buffer 0)

可以将其改为阻塞方式:

#define SEGGER_RTT_MODE_DEFAULT                   SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL

总结:
解决RTT打印日志内容不全的问题,可以综合同时使用2和3,一方面增大上行Buffer的大小,一方面使用阻塞方式,可以很好解决该问题。

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值