rtt segger 低功耗模式_Segger RTT使用注意事项

本文介绍了使用SEGGER RTT进行串口打印的优势,如仅占用调试口,速度更快。RTT通过环形缓冲区实现数据传输,确保在多任务环境和中断中也能保证数据完整性。在实际应用中,应注意选择合适的缓冲区大小,配置RTT控制块位置,以及在中断中使用RTT打印的策略。此外,还提到了浮点数打印的自定义实现需求。
摘要由CSDN通过智能技术生成

对比串口打印,使用RTT打印log信息的优点是只占用调试口,速度快,可随产品发布

RTT实现的基本原理是,程序中实现一个环形缓冲区(数组+读写指针),MCU不断的往缓冲区中写数据,PC上运行的上位机周期的读取此缓冲区中的数数据

在具体使用时需注意几点

1.SEGGER_RTT_LOCK () SEGGER_RTT_UNLOCK()的实现方式,默认的实现方式是屏蔽中断

在多任务运行的环境下或者中断函数中也需要打印的环境下,需保证打印数据的完整性。

因为RTT打印的数据仅仅写入内存,并不需要考虑传输的时间,因此在中断中调用RTT的打印函数也基本没有影响

2.选择使用SEGGER_RTT_MODE_NO_BLOCK_SKIP/SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL

SKIP是指当缓冲区满时,直接跳过写入操作,BLOCK方式是死等缓冲区释放,正式产品中使用SKIP方式,因为不可能一直连接PC

3.配置缓冲区的大小

4.RTT控制块的位置

因为RTTViewer在内存中扫描控制块时,其默认扫描的地址范围可能与芯片的实际内存空间不一致,所以最好定义SEGGER_RTT_SECTION,并且修改连接脚本,

将_SEGGER_RTT变量放置到默认的扫描空间内,这样可有效避免打开RTTViewer,却没有任何打印信息的问题

IAR下的配置如下截图,  gcc工具链下操作类似,MDK的连接脚本的语法没研究过~~~

9911ee28898e5057b019aab7cd7aa6bf.png

b98d79447b480b0842d9b0117e809746.png

5.RTT的源码中没有实现类似printf("%f",...)打印浮点数,如实在需要打印浮点数,需修改RTT源码,其中一个关键点是理解C语言不定数量参数的函数实现方式

原文:https://www.cnblogs.com/chen0207/p/12641055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值