【JLINK】RTT Viewer 的使用

news2024/9/24 11:32:49

​​​​​​

一、使用说明

1.1 查找 RTT 缓冲区的开始位置

@echo off
@if exist .\Debug\%PRJ_NAME%.map (
    findstr /C:" _SEGGER_RTT" .\Debug\%PRJ_NAME%.map
@rem	findstr /C:" __StackTop " .\Debug\%PRJ_NAME%.map
@rem	findstr /C:" Reset_Handler" .\Debug\%PRJ_NAME%.map
)else (
	echo "not found .\Debug\%PRJ_NAME%.map!!!"
)
  1. @echo off: 关闭命令回显,防止命令本身被打印到控制台。

  2. @if exist .\Debug\%PRJ_NAME%.map (: 检查当前目录下的 Debug 子目录中是否存在一个名为 %PRJ_NAME%.map 的文件。%PRJ_NAME% 是一个环境变量或参数,它会被替换成实际的项目名称。

  3. findstr /C:" _SEGGER_RTT" .\Debug\%PRJ_NAME%.map: 如果文件存在,则使用 findstr 命令在该 .map 文件中搜索包含文本 " _SEGGER_RTT" 的行。这通常用于查找与 SEGGER RTT 相关的信息(RTT 是 Real-Time Transfer 的缩写,是一种用于实时传输数据的技术)。

接下来的两行以 @rem 开头,表示它们是被注释掉的命令,不会被执行:

  1. @rem findstr /C:" __StackTop " .\Debug\%PRJ_NAME%.map: 这一行如果启用,会在 .map 文件中搜索包含 " __StackTop " 的行,这通常与栈顶地址相关。

  2. @rem findstr /C:" Reset_Handler" .\Debug\%PRJ_NAME%.map: 这一行如果启用,会在 .map 文件中搜索包含 " Reset_Handler" 的行,这通常与重置中断处理程序相关。

  3. )else (: 如果前面的 if exist 语句条件不满足(即 .map 文件不存在),则执行以下命令。

  4. echo "not found .\Debug\%PRJ_NAME%.map!!!": 输出一条消息,说明没有找到 .map 文件。

  5. ): 结束 if...else 语句块。

1.2 输入地址

1.3 输入命令

二、.map 文件

        当涉及到嵌入式系统开发时,.map 文件是一个非常重要的工具,它提供了编译后程序的内存映射信息,包括各个段的位置、大小以及符号表等。对于使用了 SEGGER RTT(Real-Time Transfer)功能的项目来说,.map 文件中的 _SEGGER_RTT 符号尤为重要,因为这通常标志着 RTT 缓冲区的开始位置

