vscode+jlink+GDBServer在线调试

GDB、GDBServer、JLink之间的关系

借用网上一张图,原文参考:https://blog.csdn.net/qq_40833810/article/details/106713462
在这里插入图片描述
我们在进行GDB调试时,先打开GDB Server,通过tcp监听端口2331,等待进行连接并调试。

vscode安装

简单,官方下载安装即可。

JLink安装

官网下载并安装https://www.segger.com/downloads/jlink/

使用步骤

1.固件准备

  本文主要讲的是vscode在线调试,并未包含固件编译和下载,所以提前准备好固件并少如目标板中。
  使用的固件是*.elf文件,即生成的可执行文件。

2.GDB Server连接

  通过安装jlink时安装的JLinkGDBServer来打开GDB Server,有两种打开方法,如本人使用的是Atmel的SAMV71Q21
  打开方法一:
  通过安装目录找到 JLinkGDBServer.exe,双击即可打开,如图:
在这里插入图片描述
选择目标板(target device)、连接方式(Target interface),速度自行设定,其他保持默认,确认(OK)即可,然后进入下图:
在这里插入图片描述
图中所示:J-Link已连接,GDB Server Listening port: 2331,TCP端口是2331处于监听状态,等待GDB的TCP连接。
  打开方法二:
  命令行打开,需将 JLinkGDBServer.exe的路径保存到环境变量中,windows和linux都适合,然后输入命令:

JLinkGDBServer  -device ATSAMV71Q21 -if SWD -speed 500

-device后跟着的目标板需根据实际的需求进行更换,-speed可自己设置自己需要的速度,如下图为打开的界面(linux下没有界面,会显示等待连接状态):
在这里插入图片描述
  至此,GDB Server已打开,tcp端口2331处于监听状态,下一步是要通过GDB进行连接GDB Server。

2.vscode配置GDB

  通过vscode打开工程的根目录,添加gdb设置文件 lanuch.json(很重要),通过vscode的菜单栏,运行->添加配置,则生成如下图文件在这里插入图片描述
  然后,选择下图中的添加配置,添加红色圈中的内容,
在这里插入图片描述  选择完毕之后,则内容如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/path/to/gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }


    ]
}

主要需要更改3处内容
  1、更改可执行文件路径,即 “program”选项处,将此处内容更改为原工程生成的固件路径,注意在windows环境中,路径需使用 /或者 \\,如本人使用的路径:

//"program": "E:/exsample/test.elf",
"program": "E:\\exsample\\test.elf",

  2、更改gdb所在路径,即 “miDebuggerPath”选项处,选择编译固件时使用的gcc路径下得gdb文件,如本人使用的是:

//"miDebuggerPath": "D:\\Program Files\\Atmel\\Studio\\7.0\\toolchain\\arm\\arm-gnu-toolchain\\bin\\arm-none-eabi-gdb.exe",
"miDebuggerPath": "D:/Program Files/Atmel/Studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/arm-none-eabi-gdb.exe",

  3、添加GDB的tcp连接端口,使用本地端口localhost

"miDebuggerServerAddress": "localhost:2331"

  更改后的文件如下,此文件也可以之间拷贝到其他项目目录下,修改对应的可执行文件和gdb文件路径即可:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            //"program": "E:/exsample/test.elf",
			"program": "E:\\exsample\\test.elf",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            //"miDebuggerPath": "D:\\Program Files\\Atmel\\Studio\\7.0\\toolchain\\arm\\arm-gnu-toolchain\\bin\\arm-none-eabi-gdb.exe",
			"miDebuggerPath": "D:/Program Files/Atmel/Studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/arm-none-eabi-gdb.exe",
            "miDebuggerServerAddress": "localhost:2331"
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }


    ]
}

  至此,vscode配置GDB环境完毕,下一步进入真正的调试过程。

3.调试

点击vscode菜单栏的运行->启动调试,或者选择下图亦可启动调试:
在这里插入图片描述
调试界面如下:
在这里插入图片描述
1.可以进行单步调试、打断点等;
2.可以查看当前变量值
3.可以在监听窗口添加想要查看的变量或者寄存器等;

 
 
   上述步骤即可实现vscode+jlink+GDBServer的在线调试功能,当然也存在一些问题,目前还未找到原因,如每次进入调试都需重新启动GDB Server,然后再使用vscode进入调试模式,否则可能会进入调试失败。

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值