在之前的博客中《HPM6750系列--第二篇 搭建Ubuntu开发环境》、《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们分别介绍了Ubuntu和MacOS系统上基于命令行的开发环境的搭建过程,包括环境准备、编译、调试过程,整个过程稍微有些繁琐可能有些小伙伴不太习惯,那么本篇就介绍一下在Visual Studio Code下的开发调试过程(Ubuntu和MacOS都支持)。
注意:针对自己使用的操作系统先阅读一下之前的命令行搭建方式,本篇所有的操作都是在之前的基础之上完成的。
HPM6750evkmini 调试窗口 Ubuntu
Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications. Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.https://code.visualstudio.com
关于CMake Tool的详细介绍可以查阅: Get started with CMake Tools on Linux
export GNURISCV_TOOLCHAIN_PATH="/Users/coder/workspace/third/hpm/toolchain/riscv32-unknown-elf-newlib-multilib"
export HPM_SDK_TOOLCHAIN_VARIANT=
export HPM_SDK_BASE="/Users/coder/workspace/third/hpm/hpm_Sdk"
export OPENOCD_SCRIPTS="/Users/coder/workspace/third/hpm/hpm_Sdk/boards/openocd"
export HPM_OPENOCD_PATH="/Users/coder/workspace/third/hpm/riscv-openocd"
其中HPM_OPENOCD_PATH是我们自己编译的OPENOCD程序的路径;OPENOCD_SCRIPTS是使用OPENOCD时要使用的配置文件路径。
重新打开一个terminal并输入
mkdir -p ~/workspace/work/hpm
cp -r ~/workspace/third/hpm/hpm_Sdk/samples/hello_world ~/workspace/work/hpm/
cd ~/workspace/work/hpm/hello_world/
mkdir .vscode
在目录下放置一下两个文件
settings.json
{
"cmake.buildBeforeRun": true,
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
"cortex-debug.openocdPath": "${env:HPM_OPENOCD_PATH}/src/openocd",
"cortex-debug.variableUseNaturalFormat": false,
"cmake.configureSettings": {
"BOARD":"hpm6750evkmini"
},
"cmake.defaultVariants": {
"buildType": {
"choices": {
"flash_xip": {
"short": "flash_xip",
"long": "hpm flash xip",
"buildType": "flash_xip"
}
}
}
}
}
其中"cortex-debug.openocdPath"是设置为我们自己编译的openocd的路径;
"cmake.defaultVariants"用于新增构建类型为flash_xip;
launch.json(hpm6750evkmini板载ft2232调试器)
{
"version": "0.2.0",
"configurations": [
{
"name": "HPM Debug",
"cwd": "${workspaceRoot}",
"executable": "${command:cmake.launchTargetPath}",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"gdbPath" : "${env:GNURISCV_TOOLCHAIN_PATH}/bin/riscv32-unknown-elf-gdb",
"searchDir": ["${env:OPENOCD_SCRIPTS}"],
"device": "HPM6750",
"configFiles": [
"probes/ft2232.cfg",
"soc/hpm6750-single-core.cfg",
"boards/hpm6750evkmini.cfg"
],
"interface": "jtag",
"runToEntryPoint": "main",
// Work around for stopping at main on restart
"postRestartCommands": [
"break main",
"continue"
]
}
]
}
其中"gdbPath"设置我们工具链中的gdb路径;"searchDir"设置openocd配置文件的路径;"configFiles"设置配置文件("probes/ft2232.cfg":使用ft2232调试器、"soc/hpm6750-single-core.cfg":单核调试、"boards/hpm6750evkmini.cfg":板级配置)
cd ~/workspace/work/hpm/hello_world/
code .
其中①选择编译类型
可以看到其中有我们刚刚设置的flash_xip。
很多小伙伴可能还不知道flash_xip的含义:
我们的程序有加载视图和执行视图的区别,程序中的代码(Code)和数据(Data)是保存在flash中的,在运行的时候这些内容可以直接从flash的地址执行,这种叫做flash_xip;如果代码和数据都拷贝到RAM中运行,比如拷贝到SDRAM中,我们可以叫做sdram_xip(但是程序还是必须先烧写到flash中,程序执行的时候由启动代码拷贝到sdram中)。如果大家对这个想进一步了解的话,可以阅读一下博文
GNU LD脚本命令语言(一)_coder.mark的博客-CSDN博客链接器脚本控制着每一次链接过程,链接脚本是用链接器命令语言编写的(linker command language)。链接脚本的主要目的是描述输入文件中的段(section)应该如何映射到输出文件中的段(section),并且控制输出文件的内存布局(地址分配)。有些时候链接器脚本还可以使用链接器命令指示链接器执行许多其他操作。......................................................_gnu ldhttps://blog.csdn.net/tianizimark/article/details/125865933
其他编译类型的含义:
Debug:禁止优化并且包含调试信息
Release:包含优化但没有调试信息
MinRelSize:优化程序大小并且没有调试信息
RelWithDebInfo:优化执行速度并且包括调试信息
②选择工具链,此处我们不需要设置(因为我们已经通过环境变量的方式设置工具链)
③编译
打开调试窗口(点击④)
观察terminal窗口会有openocd执行过程
观察DEBUG CONSOLE窗口有GDB的执行过程
同时整个调试窗口会有一个调试工具栏出现
以上就是Visual Code的开发调试环境。
最后针对HPM-SDK的一些配置,我们还设置了"flash_sdram_xip"构建类型。