• 单片机爬坑记-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("找过无数的理由试着包装我的残缺,而主动承认自己的懦弱却永远无法妥协…… ");------
  • 相关阅读:
    mysql解决插入中文数据显示??
    js实现表单联动
    CSS实现圆角,圆角阴影
    图片预加载实例
    响应式开发学习笔记
    关于viewport
    HTML5 中的结构元素
    linux- deppin 下配置xampp的方法(全)
    # XAMPP 配置密码大全修改默认密码
    Jquery 最大高度
  • 原文地址:https://www.cnblogs.com/zarlinq/p/10459663.html
Copyright © 2020-2023  润新知