嵌入式芯片调试神器-J-LinkRTT详解

更多硬连线和无线通信技术分享、职业发展、实践项目和咨询联系,请关注vxgzh《TechnologyShapingtheFuture》RealTimeTransfer(简称RTT)是Segger推出的一款用于嵌入式系统监控和监控的工具。
互操作性集成了SWO(SWD调试技术中的调试日志生成)等能力它具有极高的性能。
RTT的技术特点如下:RTT可以实现高速双向通信,而不影响嵌入式应用的实时行为。
RTT可以在两个传输方向(输出和输入)上支持多个通道,并且不同的通道可以用于不同的目的。
一种常见的实现方式是每个传输方向使用一个通道进行输入输出校正:在计算机上使用J-LinkRTTViewer工具,工具上可以有多个虚拟终端,可以用于打印不同的信息(例如获取标准输出窗口、输出错误信息窗口和输出调试信息窗口)。
在您的目标应用程序中使用RTT非常容易。
实现代码可以免费下载,并且可以集成到任何现有的应用程序中。
通过RTT通信,可以使用任何J-Link。
通过终端(通道0)进行通信的一种简单方法是使用Telnet客户端或类似设备建立与localhost:19021的连接,同时与J-Link的连接处于活动状态(例如,通过校正会话)。
RTT工具包含在J-Link软件包中。
您可以根据系统需要下载对应的安装包(地址:segger.com/downloads/jl...),非常简单这里附加说明Linux系统下的安装细节,以RaspberryPi系统为例:J-LinkRTTViewerJ-LinkRTTViewer是用于使用所有RTT调试功能的主要WindowsGUI应用程序。
RTTViewer可以独立使用,打开与J-Link的连接,也可以在运行调试会话时并行使用RTTViewer支持RTT的所有主要功能:J-LinkRTTViewer的详细说明可以在J-Link用户指南文档中找到。
(wiki.segger.com/UM08001...)。
至于J-LinkRTTViewer的多个虚拟终端,描述还比较模糊。
这里有相关的例子来说明。
J-LinkRTTClientJ-LinkRTTClient充当TelnetClient,并在调试会话关闭时自动尝试重新连接到J-Link连接。
J-LinkRTTLogger使用J-LinkRTTLogger,可以读取来自Up-Channel1的数据并将其记录到链接日志文件中,该文件只能在没有调试会话的情况下使用。
该应用程序也是J-Link软件包的一部分。
J-LinkRTTLogger支持的命令列表如下:下面是在RaspberryPi上使用J-LinkRTTLogger捕获Nordic开发板日志的示例:RTT工作原理RTT实现采用ControlBlock架构,在目标集成系统中管理读取并通过内存写入数据。
注:UpBufferDescriptors:Target->HostDownBufferDescriptors:Host->Target上图中灰色部分表示数据存在包含ID,适合上面提到的J-Link搜索内存)使用RingBufferSchema,描述缓存和通道状态。
可以配置可用通道的最大数量,也可以配置每个缓冲区。
每个通道都可以配置为阻塞或非阻塞模式。
在阻塞模式下,应用程序将在缓冲区满时等待,这将导致应用程序崩溃,但确保不会丢失数据。
在非阻塞模式下,只写入适合缓冲区大小的数据,或者根本不写入数据,其余的将被丢弃。
该方法适合应用程序的实时执行。
当启用RTT时,例如通过RTTViewer使用J-Link连接到应用程序,J-Link会自动在目标嵌入式系统的已知内存区域中搜索SEGGERRTTControlBlock。
RAM区域或控制块的特定地址也可以由主机应用程序设置以加快检测速度。
RTT性能如下。
它是RTT速率、SWO和Semihosting.paint模型(JTAG速率不同)的比较,以及嵌入式系统中RTT分配的ControlBlock缓冲区大小规模的比较:上行RTT通道的缓冲区可以相对较小,并且大约一毫秒内可写入的最小所需缓冲区大小由输入的数据量和一次操作中写入的最大数据量表示写作。
如果数据发送频率较低,则缓冲区必须有足够的空间来容纳一次写入发送的数据。
如果数据发送较频繁,则缓冲区大小必须足以满足1毫秒写入的最大数据量。
下图显示了等间隔、每100us和每1ms发送不同数量的数据时所需的最小缓冲区大小:RTT实现代码需要大约500字节的ROM空间,RAM占用与ControlBlock中的缓冲区数量有关,24字节ID+24字节控制块1个通道。
每个通道都需要一个缓冲存储器。
根据输入/输出负载,建议上行通道大小为1kByte,下行通道建议大小为16至32字节。
RTT代码实现SEGGERRTT代码是用ANSIC编写的,可以轻松集成到任何嵌入式应用程序中。
可以通过简单易用的API使用RTT。
甚至可以重写标准printf()函数以使用RTT。
使用RTT可将printf()花费的时间降至最低,并允许在应用程序实时执行时间关键任务时将调试信息打印到主机。
SEGGERRTT实现包括一个简单的printf()实现,可用于通过RTT写入格式化字符串。
SEGGER_RTT_Printf()比大多数标准printf库实现要小,并且不需要堆栈,而只需要可配置的堆栈数量。
使用Lock()和Unlock()使读写线程安全,可以设置缓冲区数量和终端缓冲区大小。
以下是RTT提供的集成集成的接口功能:更多精彩文章,也欢迎您关注公众号“科技塑造未来”,持续接收。
参考资料segger.com/products/deb...wiki.segger.com/UM08001...wiki.segger.com/RTT

