在编译单片机代码时,我们经常使用IDE来管理代码,包括编译和链接生成应用程序,但有时候我们只有编译器并没有IDE,需要我们自己来搭建单片机的编译环境,即自己搭建makefile文件管理系统,其实IDE也是通过makefile来管理代码的编译的,只是它隐藏了makefile的功能。在Windows系统下搭建自己的单片机的编译环境,其步骤一般如下所示:
- 安装Windows版本make等编译代码的命令程序
- 安装单片机版本的编译器工具
- 编写makefile文件
- 编写bat脚本
- 调试程序
下面将简单介绍各步骤。
1、安装Windows版本make等编译代码的命令程序
为什么要安装Windows版本make等编译代码的命令程序呢?因为我们采用了makefile文件来管理代码的编译,makefile文件包含了如何编译工程代码的信息其本身并不是应用程序,其需要 make命令程序来解析并执行。一般来说Windows版本make常用工具有2种,一种是GnuWin32,另一种是Cygwin,读者可以选择其中一种来安装,其安装过程就不在此介绍了,网上有一堆文章了。
2、安装单片机版本的编译器工具
编译器工具的作用即将代码翻译成机器码,对不同架构的处理器和单片机而言,其机器码一般都不一样,因此需要安装相应版本的编译器工具。编译器工具一般被make命令调用来将代码编译成机器码。本文章将安装NXP MPC57XX的S32,该软件包含了Cygwin和编译器工具。
3、编写makefile文件
Makefile文件用于管理和组织工程代码的编译和链接,其有点像脚本文件,其有独立的文件包含、变量定义、内置命令、规则定义等,GNU官方make参考手册(https://www.gnu.org/software/make/manual/) 里面有详细介绍,当然里面都是全英文的,建议读者先参考《跟我一起写Makefile》陈皓 这本书,这样能对makefile语法较全面的了解。笔者将在下一篇文章中简单介绍。
4、编写bat脚本
在windows系统下安装完make等命令工具后,我们需要编写bat脚本来设置一些环境变量及调用make等命令程序来自动完成工程代码的编译。下面是笔者常用的bat脚本代码:
::自动编译工程代码的脚本 作者:卢进铭
::关闭脚本运行时 命令的提示
@echo off
::设置MAKE_PATH为make等命令的路径
SET MAKE_PATH=C:/NXP/S32DS_Power_v2017.R1/utils/msys32/usr/bin
::往Path环境变量添加 make等命令及编译器工具的路径
SET Path=%Path%;%MAKE_PATH%;C:/NXP/S32DS_Power_v2017.R1/Cross_Tools/powerpc-eabivle-4_9/bin
::SET MAKE_PATH=C:/GnuWin32/bin
::调用make clean 来清除上一次编译的结果来重新开始代码的编译
CALL %MAKE_PATH%/make.exe clean
::删除上一次编译的调试信息
CALL %MAKE_PATH%/rm.exe build.log
::调用make all命令来开始代码的编译,-j表示使用多少个处理器内核来编译代码,NUMBER_OF_PROCESSORS为处理器内核的个数
::2>&1 | tee.exe -a build.log 表示将make的输出信息放到build.log文件中,这样我们就能查看每一次代码编译的结果和错误信息
CALL %MAKE_PATH%/make.exe all -j %NUMBER_OF_PROCESSORS% 2>&1 | tee.exe -a build.log
::暂停脚本的运行,提示脚本运行完成
Pause
其中
:: 是注释标志,用于解说代码或屏蔽代码的运行
SET 用于新建或设置环境的值,我们一般使用该命令将make等命令及编译器工具的路径添加到Windows本身自带的Path环境变量中,这样当bat脚本就能从Path中搜索到该命令,而不是报错说找不到该命令。
%环境变量% 用于取环境变量的值
CALL 用于调用程序,比如启动make.exe程序
5、调试程序
通过make将生成带调试信息的elf文件和不带调试文件的S19文件,elf文件可以通过被iSYSTEM winIDEA或S32DS或其它工具 烧写进单片机程序并设置断点观察程序运行情况,S19可以通过自己编写的烧录工具烧写进单片机中。