2.1 .map文件与RTT 

         在嵌入式开发中,SEGGER RTT 是一种常用的实时数据传输技术,它允许开发者在运行时将数据从目标设备传输到主机。为了确保 RTT 功能能够正常工作,必须正确地配置 RTT 缓冲区。通过在 .map 文件中搜索 _SEGGER_RTT 符号,开发者可以确认 RTT 缓冲区是否已经被正确地配置并链接到了最终的固件中。

        在某些情况下,开发者可能需要知道 RTT 缓冲区的具体内存地址。例如,在编写启动代码或进行低级调试时,知道缓冲区的起始地址和大小是非常有用的。通过使用 findstr 命令来搜索 _SEGGER_RTT,脚本可以快速地找到 RTT 相关的信息,从而获取这些关键的内存布局细节。

         除了确认 RTT 缓冲区的存在外,开发者还需要确保 RTT 缓冲区没有与其他内存区域发生冲突。通过检查 .map 文件中 _SEGGER_RTT 的位置和大小,可以验证内存布局是否合理,避免潜在的内存重叠问题。

        在调试过程中,有时需要知道 RTT 缓冲区的确切位置以便于设置断点或者观察数据流。例如,在调试通信问题时,了解 RTT 缓冲区的内存布局有助于更准确地定位问题所在。

 2.1 什么是 .map文件

        .map 文件是编译器生成的一种特殊文件,它为开发者提供了一个详细的视图,展示了编译后的程序是如何组织和分布在内存中的。这种文件通常是在链接阶段由链接器创建的,它包含了程序的内存布局信息,包括各个段的位置、大小以及符号表等重要数据。在嵌入式系统开发中,.map 文件对于理解和调试程序的行为至关重要。

         .map 文件提供了程序中各个部分(如代码段、数据段、初始化数据段、未初始化数据段等)如何在内存中排列的信息。这有助于开发者了解程序的内存使用情况,比如某个函数或变量被放置在内存中的哪个位置,这对于优化程序性能或解决内存相关的问题非常有用。

         .map 文件还包含了一个符号表,其中列出了所有定义和引用的符号及其对应的地址。这些符号可以是函数、变量或其他标识符。通过符号表,开发者可以追踪程序中每个符号的确切位置,这对于调试非常有帮助,特别是在多模块或多文件项目中。 

         在调试过程中,.map 文件提供了重要的信息,帮助开发者定位问题。例如,如果程序崩溃,开发者可以通过 .map 文件来确定导致崩溃的代码段或数据段的位置,从而更快地解决问题。

         .map 文件还可以用来验证链接过程是否正确完成。通过检查 .map 文件,开发者可以确认所有的外部符号是否都被正确解析,以及是否有未解析的引用或重复定义等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从欧拉公式的美到旋转位置编码RoPE

也许你在某些场合听说过欧拉公式,也许你干脆对数学不感冒。机缘巧合下,你点开了这篇文章,大致浏览了下然后关闭,继续为自己的工作学习忙碌。这不妨碍你暂停忙碌的脚步,欣赏她的美。 若干年后,你应该不曾记得…

Java基础(2)- Java环境

目录 一、jvm和跨平台 二、JDK 和 JRE 三、JDK的下载和安装 四、配置环境变量 一、jvm和跨平台 1.jvm(Java虚拟机)类似于翻译官:java运行程序的假想计算机,主要运行java程序。 2.跨平台:指不同操作系统。 3.关系…

网上买大流量卡要问哪些问题?几个常见的问与答!

大家都比较关注的几个常见的流量卡问题,答案来喽! 这几个问题特别适合刚刚接触流量卡的朋友,如果你在购买流量卡时不知道该了解什么,该向商家问什么的时候,不妨问问这几个问题吧,接下来,这篇文…

python 实现square root平方根算法

square root平方根算法介绍 计算平方根(Square Root)的算法有多种,这里介绍几种常见的方法: 牛顿迭代法(Newton’s Method) 牛顿迭代法是一种在实数域和复数域上近似求解方程的方法。对于平方根问题&…

home kit认证

在当今快节奏的生活中,智能家居技术正不断改变我们的居住体验。home kit 将这一领域提升到了全新的高度。它不仅让智能家居设备的管理变得更为简单直观,还通过高水平的安全性和互操作性,为用户提供了无缝的体验。 一、什么是home kit home k…

CentOS7将yum源更换为国内源保姆级教程

在 CentOS 7 系统中更改 YUM 源到国内源可以显著提高软件包的下载速度,因为国内源服务器通常距离中国大陆用户更近。以下是一个详细的步骤来完成这一操作: 步骤 1: 备份原有配置 首先,备份原系统中的 yum 配置文件以防万一: BA…

红黑树模拟实现STL中的map与set——C++

1.红黑树的迭代器 (本篇代码基于我写的红黑树的实现这篇博客) 迭代器的好处是可以方便遍历,是数据结构的底层实现与用户透明。如果想要给红黑树增加迭代器,需要考虑以下问题: begin()与end(): STL明确规定&…

无人机侦测:光电识别追踪设备(双光)技术详解

无人机侦测中的光电识别追踪设备(双光)技术,是一种高效且精准的目标识别与追踪手段,特别适用于无人机平台。以下是对该技术的详细解析: 一、技术概述 光电识别追踪设备(双光)结合了可见光和红…

企业微信iPad协议:自定义接入需求,为行业提供新助力