一文带你搞定TCP重传

TCP重传机制是为了解决网络丢包问题而设计的。
其核心依靠TCP头中的序列号和确认号来判断是否需要重传。
该机制主要涉及以下几种触发方式:首先我们来了解一下超时重传机制。
发送数据时,发送方设置一个定时器。
当数据包超过指定时间,没有收到接收方的确认响应(ACK)时,就会触发重传。
RTT(往返时间)和RTO(重传超时时间)是超时重传相关的关键指标。
RTO设置需要考虑RTT。
比RTT稍大为宜,但需要根据网络动态进行调整。
在某些情况下,超时可能会因网络拥塞而触发重传。
为了避免频繁重传加剧网络拥塞,发送方会将下一次超时设置为当前值的两倍,即超时加倍策略。
然而,超时重传机制也有缺陷。
周期可能会较长,导致重传的等待时间较长。
为了解决这个问题,引入了快速重传机制。
快速重传不再基于时间,而是基于数据包的状态。
当接收方收到一组数据包时,会不断发送确认响应。
当发送方收到重复的确认响应时,会立即重传之前未确认的数据包,以提高数据传输效率。
选择性重传(SACK)进一步优化了快速重传机制。
通过接收方发送的SACK信息,发送方可以准确识别丢失的数据包序列,从而有针对性地重传,提高传输的准确性。
和效率。
SACK的使用需要保证发送方和接收方都支持该功能。
另一种提高重传机制性能的方法是启用D-SACK(DuplicateSACK)功能。
D-SACK允许发送方识别重复接收的数据包以及丢失的ACK消息。
通过接收方发送的D-SACK信息,发送方可以确定延迟或丢失的数据包,并做出相应的调整,以避免不必要的重传。
在Linux系统中,可以通过调整net.ipv4.tcp_dsack参数来启用D-SACK功能。
通过合理的配置和调整,TCP重传机制可以有效提高数据传输的可靠性和效率,保证网络通信的顺畅。

linuxping命令结果的意思

平均偏差算术平均偏差发送5个数据包,收到5个数据包,无丢失。
发送的总时间为4004ms。
RTT是往返时间的传输时间延迟。
最小/最大/平均/算术平均差。
哈哈,主要看网络情况,就是延迟时间。
Linux下神奇的网络命令!,