zoukankan      html  css  js  c++  java
  • 单片机爬坑记-05-编译环境(完)

    在搞定了 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包中“LibraryStdDriversrc”目录下的文件全部放到工程的“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文件是很恶心人的做法)时,最简单的办法是直接将头文件全部放入“LibraryStdDriverinc”文件夹下,将代码文件全部放入“Library”文件夹下,亦即和工程中的标准库文件放在一起……

    3、STC89C51(STC)

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

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

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

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

    ------printf("仿佛被囚禁的时间不知所措的变迁,仿佛未知的可能也已经被发现,迎着狂风手插口袋路过你走过的路,荒诞无稽的残酷也拦不住我的脚步…… "); printf("找过无数的理由试着包装我的残缺,而主动承认自己的懦弱却永远无法妥协…… ");------
  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/zarlinq/p/10459663.html
Copyright © 2011-2022 走看看