makefile与stm32工程皮毛了解

相关概念:

  Makefile的作用:

    告诉make如何编译(compile)和链接(link)程序。编译是将源文件编译成中间代码(linux下为.o文件),链接是指将这些.o文件合成可执行文件。

  Makefile的典型规则语法:

  目标<target> : 先决条件<prerequisites>

  <TAB> 命令<commands>

Makefile主要包含五种东西:

  1. 显示规则:明确指出目标文件即其依赖文件和命令,来生成一个或多个目标文件。
  2. 隐晦规则:一些常用的默认规则,如”%o:%c”把.c文件编译成.o文件,不需要书写出来,make会自动推导。
  3. 变量的定义:表示一串文本字串,用$(XX)调用,调用$则用“$$“。
  4. 文件指示:引用其他的makefile,等。
  5. 注释 : “#”表示注释,使用#则用”\#”。

注意:

  1. 每个命令前必须有一个tab键(或者使用.RECIPEPREFIX = XX 指定)
  2. 一行命令在一个shell中执行,即不同行分别存在于不同进程中。具体操作参考<make命令编程>
  3. 目标不一定是文件,也可能只是一个标签。这时不得不提到伪目标(.PHONY), ,用于执行一些辅助命令。

    如:       .PHONY : clean   

        clean:

                       rm *.o temp

   当我们显示指明这个目标clean时才会执行。

  4.Makefile最终目标,默认为第一个目标(.DEFAULT_GOAL := XX指定一个目标。或者使用all调用多个目标)

  5.变量中还存在一些自动化变量如”$<”表示第一个依赖文件,”$@”表示当前目标,”$^”表示依赖文件的所有文件

以上参照<What is makefile and how dose it work>

若要深入了解建议看<跟我一起学makefile>

对于stm32工程:

(i)源程序

(ii).ld ”链接”:作用是链接.o文件生成elf文件。

修改是MEMORY中RAM和FLASH的配置,如

Stm32c8t6:

RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 20K

FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 63K

(iii)Makefile:

    主要是三项设置:

    1. 编译器设置CFLAGS
    2. arm-none-eabi-objcopy 将.elf文件转化成.bin文件
    3. st-flash write main.bin 0x8000000’烧录

      参考<how to compile and burn the code to stm32 chip on linux ubuntu>

        其余的便是一些优化选项,指定库文件包含路径以及生成静态库,stm32芯片型号容量设置等。

(iv).cfg:openocd.cfg"

(v) .sh"bash脚本 "

以上参考<stm32 primer-stm32 primer lib.php>

猜你喜欢

转载自www.cnblogs.com/ice-creamy/p/9829228.html
今日推荐