一、目的
在之前的博客中《HPM6750系列--第二篇 搭建Ubuntu开发环境》、《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们分别介绍了Ubuntu和MacOS系统上基于命令行的开发环境的搭建过程,包括环境准备、编译、调试过程,整个过程稍微有些繁琐可能有些小伙伴不太习惯,那么本篇就介绍一下在Visual Studio Code下的开发调试过程(Ubuntu和MacOS都支持)。
注意:针对自己使用的操作系统先阅读一下之前的命令行搭建方式,本篇所有的操作都是在之前的基础之上完成的。
![](https://i-blog.csdnimg.cn/blog_migrate/8d7184545240a13e0dc950852529fbb3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f4967e53b055a105d0b015d42ac14cf4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2d4cbfdbf1d2f55d3276a3f47a696dd3.png)
二、准备
1、安装Visual Studio Code
2、安装cmake-tool、Cortex-Debug插件
关于CMake Tool的详细介绍可以查阅: Get started with CMake Tools on Linux
三、实战
1、设置环境变量并保存到~/.bash_profile(注意其中的路径替换成自己主机的路径)
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时要使用的配置文件路径。
2、创建工程目录并拷贝示例工程
重新打开一个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/
3、配置工程属性(重要)
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":板级配置)
4、打开工程并编译
cd ~/workspace/work/hpm/hello_world/
code .
其中①选择编译类型
可以看到其中有我们刚刚设置的flash_xip。
很多小伙伴可能还不知道flash_xip的含义:
我们的程序有加载视图和执行视图的区别,程序中的代码(Code)和数据(Data)是保存在flash中的,在运行的时候这些内容可以直接从flash的地址执行,这种叫做flash_xip;如果代码和数据都拷贝到RAM中运行,比如拷贝到SDRAM中,我们可以叫做sdram_xip(但是程序还是必须先烧写到flash中,程序执行的时候由启动代码拷贝到sdram中)。如果大家对这个想进一步了解的话,可以阅读一下博文
其他编译类型的含义:
Debug:禁止优化并且包含调试信息
Release:包含优化但没有调试信息
MinRelSize:优化程序大小并且没有调试信息
RelWithDebInfo:优化执行速度并且包括调试信息
②选择工具链,此处我们不需要设置(因为我们已经通过环境变量的方式设置工具链)
③编译
5、调试
打开调试窗口(点击④)
观察terminal窗口会有openocd执行过程
观察DEBUG CONSOLE窗口有GDB的执行过程
同时整个调试窗口会有一个调试工具栏出现
以上就是Visual Code的开发调试环境。
最后针对HPM-SDK的一些配置,我们还设置了"flash_sdram_xip"构建类型。