基于HC32F460使用J-link RTT实现调试信息打印

本篇博客记录技术要点实现打印功能。

实时传输(Real Time Transmit)是一种技术,主要用于快速传输调试信息和数据,而不影响系统的实时性。它广泛应用于嵌入式系统,为用户提供与系统的交互能力。

在嵌入式系统中,实时传输技术允许从微控制器快速输出调试信息和数据,而不会对系统的实时性能产生影响。这种技术适用于各种目的,为用户提供更多的自由度和灵活性。例如,可以使用实时传输技术在主机和目标之间传输数据,实现双向通信。默认情况下,每个方向使用一个通道进行数据传输,但用户可以根据需要配置更多的通道。

实时传输技术可以通过不同的应用程序实现,并可以通过SDK集成到自定义应用程序中。它可以本地连接或远程连接,提供高度的灵活性和可扩展性。例如,可以使用J-Link RTT Viewer等工具进行虚拟终端操作,允许将数据打印到多个窗口,如标准输出、错误输出和调试输出。每个通道都可以配置为阻塞或非阻塞模式,以满足不同应用的需求。

此外,实时传输协议(Real-time Transport Protocol,RTP)是一个网络传输协议,用于在互联网上传递音频和视频数据。RTP提供具有实时特征的端对端数据传输服务,可以在组播或单播网络服务下传输交互式音频、视频或模拟数据。RTP常用于流媒体系统、视频会议和一键通(Push to Talk)系统等领域,成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,通常运行在UDP协议上。

J-Link RTT(Real Time Transmit)是SEGGER公司推出的一种用于嵌入式系统调试的技术。它允许用户从微控制器快速输出调试信息和数据,同时不影响系统的实时性能。J-Link RTT具有以下特点:

  1. 高速传输:J-Link RTT能够快速传输数据,尤其适用于需要实时监控或调试嵌入式系统的场景。
  2. 双向通信:J-Link RTT支持双向通信,即可以同时进行数据上传和下载,使得主机和目标设备之间的数据交换更加灵活。
  3. 实时性:由于J-Link RTT采用了高效的数据传输机制,它不会对嵌入式系统的实时性能产生影响。这意味着在调试过程中,系统的实时响应与没有使用RTT时相同。
  4. 高度可配置:J-Link RTT提供了丰富的配置选项,用户可以根据需求自定义数据传输的参数,如传输速率、缓冲区大小等。
  5. 兼容性强:J-Link RTT可以与多种主流的嵌入式开发工具和调试器配合使用,方便用户进行项目开发和调试。
  6. 安全性:J-Link RTT支持加密和校验功能,确保数据传输过程中的安全性和完整性。

网上有很多基于stm32的教程,RTT的原理是一样的,使用小华的芯片,SEGGER目前没有直接支持,所以要修改一下配置文件JLinkDevices.xml,这个文件提供了支持的器件目录。一般路径是:C:\Program Files (x86)\SEGGER\JLink_V646c

本文只用来支持F460系列芯片,所有只增加了下面的内容:

<!--HDSC-->
   <Device>
    <ChipInfo Vendor="HDSC" Name="HC32F46x" Core="JLINK_CORE_CORTEX_M4" WorkRAMAddr="0x1FFF8000" WorkRAMSize="0x30000" />
    <FlashBankInfo Name="HC32F46x" BaseAddr="0x00000000" MaxSize="0x40000" Loader="Devices/HDSC/HC32F46x.FLM" LoaderType="FLASH_ALGO_TYPE_CMSIS" />
  </Device>

里面增加的内容个人理解是增加了制造商、名称、内核,ram和flash信息,从而让jlink能够识别,里面涉及到一个文件 HC32F46x.FLM,这个文件如果安装了华大的pack之后,是有的,我使用了everything来搜索到到这个文件。

Loader="Devices/HDSC/HC32F46x.FLM" 这句话表示要在Devices/HDSC/目录下找到这个文件,所以在C:\Program Files (x86)\SEGGER\JLink_V646c\Devices这个目录中新建了HDSC文件夹,将HC32F46x.FLM复制到此文件夹中。

以上环境配置完成,然后是软件配置。

在这个文件夹下面C:\Program Files (x86)\SEGGER\JLink_V646c\Samples\RTT,有RTT的例程压缩包,解压之后将RTT整个文件夹复制到自己的工程中,工程目录如下:

编译,确保无错误,如果找不到头文件,在魔术棒里面,设定包含路径。为了实现打印,调用这个函数:

SEGGER_RTT_WriteString(0, "Hello World from SEGGER!\r\n");

打开JLinkRTTViewer,连接HDSC设备,连接成功之后,全速运行程序,如果不出意外,就能看到Hello World from SEGGER!的输出了。

RTT两个打印文件,使用起来基本不需要修改,如果有针对自己应用的修改,可以参考配置文件:SEGGER_RTT_Conf.h

RTT在MCU的存储器中使用Segger RTT控制块结构管理数据的读写操作。控制块对于每个可用的信道都在内存中包含了一个ID,用于描述通道缓冲区及其状态,通过J-Link或者环形缓冲结构区(链表)都可以通过ID找到对应的控制块。

可用信道的最大数目可以在编译时配置,并且每个缓冲区都可以在MCU运行时配置和使用。上下缓冲区可以分开处理。每个通道都可以配置为阻塞或非阻塞。

阻塞模式下,应用程序将等待缓冲区写满,直到可以写入所有内存为止,这将导致应用程序处于阻塞状态,但可以防止数据丢失。

非阻塞模式下,只会写入适合缓冲区的数据,或完全不写入缓冲区,其余的数据将被丢弃。这样即使没有连接调试器,也可以实时运行。开发人员不必创建特殊的调试版本,并且代码可以保留在发布应用程序中。

当 RTT处于活动状态时,无论是通过 RTT Viewer 等应用程序直接使用 RTT,还是通过 Telnet 连接到使用 J-Link 的应用程序(如调试器),J-Link 都会在目标的已知 RAM区域中自动搜索 Segger RTT 控制块。RAM区域或控制块的特定地址也可以通过主机应用程序设置以加快检测速度,否则无法自动找到控制块。

用了这个之后,再也不怕设备无法调试了。

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值