理解 Visual Studio Code (STM32) 中的皮质调试配置时遇到问题

问题描述 投票:0回答:1

我目前正在尝试通过离开常见的开箱即用 IDE 并在 Visual Studio Code 中创建自己的内部来更好地理解嵌入式工具链。

在一些教程的帮助下,我成功地启动并运行了 STM32L433 Nucleo 板的闪烁 LED 项目。

我要做的最后一步是实现调试功能。由于我过去只通过 IDE 完成此操作,所以这部分对我来说有点棘手。 尽管如此,我还是设法让它工作,但我仍然无法理解实际发生的事情。

因此我希望你们能帮助我更好地理解这一点。

我使用带有 C/C++ 和 Cortex 调试扩展的 Visual Studio Code。在硬件方面,我使用的是 STM32L433 Nucleo-Board 以及内置 ST-Link 调试器探针。

我在 VSC 中创建了我的项目,并为调试设置创建了一个 launch.json,它看起来像这样:

{
    "version":"0.2.0",
    "configurations": [
        {
            "name": "Cortex ST-Link",
            "cwd": "${workspaceRoot}",
            "executable": "./build/Test.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "stlink",
            "stlinkPath": "D:/CubeIDE/STM32CubeIDE_1.8.0/.../bin/ST-LINK_gdbserver.exe",
            "stm32cubeprogrammer": "D:/CubeProgrammer/bin",
            "device": "STM32L433RC",
            "configFiles": [
                "interface/stlink.cfg",
                "target/stm32l4x.cfg"
            ],
            "svdFile": "STM32L4x3.svd"
        },  
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "./build/Test.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "device": "STM32L433RC",
            "configFiles": [
                "interface/stlink.cfg",
                "target/stm32l4x.cfg"
            ],
            "svdFile": "STM32L4x3.svd"
        }       
    ]

}

两种配置都有效,我不知道这是否是正确/专业的方法,但这是我从示例和 Cortex 调试文档中找到的全部内容。如果我做错了什么,请告诉我应该采取哪些不同的做法。

到目前为止我学到的有关调试的知识如下:

  1. 我需要一个可以与我的 MCU 的调试访问端口进行通信的调试探针。
  2. 我需要一个 GDB 服务器来处理调试器和我的 PC 之间的通信。
  3. 我需要一个连接到 GDB 服务器的客户端工具,并为我提供一个读取和写入调试指令和信息的接口。

让我们从 OpenOCD 配置开始。 使用的调试器是 nucleo 板的 st-link。如果我从调试控制台得到正确结果,我的 GDB 服务器将是 OpenOCD,我的客户端将是 arm-none-eabi-gdb 实用程序。 我使用 stlink.cfg 告诉服务器我使用哪个调试器,以便服务器知道如何与之通信。 到目前为止这是正确的吗?

接下来是 ST-Link 配置。 我现在使用 ST-Link-GDB 服务器而不是 OpenOCD。对于客户端,再次使用arm-none-eabi-gdb。 但是当我开始像这样执行它时,ST-Link-GDB 服务器会抛出一个错误,指出它找不到 STCubeProgrammer 实用程序。 所以我也给出了这个实用程序的路径并且它可以工作。 我现在的问题是,CubeProgrammers 在这个链条中扮演什么角色?我显然不需要 OpenOCD 的附加组件,那么为什么我需要 CubeProgrammer? 我首先认为 CubeProgrammer 是这种情况下的客户端,但我可以看到在这个调试配置中仍然调用arm-none-eabi-gdb。 即使 ST 的 GDB userguide 也只显示了服务器、调试器和客户端,概述中没有程序员...

有人可以帮助我了解幕后发生的事情以及 CubeProgrammer 的作用是什么吗?或者也许指出我在这件事上是否有一些错误的配置/理解?

提前致谢:)

致以诚挚的问候

Evox402

visual-studio-code gdb stm32 vscode-debugger openocd
1个回答
0
投票

是的,对于 ST-Link 服务器,您确实需要指定编程器的路径,这相当复杂,尤其是在 Linux/Mac 上。我不明白为什么它不只是内置的。 cortex-debug 进行了一些更改以自动检测,但当您包含多个版本的 ST 软件时,可能会造成混乱。

您可以使用“cortex-debug.stm32cubeprogrammer”用户/工作空间设置或在 launch.json 中明确指定要使用的程序员。

提示:如果您查看“调试配置”并单击“显示命令”(或类似的东西),您可以在 Eclipse 中看到程序员的路径。

如果您使用 OpenOCD,请尝试使用 ST 分发的版本,而不是来自 Internet 的版本。

您的其他问题? STLink 和 OpenOCD 有什么区别?功能集不同,但您可能没有注意到使用 VSCode。

© www.soinside.com 2019 - 2024. All rights reserved.