# 1.当前教程所需工具和掌握程度
(1.vscode使用了几周,只是作为程序代码编辑器使用,只装了C/C++代码编辑插件,和一个ReUI主题插件,感觉完成vscode+arm-gcc组合编译工作,得了解vscode的外部工具调用方式,即.vscode/launch.json、tasks.json命令配置,(c_cpp_properties.json只是C/C++编辑插件相关)。它俩就是完成自动化的脚本执行重点了。
(2.gcc-arm-none-eabi是被调用的外部工具,是ARM官方提供的ARM架构编译工具链,暂时只用到了其中一个工具arm-none-eabi-gcc.exe,用以编译链接程序源码。实际编译有复杂层次的工程程序代码时,是通过Makefile进行组织的,make工具通过Makefile文件来识别和调用arm-none-eabi-gcc.exe对整个工程进行精细编译链接和管理。
(3.make工具是另一个被调用的外部工具,由GNU提供,有两种方式使用,一是通过mgwin32跨平台的linux工具集软件(好像仍然需要单独下载make工具,只提供操作环境),另一种是直接使用make for windows的make工具(我是用的这的,因为我只需要make不需要其他一堆工具)。由于make基本是直接调用Makefile文件执行的,所以本身不难,难点在于Makefile理解和使用。
# 2.三个工具下载网址
(1.[vscode](Visual Studio Code - Code Editing. Redefined)
(2.[gcc-arm-none-eabi](GNU Toolchain | GNU Arm Embedded Toolchain – Arm Developer)
(3.[make](GNU make for Windows (equation.com))
(4.vscode直接解压就可以使用,我把启动程序添加到开始磁贴栏里用的。gcc-arm-none-eabi和make也是直接解压到软件盘目录下(我都下载的压缩包文件),不过这两个需要添加启动程序文件所在路径的环境变量(用户环境变量即可),这样才可以全局启动。
可以在win终端窗口里用命令启动测试下是否全局可以启动使用,用 arm-none-eabi-gcc -v 和 make -v测试下,能正常找到和输出软件版本信息说明可以使用。
# 3.编译工程需要的文件
(1.tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"dependsOn": "clean", // 依赖项,表示在执行 build 前会首先自动执行 clean ,然后才执行build。
"label": "build", // build任务标签,将出现在vscode的task栏里
"type": "shell",
"command": "make",
"args": [
//"--file=STM32F4xx_StdPeriph_Templates/GNU-ARM/Makefile",
"-j4" // make 工具参数,作用暂时未知,另外还有 -j -j8等。
],
"group": "build", // 作用暂时未知。
"problemMatcher": "$gcc"
},
{
"label": "clean", // clean任务标签,将出现在vscode的task栏里
"type": "shell", // 默认类型
"command": "make", // 使用工程编译工具是make,它通过Makefile调用arm-gcc进行底层代码编译链接。
"args": [
//"--file=STM32F4xx_StdPeriph_Templates/GNU-ARM/Makefile", // 这是一开始想作为一个独立工程文件夹来使用的,后续会尝试使用
"clean" // 自定义的clean标签,make工具会在Makefile内查找这个自定义标签并执行其代表的实际make指令或者powershell指令。
],
"problemMatcher": "$gcc" // 无影响参数
},
]
}
a.这里表示有坑。vscode貌似提供两种任务文件,task.json 和 tasks.json 文件,我理解的是两者分别可以创建单任务和多任务,我按照一篇教程写了单任务的,但是实际是创建了多个任务,貌似因为这个原因导致不能正常打开执行,后续我改为tasks.json使用的。
b.这里表示也有坑。vscode新建*.json文件有两种,一种普通json文件,另一种是json with comments命令脚本文件,这里需要设为json with comments文件作为命令脚本使用,否则不会被识别和执行(我不保证确实有这个区别,记得有一篇博文也提到了这个问题,我按照那个要求修改的)
c.还有个坑。整个工程编译过程需要先清理掉旧的编译中间文件,才能进行新的编译,否则一直卡在开头的几个源文件处报错,提示无法找到XXXXX.c文件,依赖于XXXX.elf文件。由于是在Makefile中,后面M