单片机爬坑记-05-编译环境(完)

Posted on 2019-03-02 08:29  Zarlinq  阅读(353)  评论(0编辑  收藏  举报

在搞定了 VSCode + Makefile 玩弄 TivaWare C 库的环境之后,我们很容易想到,是否能以同样的方式玩弄其他单片机库。基本套路是,确保系统环境能够直接通过命令行调用arm-none-eabi-gcc进行编译,然后通过Makefile来组织并完成编译。

目标对象:STM32全系列(ST)、NuTiny-SDK-M051(Nuvoton)、STC89C51(STC)。

 

1、STM32全系列(ST)

ST官方出了一款极为方便且跨平台的工具叫做STM32CubeMX,这很好,不需要再去下载各种BSP包慢慢裁剪、分割、修改,利用STM32CubeMX可以直接生成基于Makefile的工程,算是上手难度最低的官方库玩弄方式。

目前STM32CubeMX最新版本5.1.0。

首先,当然是用STM32CubeMX生成一个STM32工程代码,在STM32CubeMX中将硬件、时钟等等配置好之后,在Project Manager选项卡中,有“Toolchain / IDE”可以选择,看到可选项中有Makefile,就选它(此时“Toolchain Folder Location”不可更改,暂时不管),然后生成项目代码。

然后,打开项目文件夹,可以看到一个大大的Makefile,发现目标是让人激动的,按照一般操作,先打开Makefile文件检查一下编译链工具设置是否有问题,STM32CubeMX生成的Makefile依然是直接调用arm-none-eabi-gcc,环境同样没问题,很好,更激动了一点……但是这时候如果直接在命令行下make,结果可能是残酷的,在Windows 7 x64系统下,make会得到一个关于hex文件地址的错误,据称这是因为GNU工具链有个小bug,而通过检查Makefile文件的内容发现其中有

all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/%.hex $(BUILD_DIR)/$(TARGET).bin

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
     $(HEX) $< $@

这时候我们需要知道hex文件是否必须的,打开STC32的烧写软件可以看到能够接受的文件包括hex和bin,所以bin文件完全可以替代hex文件进行烧写,那接下来就好办,删除“all”所在行的$(BUILD_DIR)/%.hex,再将其余两行用#注释掉,保存,再make一下,OK!

针对开发过程中自行添加的库,头文件目录可在C_INCLUDES下方添加,C语言或汇编语言的代码文件可放在Src目录(main.c所在目录)下。

 

2、NuTiny-SDK-M051(Nuvoton)

Nuvoton官网下载的BSP包里是没有Makefile的,但是好在Nuvoton新出了一个魔改Eclipse的IDE,叫做NuEclipse,而Eclipse在编译时是可以生成Makefile的,所以我们就需要用NuEclipse生成Makefile。

喜剧的是,在Nuvoton推出的所有官方工具中,这魔改Eclipse版的NuEclipse,反倒是兼容性最好的,安装过程一路顺畅。

用NuEclipse新建一个工程(选择了芯片还得自己填容量,差评!),进到工程目录下可以发现工程目录没有包含官方库“StdDriver”中所有文件(虽然官方库文件出奇的少),而其他文件除了路径稍有不同之外基本和BSP中没什么区别,所以将BSP包中“Library\StdDriver\src”目录下的文件全部放到工程的“Library”目录下,在NuEclipse中对Library目录右键执行以下刷新“Refresh”操作,然后Build All(快捷键Ctrl + B),此时就可以看到在工程目录下的“Debug”文件夹中有了makefile,通过对该makefile分析可以看到实质上这里是引入了相对目录,但这个makefile文件却又不在工程根目录下,所以我们需要再新增一个Makefile来调用执行这个“Debug”文件夹中的makefile。

“Debug”文件夹中的makefile文件复制到工程根目录下,用文本编辑器打开,先将内容清空,然后增加如下内容:

DIRS = Debug

all::
     @for i in ${DIRS};                  \
      do                                 \
          if [ -f $${i}/makefile ];      \
          then                           \
              make -C $${i} || exit $$?; \
          fi;                            \
      done

保存后就可以在工程根目录下直接make完成编译。

当需要更改(新增)工程的头文件和代码文件(一般都是需要的,将代码全部写入至main.c文件是很恶心人的做法)时,最简单的办法是直接将头文件全部放入“Library\StdDriver\inc”文件夹下,将代码文件全部放入“Library”文件夹下,亦即和工程中的标准库文件放在一起……

 

3、STC89C51(STC)

参考项目:https://github.com/haozewu/C51

并不推荐用VSCode对51单片机进行开发,也未实际测试。

--------------------------------------------------

后续有空再看MSP430G2和FRDM-KL02Z的库函数玩弄方法,此部分待续……