文章目录
- 目的
- 前期准备
- 1.软件安装
- 2.VScode安装
- 3.VScode插件安装
- 4.安装ARM-GCC交叉编译器
- 工程导入
- 程序编译
- jlink在线调试
- 部分常见问题
- 更改为GCC 编译器
- 更改为stlink+opencd
- 一些tips
- 调试变量查看
- 构建器选项配置
目的
提示:这里可以添加技术概要
vscode代替keil进行程序烧写,主要依赖eide插件烧写,实时调试使用cortex-debug插件+openocd
代替keil有几个好处
1费用减轻,对于企业来说,不需要购买keil软件,一般来说keil都是需要购买,而且软件非常昂贵,我所在的单位甚至开出14万一年的高价。因此脱离keil就是脱离经济讹诈
2调试方便。最初配置整个开发环境可能是困难的,相比于keil来说,初始vsccode+eide的配置肯定是困难的,但是配置完成后,由于vscode有着众多的插件,实际调试可以使用AI进行代码补全,可以更加便捷的查看变量,因此总体来说,调试更加简单。
3进阶学习,使用keil配置中很多配置你都不需要管,实际上来说是傻瓜式的,无论是芯片的选择,仿真器的配置,以及底层的汇编向量表,你基本都不需要考虑。但是对于vscode来说就需要考虑了。当然,现在vscode资料多,你完全也可以直接上手用。不过vscode确实提供了一个不同的环境。能够让开发者更好的修改这些底层。因此学习这种配置方式,能更好的理解嵌入式系统的编译和烧写。
前期准备
1.软件安装
需要安装以下软件
1VScode安装
主要的IDE,基本所有配置都在IDE中完成,安装傻瓜式,官网下载即可
2 GNU Arm Embedded Toolchain:
arm用的GNU工具链,包括编译器(gcc),调试器(gdb),链接器(ld)和其它工具。
3VScode插件Embedded IDE (EIDE)
主要的编译运行插件,方便导入
4VScode插件Cortex-Debug
实时调试运行芯片
5 jlink驱动SEGGER (可选)
如果你使用jlink烧写,那么自然需要安装 jlink仿真器驱动软件
6stlink驱动ST-LINK Utility(可选)
如果你使用stlink烧写,那么自然需要安装 stlink仿真器驱动软件
7openocd(可选)
如果你使用stlink实时仿真,那么可能需要openocd在线调试
2.VScode安装
vscode安装链接
https://code.visualstudio.com/
安装后默认可能是英文,可安装语言包切换为中文
打开左侧插件栏(Extensions),在搜索框中输入chinese。
选择Chinese(Simplified) 点击右下角的install按钮。
安装完毕后,自行重启VScode,或者点击右下角的提示的restart按钮重启VScode。
重启后VScode界面语言已经更改为简体中文。
3.VScode插件安装
首先在最左侧栏找到扩展进行安装插件
1C/C++ for Visual Studio Code
来自微软官方的 C/C++ 插件,必备的插件,如果不安装,代码无法跳转,也没有自动补全。
2C/C++ Extension Pack
对官方工具的补充,对以下工具功能增强
跳转到定义;代码自动补全;查找代码引用;列举 symbols;
实际上基本和C/C++ 插件绑定一起使用
3 Cortex_Debug
实时在线调试插件
4Embedded IDE
安装后重启vscode,左侧会出现EIDE标志
VScode+插件安装完成
注,这只是必须要安装的,实际上还可以安装很多其他的
例如
1makefile插件,方便你写makefile
2md插件,方便查看md文件
3codegeex Ai自动代码补全
4project manager 项目管理插件
4.安装ARM-GCC交叉编译器
arm用的GNU工具链,包括编译器(gcc),调试器(gdb),链接器(ld)和其它工具。 程序在线调试需要这个
进入arm开发者官网,往下滑动选择下载解压可用的ZIP压缩包文件
请下载ZIP版本。然后系统变量添加路径
系统变量需要添加具体路径,路径添加可能重启电脑才能完全生效(不一定),添加成功后,验证方法是vscode终端后中运行命令
arm-none-eabi-gcc –version
显示正常版本号说明路径正常
工程导入
具体可参考EIDE指导手册
选择导入项目,导入功能支持keil,IAR和Eclipse,选择MDK
可以选择是否于keil共存于同一目录下,选择Yes
点击确定,切换工作区
自动跳转,工程已经打开,如果keil中工程配置已经正常情况下,那么能够看到6项,包括项目名称,项目资源,芯片支持包,构建配置,烧录配置,项目属性
1.项目名称
项目名称为实际工程的名称
2.项目资源
包括你原先的.C和.h文件
3.芯片支持包
目前EIDE插件可以不配置,因为目前插件只支持Coretx-M核心。
4.构建配置
AC5:代表ARMC5这个如果未破解仍然编译32KB代码
CPU类:Coretx-M4
浮点类型:单精度双精度等
链接脚本路径: 一个带有存储器布局的描述文件,我们称之为 链接器脚本文件,比如: xxx.sct, xxx.lds, xxx.ld,它将被传递给链接器
5.烧录配置
程序文件为烧写hex文件
芯片名称为硬件具体型号
接口类型是JTAG还是SWD
6.项目属性
包含目录:代表keil中配置的.h文件路径
库目录: lib文件路径
宏定义:keil中对应宏定义
程序编译
如上图所示,从最左到最右分别为,build编译、rebuild重新编译、烧录、清理,用法和keil就类似
点击构建过后,能够在下方面板栏显示, build successfully意味着变成成功,可以下载
如果之前keil文件种关于烧写的仿真器和接口已经配置好,可以直接flash烧写,成功的话会有如下类似于keil的代码内存地址显示,还有烧写器例如jlink口的连接情况和芯片的复位情况。这些都能正常显示,那么烧写就意味着成功。
更新:编译过程后,keil可以进行删除,但删除keil自然会同时删除ARMCC编译器,那么可以参考压缩包ARMCC里面,提前复制ARMCC编译器防止删除后异常
jlink在线调试
如果程序能够烧写,那么就应该进行下一步,也就是在线的仿真调试
安装好cortex-debug插件后点击F5进入调试界面,但是一般情况下会报错
这是由于运行的launch.json文件没有进行配置,需要配置一下相关调试参数
在运行与调试窗口左侧选择创建launch.json文件
选择生成工作区
选择插件coretx-dug会自动生成一个launch.json文件,但是缺失一些关键信息,需要修改
下图给出已经配置好的launch.json文件进行说明
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceFolder}",
"executable": "./build/Target 1/YH_Power.elf",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"servertype": "jlink",
"device": "GD32F103RE", // 确保这里的设备名称与SEGGER支持的名称匹配
"gdbPath": "C:/SysGCC/arm-eabi/bin/arm-none-eabi-gdb.exe",
"svdFile": "D:/software/keil/pack/GigaDevice/GD32F10x_DFP/2.0.3/SVD/GD32F10x/GD32F10x_HD.svd",
"liveWatch": {
"enabled": true,
"samplesPerSecond": 1
}
}
]
}
关键项
“executable”:编译出的二进制文件,也就是最终烧录到单片机中的,这里是elf文件。根据芯片的不同,可能产生不同的名称和后缀
“request”:可以选launch或attach。launch是指启动调试时同时开始执行程序;attcah是指程序已经在运行了,然后开始调试。
“type”:调试的类型,选cortex-debug,这是我们装的插件。
device": “GD32F103RE” 需要按照你实际调试的芯片填写具体型号,由于使用的就是J-LINK GDB Server,所以必须添加详细
“gdbPath”: “C:/SysGCC/arm-eabi/bin/arm-none-eabi-gdb.exe”,具体你之前安装GNU Arm Embedded Toolchain的地址
svdFile”:svd文件的路径。这是用来查看芯片寄存器参数的,如果你不需要也可以不配置
“liveWatch”: 数据实时刷新时间,最小就是1s
如果配置得当且不报错,那么点击F5能够进入调试界面,如下图所示
具体调试操作与keil类似
左侧变量窗口运行到具体函数时自动显示内部变量
左侧监视窗口可以添加你想查看的变量
断点就是目前添加的所有断点位置,可以在代码左端直接点击增加断点
Cortex live watch窗口列表中可以添加自动刷新的变量,这个想要持续刷新只能是全局变量。
由于编译成功,所以函数的链接都已经完成,右键具体变量或者函数,能够进行跳转和查找
部分常见问题
问题1:点击F5运行时出现问题
需要添加launch.json文件,与之相关联就可以,调试过程中可能会报故。大多数都是launch.json配置不正常产生的。
问题2:部分编译异常
注意系统变量是否正确添加。
问题3:右键函数跳转定义和声明异常
编译存在问题,或者存在相同函数明的文件在你的目录路径里,即使不参与编译仍然影响跳转。
问题4:KEIL删除后ARMV5 编译异常
删除keil后 arm编译器一并删除,需要同时
更改为GCC 编译器
.ld文件为官方gcc例程,而gcc编译工具在安装插件的时候已经安装完成。
并且目录下需要添加makefile文件,具体makefile如何编写需要参考gnu文档。
除此之外,文件中GD32_startup.s启动文件需要更新为GCC的startup启动文件文件
官网下载EmbeddedBuilder
EmbeddedBuilder_v1.3.10.22890\EmbeddedBuilder_v1.3.10.22890\EmbeddedBuilder\plugins\com.gigadevice.templatefwlib.arm.gd32e10x_1.0.0.202404240945\Firmware\gcc_startup 里面有对应GD32E103的startup.s文件,其他类型同类,
Makefile文件的编写有一定难度,可以先不更换编译器。后续此章节会进行更新
更改为stlink+opencd
仿真器更改还是相对简单的
opencd 需要下载,在github或者opencd 官网都可以
下载后,需要在系统变量中添加openocd变量,然后cmd中使用openocd -v
出现以下就认为安装正常了
lanunch.json修改,需要修改
“servertype”: “openocd”,
“configFiles”: [
“interface/stlink.cfg”,
“target/stm32f3x.cfg” // 使用新的配置文件
],
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceFolder}",
"executable": "./build/Target 1/GD32.elf",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"servertype": "openocd",
"device": "GD32F303RC", // 确保这里的设备名称与SEGGER支持的名称匹配
"gdbServerPath": "C:/Path/To/OpenOCD/bin/openocd.exe", // 替换为实际的OpenOCD路径
"configFiles": [
"interface/stlink.cfg",
"target/stm32f3x.cfg" // 使用新的配置文件
],
"liveWatch": {
"enabled": true,
"samplesPerSecond": 1
}
}
]
}
一些tips
调试变量查看
1调试变量后加,h能够16进制显示,默认是10进制显示
2实时调试窗口是CORTEX LIVE WATCH,最快刷新只能是1s了,调试前需要在launch.json增加配置才行。
"liveWatch": {
"enabled": true,
"samplesPerSecond": 1
}
构建器选项配置
选择后能够出现界面,能够选择构建器是否生成hex文件,代码优化orC99模式 等等