vscode+gcc(vscodegcc编译器)

vscode+gcc(vscodegcc编译器)STM32 单片机 非常强大 大多数教程都是使用 keil 编译器 keil 是收费的而 gcc 是开源免费的 这里介绍一些使用 gcc nbsp vscode nbsp 开发单片机程序的经验 这里不解释 gcc 是什么 第一 环境准备 gcc ARM 开发者 官网 nbsp https developer arm com 我有个习惯 尽量使用免安装版软件 直接解压到软件安装目录中 添加环境变量即可使用 这样即使重装系统也不必重装软件 把 arm none eabi gcc 的 bin



STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc + vscode 开发单片机程序的经验。(这里不解释 gcc 是什么)。

第一:环境准备

gcc

ARM 开发者官网 

https://developer.arm.com/

790094c2-53e1-11ee-a25d-92fbcf53809c.png

79ceb23a-53e1-11ee-a25d-92fbcf53809c.png

7a093572-53e1-11ee-a25d-92fbcf53809c.png

我有个习惯:尽量使用免安装版软件,直接解压到软件安装目录中,添加环境变量即可使用,这样即使重装系统也不必重装软件。

把 arm-none-eabi-gcc 的 bin/ 目录添加到环境变量 Path 中就算安装完成了。打开命令行执行

 

 

 arm-none-eabi-gcc -v

 

 

显示出版本信息就说明 arm-none-eabi-gcc 可以使用了。

7a36e990-53e1-11ee-a25d-92fbcf53809c.png

第二:make

我使用的 make 是从 mingw-w64 中复制出来的。

http://mingw-w64.yaxm.org/doku.php

方便单独下载 make:

https://download.csdn.net/download/_/

下载的 make 工具同样添加到环境变量 Path 中即可使用。

第三:vscode

vscode 仅仅是个文本编辑器,没有它也能开发(txt 写代码,命令行编译)。

https://code.visualstudio.com/#alt-downloads

又是免安装版:

7aa9e512-53e1-11ee-a25d-92fbcf53809c.png

7ad2f2d6-53e1-11ee-a25d-92fbcf53809c.png

软件目录下新建文件夹 data/ 可以使 vscode 完全不使用 C 盘空间,所有的缓存文件都会生成在 data/ 内。

7b2528ee-53e1-11ee-a25d-92fbcf53809c.png

第四:编译链接过程

7b516fa8-53e1-11ee-a25d-92fbcf53809c.png

Makefile 告诉 make 要干点什么,要编译谁,具体怎么编译;

make 生成相应的命令调用各个工具执行动作;

gcc 负责把 c 源文件编译成汇编

as 负责把 编译器生成的汇编文件和秃头程序员手撸的汇编文件都转换成二进制指令,输出到可重定位目标文件 ( *.o );

(gcc 也可以一次完成 编译和汇编的动作, 直接用 .c 文件生成 .o 文件)

.ld 文件是链接脚本, 告诉链接器哪段地址是内存 RAM, 哪段地址是 Flash, 哪些 RAM 分配给了栈, 哪些地址分配给了堆...

链接器把所有 .o 文件组合起来, 静态变量的地址, 函数的地址都会在这里确定, 调用函数的函数名会被替换成函数的地址...最后生成一个 elf 文件;

虽然 elf 是可执行文件, 但裸机是没法解析 elf 文件的, 所以需要 objcopy 导出纯二进制代码, 这个二进制文件就可以直接烧录到单片机运行了, 这一步也可以输出 hex 文件;

如果有需要还可以用 objdump 反汇编二进制文件, 也可以反汇编 elf 文件, 反汇编 .o 文件, 帮助调试.

创建空工程

7b7f982e-53e1-11ee-a25d-92fbcf53809c.png

一个 ".vscode" 文件夹装一些配置,"boot" 装启动单片机的汇编文件,"cmsis" 装官方提供的源文件,"inc" 装头文件,"src" 装源文件,"output" 装输出文件,再来一个 makefile 一个链接脚本就完成了。完全没有多余的东西(txt 写代码,命令行编译的话可以删掉".vscode")。

7ba44336-53e1-11ee-a25d-92fbcf53809c.png

在 makefile 所在的目录执行 "make" 就编译好了。

https://github.com/bfuxd/stm32f103EmptyProject

这是完整工程(去掉了空文件夹,去掉了输出目录),其中的 makefile 支持 windows 和 linux

https://github.com/bfuxd/stm32f1Template

是模板工程,添加了一些基本功能。

J-Link烧录和调试

.vscode/launch.json 里写入

 

 

 { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid= "version": "0.2.0", "configurations": [ { "name": "Cortex Debug", "type": "cortex-debug", "cwd": "${workspaceRoot}", "executable": "${workspaceFolder}output emplate.elf", "request": "launch", "servertype": "jlink", "device": "STM32F103ZE", "interface": "swd", "preLaunchTask": "Compile" } ], }

 

 

.vscode/tasks.json 里写入

 

 

 { "version": "2.0.0", //每次执行都不启动一个新的控制台 "presentation": { "reveal": "always", "panel": "shared", //"new", "echo": true }, //设置环境变量 "options": { "env": { //"Path": "%Path%;D:ProgramFilesMinGW64bin", "LOCAL_SRC_HOME": "${workspaceRoot}" } }, //任务列表 "tasks": [ { "label": "Compile", "command": "make", "args": [], "group": { "kind": "build", "isDefault": true } } ] }

 

 

安装 J-Link 驱动后,把 J-Link 添加到环境变量 Path 中, F5 就能仿真了。

7bd38286-53e1-11ee-a25d-92fbcf53809c.png

还可以监视指定内存、变量、寄存器,反汇编指定函数 ……

仿真时 " Ctrl + Shift + P " 输入 Cortex-debug: Show disassembly 回车输入函数名, 即可在汇编中执行指定函数,  " Ctrl + Shift + P " 输入 Cortex-debug: View Memory 回车输入起始地址和数据长度, 即可查看内存中指定区域的数据.

彻底告别 keil。

编辑:黄飞

 

今天的文章 vscode+gcc(vscodegcc编译器)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-08-25 16:51
下一篇 2025-03-18 11:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/54262.html