本帖最后由 kai迪皮 于 2023-9-22 16:17 编辑
#申请原创# @21小跑堂
1 背景
拿到APM32F411的TINY板卡后,在打开官方提供的SDK发现,他们提供的MDK、IAR、Eclipse的工程示例。非常不错,但是我想着有一些场景下在没有安装IDE的情况下怎么编译程序呢?
通过学习,我发现可以使用开源工具链GCC+Makefile编译程序。经过分析发现极海的Eclipse工程就是基于GCC工具链进行编译的,这样看来我只需要搭建GCC+Makefile的本地编译环境就可以在不使用IDE的情况下完成对APM32F411的程序编译了。
完成程序的编译后,我们需要对程序进行下载,由于APM32F411的TINY板卡的板载仿真器是基于CMSIS-DAP而来的,我们可以轻易的就想到使用ARM提供的PyOCD进行程序下载。
整体的程序编译及下载的步骤理论存在,那么我们实践开始。
2 工具链准备
在实际进行代码的搬运前,我们需要对我们所需要的环境进行搭建,我这里使用的是window的环境,注意是下载相关的工具链,然后把工具链的路径添加到我们的系统变量中,从而使得直接调用CMD命令就能使用我们的目标工具链程序。
2.1 make工具链
make工具链是我们本次编译脚本的基础工具,make工具也是多种多样的,我这里选择,这个是它的下载页面:https://github.com/xpack-dev-tools/windows-build-tools-xpack/releases
这里是它的安装介绍:https://xpack.github.io/dev-tools/windows-build-tools/install/。
我这里就简单描述一下:
1. 先下载我们需要的xPack Windows Build Tools版本,比如说我选4.3.0的。
2. 下载下来是一个压缩包,我们把它解压到一个合适的路径,比如我把它放在C盘。
3. 把make.exe的路径添加到我们的系统环境变量,比如我的是:C:\xpack-windows-build-tools-4.3.0-1\bin
4. 我们在cmd命令窗口输入“make -v”检查是否make程序已经正常添加入我们的系统变量中。
2.2 GCC工具链
GCC工具,因为APM32F411是基于Arm® Cortex®-M4F的芯片,所以我们要选择的是GNU Arm Embedded Toolchain,
这个是工具链的官网:https://developer.arm.com/downloads/-/gnu-rm,也是选择一个喜欢的版本进行下载,我这里选的是10 2021.10的版本。
需要注意的是,它提供安装包和压缩包,使用压缩包需要自己配置系统环境变量(可以参考make的工具链配置,它的路径是(我的):C:\GNU Arm Embedded Toolchain\10 2021.10\bin,里面有arm-none-eabi-gcc.exe那个就是),如果是安装包需要留意勾选“配置至系统变量”的选项。
同样的,我们也可以在CMD查看支持,仅需要输入以下命令“arm-none-eabi-gcc -v”,若有打印arm-none-eabi-gcc版本信息即可。
这里也给大家看看系统环境变量的设置界面(直接使用WIN+Q 按键搜索“环境变量”即可)。
2.3 PyOCD 工具链
PyOCD的官网:https://link.zhihu.com/?target=https%3A//github.com/pyocd/pyOCD,它提供了我们使用命令行的形式配合CMSIS-DAP下载程序至Arm® Cortex®-M的芯片。
PyOCD这个工具链的安装是基于Python上的,我们首先需要安装Python环境(可以直接在它的官网https://www.python.org/downloads/windows/下载安装),有了Python环境后我们直接在CMD上输入“pip install -i https://pypi.tuna.tsinghua.edu.cn/simpl pyocd”命令等待安装成功。
安装成功后我们可以在CMD上输入“pyocd list”我们可以看到当前系统连接的仿真器。
3 源码选择
由于我们使用的是GCC的工具链环境,对于内核的源码我们需要相应的版本。即链接脚本文件以及启动文件都得选择GCC版本的。
为了方便我们的后续程序编写,我这里新建一个文件夹,把我们需要的源码往里面装进去。
1. 板载文件及库文件必不可少。将“Boards”、“Libraries”复制到我们的新文件夹中。
2. 复制APM32F4xx_SDK_V1.4\APM32F4xx_SDK_V1.4\Examples\SysTick下的文件夹至我们的新文件夹中。
然后把里面的“Project”给删除,我们不需要这段IDE工程。
3. 复制链接脚本文件以及启动文件。把APM32F4xx_SDK_V1.4\Libraries\Device\Geehy\APM32F4xx\Source\gcc里面的“APM32F4xxxE_FLASH.ld”和“startup_apm32f411.S”复制到我们的新文件夹中。
至此,我们的源码准备完毕。
4 编写makefile脚本
由于我们是使用makefile来做IDE的角色,我们现在回忆一下我们IDE需要哪些基础的设置才能完成程序的编译?对是的,有工程名、源码包含、头文件包含、宏定义、输出目录、输出内容、编译优化等级等内容需要一一设置。
我们新建一个txt文件,把它名字改为“Makefile”,同时删除后缀。然后我们一步步的将以下内容写入文件。
4.1 工程名设置
首先是工程名设置,我这里设置为SysTick_TimeBase。
- ######################################
- # target
- ######################################
- TARGET = SysTick_TimeBase
4.2 编译设置
这里设置编译是否是debug标签和优化等级。
|