首先写在开头,博主写这篇文章的目的是为了方便更多新人使用交叉编译器,网上的各种教程要么内容不完善,要么就是给的文件太老了,导致博主在调试这个环境时出了很多问题,最终也是踩了一堆坑后终于调试成功,故写这篇文章若有问题可在下方评论区询问。
我这里先给出接下来要用到的文件,这个文件里面是编译好的openocd+GDB工具链,可能过几年就版本过低了,所以也会给出这两的github网址
链接:https://pan.baidu.com/s/1slODCKwLLAiGMHCoSRamiA?pwd=ssss
提取码:ssss
GDB server:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
Openocd:https://github.com/xpack-dev-tools/openocd-xpack/releases
- 废话少说,接下来我就开始介绍环境组成
- 首先openocd本身是某个人在2005年建立的开源项目,其目的在于建立一个开源的硬件调试环境,而openocd本身在经过这么多年的发展其内部已经有daplink,stlink等调试方式,同时openocd本身是一个未被编译过的程序,我们在官网下载的就是openocd源程序(官网直接搜英文就行),这里编者给出的网盘资料是已经编译好的软件,若有兴趣去深入了解openocd本身可以从零开始编译(但是网上教程很少)。
- 而GDB则是一个调试+编译软件,这个东西是重点,因为网上有很多误导的文章,真的很x蛋,编者就是在这里踩了很多的坑,首先我们要明确GDB server既有调试又有编译功能,网络上给的文章都是要去官网直接下载,但是如果直接进官网往下翻下载这个gcc-arm-none-eabi-10.3-2021.10-win32.exe文件,就会导致GDB找不到缓存索引(这个地方具体是什么问题编者没有细究,但是只要是下的这个zip就会有这个问题),编者的工具链则是在这个网址下的(https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads)
- 说完主要的两个软件,接下来我就详细介绍怎么建立整体的vscode编译环境
- 首先是正常下载vscode,这地方我就不细说了,其次就是和网上差不多的进vscode的扩展下载cortex-debug和EIDE插件,其中那个debug-tracker-VScode也下着。
- 其次就是将编者给你们的网盘资源解压,放在哪都无所谓,记住他们的文件路径就行,因为后期要调用launch文件要用到,解压后就是正常配置环境变量,这个环境变量是系统环境变量,通知电脑有这么一个东西等下要调用,最好也把那个system32那个环境变量也加上。
- 之后这两个软件先不要用了,打开vscode配置EIDE插件,这个插件主要用于编译我们的项目文件,主要用这几个路径如下图,同时下面还有一个编译完成后将.axf转换成elf文件的勾勾也打上。
- 再来就是在EIDE中安装工具链,安装EIDE后,vscode边栏会多一个选项就是EIDE的工作界面,这里编者已经导入了项目,理论上来说EIDE本身在安装完这些插件之后会自动调用他们,但是不知道怎么的还是要用户自己单独下载openocd和GDB,主要就是这几个工具,我也稍微介绍一下
- cppcheck似乎是一个语法检验插件,本身对编译过程没得影响
- GNU toolchain则是编译工具链,
- openocd这就是前面所说的调试环境,用于提供板子调试情况下的寄存器参数等等
- cube programer则是stm32官方的下载软件,用于电脑通过stlink给板子下载程序(这里后面会有一个问题)
- 然后就是选择芯片支持包,这个支持包一般在keil安装路径的.download文件夹中找到.pack文件
- 选中对应pack后就选对应的芯片,这里就不展开了
-
- 配置构建配置,这个里面主要是scatter file路径,要去查看keil的魔法棒的linker中有没有使用scatter file,没有就不用管
- 再来就是ram/flash布局,这个对着魔法棒的target写就行
- 构建器选项就是相当于keil的魔法棒,在里面将对应需要的功能打勾就行
- 进行完这些就已经搞完一半了,接下来就是重点了,配置launch文件和cortex-debug插件,主要是用于启动openocd和GDB server软件
- cortex-debug 插件就是arm调试器,本身只要配置好前面编者网盘里的openocd和GDB安装路径就行,这里具体如下
- 进入扩展右键cortex-debug,进入设置后随便点一个“进入setting.json编辑”就会进入cortex-debug的setting文件中然后如下
- cortex-debug 插件就是arm调试器,本身只要配置好前面编者网盘里的openocd和GDB安装路径就行,这里具体如下
-
-
- 首先是我们将光标移到项目上右键,会出现调试器配置模板,移上去会看到openocd的选项点击就行,这是EIDE官方给的例程(真的感谢官方大大)
-
-
- 点击之后应该跳转并出现如下的launch界面,没出现也没事,可以按照这个配置其中有几个比较重要我列一下
- type:选定调试模式
- servertype:选定调试工具
- executable:可执行文件的路径(可以相对路径,也可以绝对路径),反正就是elf文件,如果上面在配置EIDE时,没有勾选axf转换elf就填axf的文件地址也没问题
- configfile:这个是用于openocd的调试依赖应该,也必须加上,这里编者用的stm32f103c8t6,如果f4系列就选f4的cfg(这个开发芯片的cfg文件在openocd的\openocd\scripts\target中,这里我是直接用的网盘中的文件夹的位置),stlink的cfg文件就在scripts文件夹下的interface文件中
- svdfile:则在对应芯片依赖包中的SVD文件夹里
- 点击之后应该跳转并出现如下的launch界面,没出现也没事,可以按照这个配置其中有几个比较重要我列一下
- 如上配置完之后理论上就能使用vscode进行编译和调试了,编译选项则在EIDE工作界面的项目上
- 编译后则可以移步vscode旁边的虫虫身上(也就是编译工作界面)
-
- 如果一步一步来并且全部文件保存后,就在下图所示位置会有对应name的调试选项,选中后点击旁边绿色三角形理论上就会进入调试,这里多等一下就会在屏幕上多一行调试选项
那么到这里安装过程就完毕了,接下来就主要讲一下踩坑的地方
- 首先就是那个该死的gdb server,我估计你看这篇文章就是为了解决他的问题,那么我来专项解决一下
- 首先就是启动调试时,终端中最上面提示“gdb server找不到缓存索引”这里是我翻译之后的报错,你有没有遇到这个问题看启动终端后是不是顶部报了这个错或者直接去GDB文件夹中启动"G:\GDB\13.2 Rel1\bin\arm-none-eabi-gdb.exe"这个软件,如果这个软件启动顶部有个报错,极大可能就是这个原因
- 这个问题来自于你下载的gdb server出了问题,你下的版本没有编译或者调试功能,导致功能不齐全,这个就可以下载编者文章开头分享的文件,里面的GDB是功能齐全的或者去GitHub下载也行
- 其次就是在点击调试后,vscode的终端中就是红色的报错,最后提示“gdb server异常退出”,翻译过来就是这样,一般出现这个问题就是GDB安装路径里面出现了中文,而这个中文真的非常x蛋,因为EIDE安装工具链时会默认安装到c盘下的users/用户名/.eide/tools/中,一般就是c盘里的users下的用户名文件夹是中文导致gdb异常退出,这里就要修改这个用户名文件夹为全英文
- 这里我就给一个大概的解决办法,我就是按照这个来修改c盘用户名文件夹的
- 首先就是启动调试时,终端中最上面提示“gdb server找不到缓存索引”这里是我翻译之后的报错,你有没有遇到这个问题看启动终端后是不是顶部报了这个错或者直接去GDB文件夹中启动"G:\GDB\13.2 Rel1\bin\arm-none-eabi-gdb.exe"这个软件,如果这个软件启动顶部有个报错,极大可能就是这个原因