通过gnu工具链编译、构建自己的stm32程序

[复制链接]
 楼主| keer_zu 发表于 2021-6-22 11:24 | 显示全部楼层 |阅读模式

编写makefile:

  1. #工程名称
  2. TARGET                         = OSAL_example

  3. #设置编译器
  4. CC                             = arm-none-eabi-gcc
  5. #CC                             = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-gcc
  6. OBJCOPY                        = arm-none-eabi-objcopy
  7. #OBJCOPY                        = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-objcopy
  8. ARMSIZE                        = arm-none-eabi-size

  9. #获取当前工作目录
  10. TOP=.

  11. #设置源文件后缀,c或cpp
  12. EXT                                = c

  13. #设置自定义源文件目录
  14. # APP_DIR                        = $(TOP)/APP
  15. HARD_DIR                = $(TOP)/HARDWARE
  16. PORT_STM32F4_DIR                = $(TOP)/LWIP/port
  17. SYS_DIR = $(TOP)/SYSTEM
  18. FREERTOS_DIR = $(TOP)/FreeRTOS

  19. #设置源文件搜索路径
  20. VPATH                        += $(TOP)/Cpu/Core
  21. VPATH                        += $(TOP)/firmware
  22. VPATH                        += $(TOP)/FreeRTOS
  23. VPATH                        += $(FREERTOS_DIR)/portable/RVDS/ARM_CM4_MPU
  24. VPATH                        += $(TOP)/FWLIB/src
  25. VPATH                        += $(TOP)/IAP:$(TOP)/LWIP:$(TOP)/HARDWARE
  26. VPATH                        += $(HARD_DIR)/ADC:$(HARD_DIR)/CAN:$(HARD_DIR)/DIN:$(HARD_DIR)/DMA:$(HARD_DIR)/DOUT:$(HARD_DIR)/DS1302:$(HARD_DIR)/FLASH:$(HARD_DIR)/GPRS:$(HARD_DIR)/KEY:$(HARD_DIR)/TIMER:$(HARD_DIR)/USART2:$(HARD_DIR)/WDG
  27. VPATH                        += $(TOP)/LWIP/app:$(TOP)/LWIP/cfg:$(TOP)/LWIP/drv
  28. VPATH                        += $(PORT_STM32F4_DIR)/FreeRTOS:$(PORT_STM32F4_DIR)/Standalone
  29. VPATH                        += $(SYS_DIR)/delay:$(SYS_DIR)/sys:$(SYS_DIR)/usart
  30. VPATH                        += $(TOP)/Task
  31. VPATH                        += $(TOP)/USER
  32. VPATH                        += $(TOP)/Main

  33. #设置中间目标文件目录
  34. OBJ_DIR                        = $(TOP)/OBJ

  35. #设定头文件包含目录
  36. INC_FLAGS                += -I $(TOP)/FreeRTOS/include
  37. INC_FLAGS                 += -I $(TOP)/Cpu/Core
  38. INC_FLAGS                 += -I $(TOP)/firmware
  39. INC_FLAGS                += -I $(FREERTOS_DIR)/include
  40. INC_FLAGS                += -I $(FREERTOS_DIR)/RVDS/ARM_CM4_MPU
  41. INC_FLAGS                 += -I $(TOP)/FWLIB/inc
  42. INC_FLAGS                 += -I $(HARD_DIR)
  43. INC_FLAGS                += -I $(HARD_DIR)/ADC
  44. INC_FLAGS                += -I $(HARD_DIR)/CAN
  45. INC_FLAGS                += -I $(HARD_DIR)/DIN
  46. INC_FLAGS                += -I $(HARD_DIR)/DMA
  47. INC_FLAGS                += -I $(HARD_DIR)/DOUT
  48. INC_FLAGS                += -I $(HARD_DIR)/DS1302
  49. INC_FLAGS                += -I $(HARD_DIR)/FLASH
  50. INC_FLAGS                += -I $(HARD_DIR)/GPRS
  51. INC_FLAGS                += -I $(HARD_DIR)/KEY
  52. INC_FLAGS                += -I $(HARD_DIR)/TIMER
  53. INC_FLAGS                += -I $(HARD_DIR)/USART2
  54. INC_FLAGS                += -I $(HARD_DIR)/WDG
  55. INC_FLAGS                 += -I $(TOP)/IAP
  56. INC_FLAGS                 += -I $(TOP)/LWIP/app
  57. INC_FLAGS                += -I $(TOP)/LWIP/cfg$(TOP)/LWIP/drv
  58. INC_FLAGS                += -I $(TOP)/LWIP
  59. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/FreeRTOS
  60. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/Standalone
  61. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/arch
  62. INC_FLAGS                 += -I $(TOP)/Main
  63. INC_FLAGS                 += -I $(SYS_DIR)/delay
  64. INC_FLAGS                += -I $(SYS_DIR)/sys
  65. INC_FLAGS                += -I $(SYS_DIR)/usart
  66. INC_FLAGS                += -I $(TOP)/Task
  67. INC_FLAGS                += -I $(TOP)/USER


  68. #编译选项
  69. CFLAGS                         += -W -Wall -g -mcpu=cortex-m3 -mthumb -O2 -std=gnu11
  70. CFLAGS                         += -D STM32F10X_HD -D USE_STDPERIPH_DRIVER

  71. #链接选项
  72. LFLAGS                         += -mthumb -mcpu=cortex-m3 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs
  73. LFLAGS                         += -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=Project.map -Wl,--gc-sections
  74. LFLAGS                         += -Wl,--defsym=malloc_getpagesize_P=0x80

  75. #链接启动文件和链接脚本
  76. LFLAGS                        += $(TOP)/CORE/startup_stm32f10x_hd.s
  77. LFLAGS                        += -T $(TOP)/CORE/stm32_flash.ld

  78. #固定源文件添加
  79. C_SRC                        += $(shell find $(TOP)/Cpu/Core  -name '*.$(EXT)')
  80. C_SRC                        += $(shell find $(TOP)/firmware  -name '*.$(EXT)')
  81. C_SRC                        += $(shell find $(TOP)/FreeRTOS -maxdepth 1 -name  '*.$(EXT)')
  82. C_SRC                        += $(shell find $(FREERTOS_DIR)/portable/RVDS/ARM_CM4_MPU  -name '*.$(EXT)')
  83. C_SRC                        += $(shell find $(TOP)/FWLIB/src  -name '*.$(EXT)')
  84. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  85. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  86. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  87. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  88. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  89. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  90. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  91. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  92. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  93. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  94. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  95. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  96. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')

  97. C_SRC                        += $(FREERTOS_DIR)/MemMang/heap_4.c

  98. #中间目标文件
  99. #C_OBJ                        += $(C_SRC:%.$(EXT)=%.o)
  100. C_SRC_NODIR                = $(notdir $(C_SRC))
  101. C_OBJ                         = $(patsubst %.$(EXT), $(OBJ_DIR)/%.o,$(C_SRC_NODIR))

  102. #依赖文件
  103. C_DEP                        = $(patsubst %.$(EXT), $(OBJ_DIR)/%.d,$(C_SRC_NODIR))

  104. .PHONY: all clean rebuild upload test ctags



  105. all:$(C_OBJ)
  106.         [url=home.php?mod=space&uid=3148]@echo[/url] "linking object to $(TARGET).elf"
  107.         @$(CC) $(C_OBJ) -o $(TARGET).elf $(LFLAGS)
  108.         @$(ARMSIZE) $(TARGET).elf
  109.         @echo "create $(TARGET).hex from $(TARGET).elf"
  110.         @$(OBJCOPY) $(TARGET).elf $(TARGET).hex -Oihex
  111.         @$(ARMSIZE) $(TARGET).hex
  112. #$(OBJCOPY) $(TARGET).elf  $(TARGET).bin -Obinary

  113. #静态模式
  114. #$(C_OBJ):%.o:%.$(EXT)
  115. #        $(CC) -c $(CFLAGS) -o $[url=home.php?mod=space&uid=72445]@[/url] $<

  116. $(OBJ_DIR)/%.o:%.$(EXT)
  117.         @mkdir -p OBJ
  118.         @echo "building $<"
  119.         @$(CC) -c $(CFLAGS) $(INC_FLAGS) -o $@ $<

  120. -include $(C_DEP)
  121. $(OBJ_DIR)/%.d:%.$(EXT)
  122.         @mkdir -p OBJ
  123.         @echo "making $@"

  124.         [url=home.php?mod=space&uid=126030]@set[/url] -e;rm -f $@;$(CC) -MM $(CFLAGS) $(INC_FLAGS) $< > $@.$$;sed 's,\($*\)\.o[ :]*,$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d:,g' < $@.$$ > $@;rm -f $@.$$

  125. clean:
  126.         -rm -f $(OBJ_DIR)/*
  127.         -rm -f $(shell find ./ -name '*.map')
  128.         -rm -f $(shell find ./ -name '*.elf')
  129.         -rm -f $(shell find ./ -name '*.bin')
  130.         -rm -f $(shell find ./ -name '*.hex')

  131. rebuild: clean all

  132. test:
  133.         @echo "Test !"
  134.         @echo "cflags:$(CFLAGS) ========= inc flags:$(INC_FLAGS)"

  135. ctags:
  136.         @ctags -R *

  137. upload:
  138. #openocd -f /usr/local/share/openocd/scripts/interface/jlink.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown
  139.         openocd -f /usr/local/share/openocd/scripts/interface/stlink-v2.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown
 楼主| keer_zu 发表于 2021-6-22 11:25 | 显示全部楼层
@123654789 @ayb_ice
编译自己的stm32工程
makefile基本就是比葫芦画瓢
 楼主| keer_zu 发表于 2021-6-22 12:20 | 显示全部楼层
修改,传入必须的宏定义,比如stm32型号等:

  1. #工程名称
  2. TARGET                         = OSAL_example

  3. #设置编译器
  4. CC                             = arm-none-eabi-gcc
  5. #CC                             = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-gcc
  6. OBJCOPY                        = arm-none-eabi-objcopy
  7. #OBJCOPY                        = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-objcopy
  8. ARMSIZE                        = arm-none-eabi-size

  9. #获取当前工作目录
  10. TOP=.

  11. #设置源文件后缀,c或cpp
  12. EXT                                = c

  13. #设置自定义源文件目录
  14. # APP_DIR                        = $(TOP)/APP
  15. HARD_DIR                = $(TOP)/HARDWARE
  16. PORT_STM32F4_DIR                = $(TOP)/LWIP/port
  17. SYS_DIR = $(TOP)/SYSTEM
  18. FREERTOS_DIR = $(TOP)/FreeRTOS

  19. #设置源文件搜索路径
  20. VPATH                        += $(TOP)/Cpu/Core
  21. VPATH                        += $(TOP)/firmware
  22. VPATH                        += $(TOP)/FreeRTOS
  23. VPATH                        += $(FREERTOS_DIR)/portable/RVDS/ARM_CM4_MPU
  24. VPATH                        += $(TOP)/FWLIB/src
  25. VPATH                        += $(TOP)/IAP:$(TOP)/LWIP:$(TOP)/HARDWARE
  26. VPATH                        += $(HARD_DIR)/ADC:$(HARD_DIR)/CAN:$(HARD_DIR)/DIN:$(HARD_DIR)/DMA:$(HARD_DIR)/DOUT:$(HARD_DIR)/DS1302:$(HARD_DIR)/FLASH:$(HARD_DIR)/GPRS:$(HARD_DIR)/KEY:$(HARD_DIR)/TIMER:$(HARD_DIR)/USART2:$(HARD_DIR)/WDG
  27. VPATH                        += $(TOP)/LWIP/app:$(TOP)/LWIP/cfg:$(TOP)/LWIP/drv
  28. VPATH                        += $(PORT_STM32F4_DIR)/FreeRTOS:$(PORT_STM32F4_DIR)/Standalone
  29. VPATH                        += $(SYS_DIR)/delay:$(SYS_DIR)/sys:$(SYS_DIR)/usart
  30. VPATH                        += $(TOP)/Task
  31. VPATH                        += $(TOP)/USER
  32. VPATH                        += $(TOP)/Main

  33. #设置中间目标文件目录
  34. OBJ_DIR                        = $(TOP)/OBJ

  35. #设定头文件包含目录
  36. INC_FLAGS                += -I $(TOP)/FreeRTOS/include
  37. INC_FLAGS                 += -I $(TOP)/Cpu/Core
  38. INC_FLAGS                 += -I $(TOP)/firmware
  39. INC_FLAGS                += -I $(FREERTOS_DIR)/include
  40. INC_FLAGS                += -I $(FREERTOS_DIR)/portable/RVDS/ARM_CM4_MPU
  41. INC_FLAGS                 += -I $(TOP)/FWLIB/inc
  42. INC_FLAGS                 += -I $(HARD_DIR)
  43. INC_FLAGS                += -I $(HARD_DIR)/ADC
  44. INC_FLAGS                += -I $(HARD_DIR)/CAN
  45. INC_FLAGS                += -I $(HARD_DIR)/DIN
  46. INC_FLAGS                += -I $(HARD_DIR)/DMA
  47. INC_FLAGS                += -I $(HARD_DIR)/DOUT
  48. INC_FLAGS                += -I $(HARD_DIR)/DS1302
  49. INC_FLAGS                += -I $(HARD_DIR)/FLASH
  50. INC_FLAGS                += -I $(HARD_DIR)/GPRS
  51. INC_FLAGS                += -I $(HARD_DIR)/KEY
  52. INC_FLAGS                += -I $(HARD_DIR)/TIMER
  53. INC_FLAGS                += -I $(HARD_DIR)/USART2
  54. INC_FLAGS                += -I $(HARD_DIR)/WDG
  55. INC_FLAGS                 += -I $(TOP)/IAP
  56. INC_FLAGS                 += -I $(TOP)/LWIP/app
  57. INC_FLAGS                += -I $(TOP)/LWIP/cfg$(TOP)/LWIP/drv
  58. INC_FLAGS                += -I $(TOP)/LWIP
  59. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/FreeRTOS
  60. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/Standalone
  61. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/arch
  62. INC_FLAGS                 += -I $(TOP)/Main
  63. INC_FLAGS                 += -I $(SYS_DIR)/delay
  64. INC_FLAGS                += -I $(SYS_DIR)/sys
  65. INC_FLAGS                += -I $(SYS_DIR)/usart
  66. INC_FLAGS                += -I $(TOP)/Task
  67. INC_FLAGS                += -I $(TOP)/USER
  68. INC_FLAGS                += -I $(TOP)/LWIP/drv


  69. #编译选项
  70. CFLAGS                         += -W -Wall -g -mcpu=cortex-m3 -mthumb -O2 -std=gnu11
  71. CFLAGS                         += -D STM32F10X_HD -D USE_STDPERIPH_DRIVER
  72. CFLAGS                        += -DSTM32F40XX
  73. CFLAGS                        += -D__TARGET_FPU_VFP

  74. #链接选项
  75. LFLAGS                         += -mthumb -mcpu=cortex-m3 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs
  76. LFLAGS                         += -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=Project.map -Wl,--gc-sections
  77. LFLAGS                         += -Wl,--defsym=malloc_getpagesize_P=0x80

  78. #链接启动文件和链接脚本
  79. LFLAGS                        += $(TOP)/CORE/startup_stm32f10x_hd.s
  80. LFLAGS                        += -T $(TOP)/CORE/stm32_flash.ld

  81. #固定源文件添加
  82. C_SRC                        += $(shell find $(TOP)/Cpu/Core  -name '*.$(EXT)')
  83. C_SRC                        += $(shell find $(TOP)/firmware  -name '*.$(EXT)')
  84. C_SRC                        += $(shell find $(TOP)/FreeRTOS -maxdepth 1 -name  '*.$(EXT)')
  85. C_SRC                        += $(shell find $(FREERTOS_DIR)/portable/RVDS/ARM_CM4_MPU  -name '*.$(EXT)')
  86. C_SRC                        += $(shell find $(TOP)/FWLIB/src  -name '*.$(EXT)')
  87. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  88. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  89. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  90. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  91. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  92. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  93. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  94. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  95. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  96. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  97. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  98. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')
  99. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')

  100. C_SRC                        += $(FREERTOS_DIR)/MemMang/heap_4.c

  101. #中间目标文件
  102. #C_OBJ                        += $(C_SRC:%.$(EXT)=%.o)
  103. C_SRC_NODIR                = $(notdir $(C_SRC))
  104. C_OBJ                         = $(patsubst %.$(EXT), $(OBJ_DIR)/%.o,$(C_SRC_NODIR))

  105. #依赖文件
  106. C_DEP                        = $(patsubst %.$(EXT), $(OBJ_DIR)/%.d,$(C_SRC_NODIR))

  107. .PHONY: all clean rebuild upload test ctags



  108. all:$(C_OBJ)
  109.         @echo "linking object to $(TARGET).elf"
  110.         @$(CC) $(C_OBJ) -o $(TARGET).elf $(LFLAGS)
  111.         @$(ARMSIZE) $(TARGET).elf
  112.         @echo "create $(TARGET).hex from $(TARGET).elf"
  113.         @$(OBJCOPY) $(TARGET).elf $(TARGET).hex -Oihex
  114.         @$(ARMSIZE) $(TARGET).hex
  115. #$(OBJCOPY) $(TARGET).elf  $(TARGET).bin -Obinary

  116. #静态模式
  117. #$(C_OBJ):%.o:%.$(EXT)
  118. #        $(CC) -c $(CFLAGS) -o $@ lt;

  119. $(OBJ_DIR)/%.o:%.$(EXT)
  120.         @mkdir -p OBJ
  121.         @echo "building lt;"
  122.         @$(CC) -c $(CFLAGS) $(INC_FLAGS) -o $@ lt;

  123. -include $(C_DEP)
  124. $(OBJ_DIR)/%.d:%.$(EXT)
  125.         @mkdir -p OBJ
  126.         @echo "making $@"

  127.         @set -e;rm -f $@;$(CC) -MM $(CFLAGS) $(INC_FLAGS) lt; > $@.$;sed 's,\($*\)\.o[ :]*,$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d:,g' < $@.$ > $@;rm -f $@.$

  128. clean:
  129.         -rm -f $(OBJ_DIR)/*
  130.         -rm -f $(shell find ./ -name '*.map')
  131.         -rm -f $(shell find ./ -name '*.elf')
  132.         -rm -f $(shell find ./ -name '*.bin')
  133.         -rm -f $(shell find ./ -name '*.hex')

  134. rebuild: clean all

  135. test:
  136.         @echo "Test !"
  137.         @echo "cflags:$(CFLAGS) ========= inc flags:$(INC_FLAGS)"

  138. ctags:
  139.         @ctags -R *

  140. upload:
  141. #openocd -f /usr/local/share/openocd/scripts/interface/jlink.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown
  142.         openocd -f /usr/local/share/openocd/scripts/interface/stlink-v2.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown


 楼主| keer_zu 发表于 2021-6-22 16:26 | 显示全部楼层
出现的错误:
/tmp/ccBRBYY0.s:660: Error: selected processor does not support `vstmdbeq r0!,{s16-s31}' in Thumb mode
/tmp/ccBRBYY0.s:662: Error: instruction not allowed in IT block -- `mrs r1,control'
/tmp/ccBRBYY0.s:702: Error: selected processor does not support `vldmiaeq r0!,{s16-s31}' in Thumb mode
/tmp/ccBRBYY0.s:704: Error: instruction not allowed in IT block -- `msr psp,r0'

解决方法:
https://www.cnblogs.com/89yanyu/p/7537902.html
 楼主| keer_zu 发表于 2021-6-22 16:30 | 显示全部楼层
  1. #工程名称
  2. TARGET                         = OSAL_example

  3. #设置编译器
  4. CC                             = arm-none-eabi-gcc
  5. #CC                             = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-gcc
  6. OBJCOPY                        = arm-none-eabi-objcopy
  7. #OBJCOPY                        = /opt/arm-none-gcc-5.4/bin/arm-none-eabi-objcopy
  8. ARMSIZE                        = arm-none-eabi-size

  9. #获取当前工作目录
  10. TOP=.

  11. #设置源文件后缀,c或cpp
  12. EXT                                = c

  13. #设置自定义源文件目录
  14. # APP_DIR                        = $(TOP)/APP
  15. HARD_DIR                = $(TOP)/HARDWARE
  16. PORT_STM32F4_DIR                = $(TOP)/LWIP/port
  17. SYS_DIR = $(TOP)/SYSTEM
  18. FREERTOS_DIR = $(TOP)/FreeRTOS

  19. #设置源文件搜索路径
  20. VPATH                        += $(TOP)/Cpu/Core
  21. VPATH                        += $(TOP)/firmware
  22. VPATH                        += $(TOP)/FreeRTOS
  23. VPATH                        += $(FREERTOS_DIR)/portable/GCC/ARM_CM4_MPU
  24. VPATH                        += $(TOP)/FWLIB/src
  25. VPATH                        += $(TOP)/IAP:$(TOP)/LWIP:$(TOP)/HARDWARE
  26. VPATH                        += $(HARD_DIR)/ADC:$(HARD_DIR)/CAN:$(HARD_DIR)/DIN:$(HARD_DIR)/DMA:$(HARD_DIR)/DOUT:$(HARD_DIR)/DS1302:$(HARD_DIR)/FLASH:$(HARD_DIR)/GPRS:$(HARD_DIR)/KEY:$(HARD_DIR)/TIMER:$(HARD_DIR)/USART2:$(HARD_DIR)/WDG
  27. VPATH                        += $(TOP)/LWIP/app:$(TOP)/LWIP/cfg:$(TOP)/LWIP/drv
  28. VPATH                        += $(PORT_STM32F4_DIR)/FreeRTOS:$(PORT_STM32F4_DIR)/Standalone
  29. VPATH                        += $(SYS_DIR)/delay:$(SYS_DIR)/sys:$(SYS_DIR)/usart
  30. VPATH                        += $(TOP)/Task
  31. VPATH                        += $(TOP)/USER
  32. VPATH                        += $(TOP)/Main

  33. #设置中间目标文件目录
  34. OBJ_DIR                        = $(TOP)/OBJ

  35. #设定头文件包含目录
  36. INC_FLAGS                += -I $(TOP)/FreeRTOS/include
  37. INC_FLAGS                 += -I $(TOP)/Cpu/Core
  38. INC_FLAGS                 += -I $(TOP)/firmware
  39. INC_FLAGS                += -I $(FREERTOS_DIR)/include
  40. INC_FLAGS                += -I $(FREERTOS_DIR)/portable/GCC/ARM_CM4_MPU
  41. INC_FLAGS                 += -I $(TOP)/FWLIB/inc
  42. INC_FLAGS                 += -I $(HARD_DIR)
  43. INC_FLAGS                += -I $(HARD_DIR)/ADC
  44. INC_FLAGS                += -I $(HARD_DIR)/CAN
  45. INC_FLAGS                += -I $(HARD_DIR)/DIN
  46. INC_FLAGS                += -I $(HARD_DIR)/DMA
  47. INC_FLAGS                += -I $(HARD_DIR)/DOUT
  48. INC_FLAGS                += -I $(HARD_DIR)/DS1302
  49. INC_FLAGS                += -I $(HARD_DIR)/FLASH
  50. INC_FLAGS                += -I $(HARD_DIR)/GPRS
  51. INC_FLAGS                += -I $(HARD_DIR)/KEY
  52. INC_FLAGS                += -I $(HARD_DIR)/TIMER
  53. INC_FLAGS                += -I $(HARD_DIR)/USART2
  54. INC_FLAGS                += -I $(HARD_DIR)/WDG
  55. INC_FLAGS                 += -I $(TOP)/IAP
  56. INC_FLAGS                 += -I $(TOP)/LWIP/app
  57. INC_FLAGS                += -I $(TOP)/LWIP/cfg$(TOP)/LWIP/drv
  58. INC_FLAGS                += -I $(TOP)/LWIP
  59. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/FreeRTOS
  60. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/Standalone
  61. INC_FLAGS                += -I $(PORT_STM32F4_DIR)/arch
  62. INC_FLAGS                 += -I $(TOP)/Main
  63. INC_FLAGS                 += -I $(SYS_DIR)/delay
  64. INC_FLAGS                += -I $(SYS_DIR)/sys
  65. INC_FLAGS                += -I $(SYS_DIR)/usart
  66. INC_FLAGS                += -I $(TOP)/Task
  67. INC_FLAGS                += -I $(TOP)/USER
  68. INC_FLAGS                += -I $(TOP)/LWIP/drv


  69. #编译选项
  70. CFLAGS                         += -W -Wall -g -mcpu=cortex-m3 -mthumb -O2 -std=gnu11
  71. CFLAGS                         += -D USE_STDPERIPH_DRIVER
  72. CFLAGS                        += -D STM32F40XX
  73. CFLAGS                        += -D __TARGET_FPU_VFP

  74. #链接选项
  75. LFLAGS                         += -mthumb -mcpu=cortex-m3 -Wl,--start-group -lc -lm -Wl,--end-group -specs=nano.specs
  76. LFLAGS                         += -specs=nosys.specs -static -Wl,-cref,-u,Reset_Handler -Wl,-Map=Project.map -Wl,--gc-sections
  77. LFLAGS                         += -Wl,--defsym=malloc_getpagesize_P=0x80

  78. #链接启动文件和链接脚本
  79. LFLAGS                        += $(TOP)/CORE/startup_stm32f10x_hd.s
  80. LFLAGS                        += -T $(TOP)/CORE/stm32_flash.ld

  81. #固定源文件添加
  82. C_SRC                        += $(shell find $(TOP)/Cpu/Core  -name '*.$(EXT)')
  83. C_SRC                        += $(shell find $(TOP)/firmware  -name '*.$(EXT)')
  84. C_SRC                        += $(shell find $(TOP)/FreeRTOS -maxdepth 1 -name  '*.$(EXT)')
  85. C_SRC                        += $(shell find $(FREERTOS_DIR)/portable/GCC/ARM_CM4_MPU  -name '*.$(EXT)')
  86. C_SRC                        += $(shell find $(TOP)/FWLIB/src  -name '*.$(EXT)')
  87. C_SRC                        += $(shell find $(TOP)/FreeRTOS  -name '*.$(EXT)')


  88. C_SRC                        += $(FREERTOS_DIR)/MemMang/heap_4.c

  89. #中间目标文件
  90. #C_OBJ                        += $(C_SRC:%.$(EXT)=%.o)
  91. C_SRC_NODIR                = $(notdir $(C_SRC))
  92. C_OBJ                         = $(patsubst %.$(EXT), $(OBJ_DIR)/%.o,$(C_SRC_NODIR))

  93. #依赖文件
  94. C_DEP                        = $(patsubst %.$(EXT), $(OBJ_DIR)/%.d,$(C_SRC_NODIR))

  95. .PHONY: all clean rebuild upload test ctags



  96. all:$(C_OBJ)
  97.         @echo "linking object to $(TARGET).elf"
  98.         @$(CC) $(C_OBJ) -o $(TARGET).elf $(LFLAGS)
  99.         @$(ARMSIZE) $(TARGET).elf
  100.         @echo "create $(TARGET).hex from $(TARGET).elf"
  101.         @$(OBJCOPY) $(TARGET).elf $(TARGET).hex -Oihex
  102.         @$(ARMSIZE) $(TARGET).hex
  103. #$(OBJCOPY) $(TARGET).elf  $(TARGET).bin -Obinary

  104. #静态模式
  105. #$(C_OBJ):%.o:%.$(EXT)
  106. #        $(CC) -c $(CFLAGS) -o $@ $<

  107. $(OBJ_DIR)/%.o:%.$(EXT)
  108.         @mkdir -p OBJ
  109.         @echo "building $<"
  110.         @$(CC) -c $(CFLAGS) $(INC_FLAGS) -o $@ $<

  111. -include $(C_DEP)
  112. $(OBJ_DIR)/%.d:%.$(EXT)
  113.         @mkdir -p OBJ
  114.         @echo "making $@"

  115.         @set -e;rm -f $@;$(CC) -MM $(CFLAGS) $(INC_FLAGS) $< > $@.$$;sed 's,\($*\)\.o[ :]*,$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d:,g' < $@.$$ > $@;rm -f $@.$$

  116. clean:
  117.         -rm -f $(OBJ_DIR)/*
  118.         -rm -f $(shell find ./ -name '*.map')
  119.         -rm -f $(shell find ./ -name '*.elf')
  120.         -rm -f $(shell find ./ -name '*.bin')
  121.         -rm -f $(shell find ./ -name '*.hex')

  122. rebuild: clean all

  123. test:
  124.         @echo "Test !"
  125.         @echo "cflags:$(CFLAGS) ========= inc flags:$(INC_FLAGS)"

  126. ctags:
  127.         @ctags -R *

  128. upload:
  129. #openocd -f /usr/local/share/openocd/scripts/interface/jlink.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown
  130.         openocd -f /usr/local/share/openocd/scripts/interface/stlink-v2.cfg  -f /usr/local/share/openocd/scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase $(TOP)/$(TARGET).hex" -c reset -c shutdown
123654789 发表于 2021-6-23 09:18 | 显示全部楼层
-mthumb -mcpu=cortex-m3

这个参数最重要   ,  指定指令集
123654789 发表于 2021-6-24 12:25 | 显示全部楼层
C编译器名字叫做 arm-none-eabi-gcc

归档器名字叫做 arm-none-eabi-ar

汇编器名字叫做 arm-none-eabi-as

链接器名字叫做 arm-none-eabi-ld

但是下面的名字有点奇怪

ARMSIZE                        = arm-none-eabi-size
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部

1478

主题

12915

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部