在当今数字化时代,企业如何有效连接客户、提升营销效率成为了一个重要议题。iPad协议,或称企业微信协议,作为基于微信iPad协议的智能接口服务,优势及其在企业营销中的应用。 什么是iPad协议? iPad协议是一种智能控制…

<数据集>塑料瓶识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3331张 标注数量(xml文件个数):3331 标注数量(txt文件个数):3331 标注类别数:1 标注类别名称:[bottle] 使用标注工具:labelImg 标注规则:对…

Swift concurrency 2 — async await的理解与使用

async / await 将函数标记为async会告诉Swift编译器该函数是异步执行的,是可以挂起的。await关键字标记了这些挂起点。当一个函数在await调用时被挂起时,它所执行的线程可以用来执行其他工作。当等待的工作完成时,运行时可以恢复函数的执行。…

网络实用工具

ping 测试与目标主机的连通性 显示解释www.a.shifen.com (14.215.177.39)ping目标主机的域名和IP(ping会自动将域名转换为IP)56(84)不带包头的包大小和带包头的包大小icmp_seq1ping序列,从1开始如果数字不是顺序递增即有丢包ttl54数据包剩余生存时间, 默…

Python | Leetcode Python题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution:def kthSmallest(self, matrix: List[List[int]], k: int) -> int:n len(matrix)def check(mid):i, j n - 1, 0num 0while i > 0 and j < n:if matrix[i][j] < mid:num i 1j 1else:i - 1return num > …

MS sqlserver备份软件 SQLBackupAndFTP

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Linux—— 配置ssl安全证书

一、实验设计 二、实验配置过程 [studentbogon ~]$ su - root Password: [rootbogon ~]# dnf -y install nginx [rootbogon ~]# vim /etc/selinux/config [rootbogon ~]# setenforce 0 [rootbogon ~]# systemctl stop firewalld 清空防火墙规则 [rootbogon ~]# iptables -F ^C…

CHARLS数据库挖掘系列教程(1)---数据库下载

CHARLS 是一项具备中国大陆 45 岁及以上人群代表性的追踪调查&#xff0c;旨在建设一个高质量的公共微观数据库&#xff0c;采集的信息涵盖社会经济状况和健康状况等多维度的信息&#xff0c;以满足老龄科学研究的需要。 为利用国际上最佳的数据采集方式&#xff0c;并确保研究…

YOLOv8实例分割推理流程及Python代码

1.YOLOv8_Seg推理流程 2.YOLOv8_Seg推理代码 3.全部代码 """ yolov8:目标检测推理代码 python """ import torch import cv2 import numpy as np import onnxruntime as ort import os import torch.nn.functional as F def xywh2xyxy(x):"…

【K8S 基本概念】Kubernets的架构和核心概念及集群搭建

一、Kubernets 1.作用&#xff1a;用于自动部署扩展以及管理容器化部署的应用程序&#xff0c;半开源&#xff0c;k8s的底层是基于谷歌go语言开发的&#xff0c;负责自动化运维管理多个容器化的应用的集群&#xff0c;容器编排框架的工具。现在使用的版本1.18-1.24&#xff0c…

开放式耳机怎么戴?佩戴舒适在线的几款开放式耳机分享

开放式耳机的佩戴方式与传统的入耳式耳机有所不同&#xff0c;它采用了一种挂耳式的设计&#xff0c;提供了一种新颖的佩戴体验&#xff0c;以下是开放式耳机的佩戴方式。 1. 开箱及外观&#xff1a;首先&#xff0c;从包装盒中取出耳机及其配件&#xff0c;包括耳机本体、充电…

java-Mybatis框架02

1.#{} 和${}区别 #{} 是占位符&#xff0c;是采用编译方式向sql中传值&#xff0c;可以防止sql注入&#xff0c;如果往sql中传值&#xff0c;使用#{}${} 是将内容直接拼接到sql语句中&#xff0c;一般不用于向sql中传值&#xff0c;一般用于向sql中动态传递列名。区别&#xff…