目录
参考链接:
vscode + cortex-debug,stm32 开发更有趣了 - 知乎 (zhihu.com)
(4条消息) STM32开发之 VS Code + GDB下载调试_夏沫的杂物间-CSDN博客
开源调试软件OpenOCD调试stm32 - 知乎 (zhihu.com)
(4条消息) NuttX的应用记录 4 (小记录)_Godenfreemans的博客-CSDN博客
一、前提
1、vscode 扩展
-
C/C++ v1.8.4
-
Cortex-Debug v1.2.2
-
Cortex-Debug: Device Support Pack - STM32F1 V1.0.0
-
Cortex-Debug: Device Support Pack - STM32F4 V1.0.0
-
gnu-debugger v1.0.4
2、工具
-
openocd v0.10.0 : sudo apt-get install openocd
-
GDB 工具链
3、NuttX V10.1.0
4、JLink v9 盗版
5、mcu:stm32f411ceu6
二、测试openocd 、gdb
Debugging — NuttX latest documentation (apache.org)
根据NuttX官网上的Debugging指南,它使用的是openocd与gdb进行调试,可以先根据官方上的指南对openocd与gdb来进行测试看我们安装是否成功。
1、(默认此时已经clone了NuttX的源码并且能过正常编译)进入到menuconfig,开启debug必要的选项。Build Setup → Debug Options
2、编译测试$make clean; make -j32
编译成功
3、官网是使用stlink-v2仿真器来使用openocd进行调试的,我使用过手头两个盗版U盘大小的stlinkv2都无法正常打开openocd。使用了盗版jlink v9则可以正常使用openocd。
注:jlink与stm32f411是通过swd进行连接
默认安装的openocd中jlink的interface配置文件是不支持使用swd模式的,我们需要新建一个配置文件
$ cd /usr/share/openocd/script/interface
$ cp jlink.cfg jlink_swd.cfg
$ vi jlink_swd.cfg
接下来是跟着官方操作
在终端1中:
$ openocd -f interface/jlink_swd.cfg -f target/stm32f4x.cfg
在终端2中:
$ cd {nuttx目录}
$ gdb-multiarch nuttx/nuttx //进入gdb
(gdb) target extended-remote :3333 //在gdb命令行中,连接gdb服务器
键入上面的命令后,终端1会显示accepting 'gdb' connection on tcp/3333,表示gdb已经成功连接上,即openocd与gdb都安装成功能正常使用。
进行下面的步骤时,需要把openocd 、 gdb都退出。
三、VSCode环境配置
1、首先把nuttx源码添加到VScode
2、把 一、前提 中VScode的插件全部装上。
3、在资源管理器中, .vscode目录下新建或修改launch.json、task.json这两个配置文件。
launch.json(文件名)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) nuttx", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cortex-debug", // 配置类型,这里使用拓展cortex-debug
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"servertype": "jlink", //
//"program": "System.map", // 将要进行调试的程序的路径
"executable": "${workspaceRoot}/nuttx/nuttx/nuttx", // 指定编译出来的nuttx文件
"device": "STM32F411CE", // 指定mcu
"interface": "swd", // 指定调试模式
"ipAddress": null,
"serialNumber": null,
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, //如果设置为true,调试器应该在目标的入口点停止(在附加时忽略)。默认值为false。
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"environment": [], // 当前项目环境变量
"externalConsole": false,
"MIMode": "gdb-multiarch", // 调试器模式/类型
//"showDevDebugOutput": "true", //打开调试信息,建议关闭
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
task.json(文件名)
{
"dependsOn":"Build", // 任务依赖
"label": "Build and Download", // 编译任务名
"type": "shell", // 编译任务的类型,通常为shell/process类型
"command": "openocd", // 编译命令
"args": [ // 调用openocd时使用的参数,制定interface
"-f",
"interface/jlink_swd.cfg",
"-f",
"target/stm32f4x.cfg",
"-c",
"program ./nuttx/nuttx.hex verify reset exit"
],
"problemMatcher": []
}
四、在线调试
1、打开VScode的运行与调试功能,点击(gdb)nuttx的绿色三角形,即可开始在线调试。
2、可以愉快的进行调试了