一、Makefile相關指令
1.1、變量
符號 | 含義 |
---|---|
= | 替換 |
+= | 追加 |
:= | 恒等于 |
1.2、隱含規則
符號 | 含義 |
---|---|
%.o | 任意的.o文件 |
*.o | 所有的.o文件 |
1.3、通配符
符號 | 含義 |
---|---|
$^ | 所有依賴文件 |
$@ | 所有目標文件 |
$< | 所有依賴文件的第一個文件 |
1.4、編譯器指令常用參數功能說明
符號 | 含義 | 舉例 |
---|---|---|
-E | 預處理,主要是進行宏展開等步驟 | gcc -E test.c -> test.i |
-S | 編譯,生成匯編代碼 | gcc -S test.c -> test.S |
-c | 匯編:生成機器碼 | gcc -c test.c -> test.o |
-o | 指定文件名 |
二、Makefile文件
SHELL=cmd.exe
DIR = D:\LC\EE\Code\STM32F407\TEST
OBJ = OBJ
KEIL_PATH = D:\ProgramFiles\Keil_v5\Keil\ARM\ARMCC
ARMCC = $(KEIL_PATH)\bin\armcc
ARMASM = $(KEIL_PATH)\bin\armasm
ARMAR = $(KEIL_PATH)\bin\armar
ARMLINK = $(KEIL_PATH)\bin\armlink
FROMELF = $(KEIL_PATH)\bin\fromelf TARGET = .\$(OBJ)\TEST
# OBJMAP := .\stm32.map
OBJHTM := .\$(OBJ)\*.htm
OBJAXF := .\$(OBJ)\*.axf CFLAGS := -c --cpu Cortex-M4.fp.sp -g -O1 --apcs=interwork --split_sections -D__UVISION_VERSION="541" -DSTM32F407xx -DSTM32F40_41xxx
CMACRO :=
ASMFLAGS := --cpu Cortex-M4.fp.sp -g --apcs=interwork --pd "__UVISION_VERSION SETA 541" --pd "STM32F407xx SETA 1"
LINKFLAGS := --cpu=Cortex-M4.fp.sp
MAP := --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
INFO := --info sizes --info totals --info unused --info veneersSOURCE = .\SYSTEM\delay\delay.c .\SYSTEM\sys\sys.c .\SYSTEM\usart\usart.c .\HARDWARE\LED\led.c .\USER\test.c
START = .\USER\startup_stm32f40_41xxx.sSOURCE_OBJ = $(SOURCE:%.c=%.o)
START_OBJ = $(START:%.s=%.o)OBJS = .\$(OBJ)\delay.o .\$(OBJ)\sys.o .\$(OBJ)\usart.o .\$(OBJ)\led.o .\$(OBJ)\test.o .\$(OBJ)\startup_stm32f40_41xxx.oINC += -I .\SYSTEM\delay -I .\SYSTEM\sys -I .\SYSTEM\usart -I .\HARDWARE\LEDTEST:$(SOURCE_OBJ) $(START_OBJ) TEST1TEST1:$(OBJS)@echo $(OBJS)$(ARMLINK) $(LINKFLAGS) $^ --strict --scatter .\$(OBJ)\TEST.sct $(MAP) $(INFO) --list $(TARGET).map -o $(TARGET).axf$(FROMELF) --i32combined -o $(TARGET).hex $(TARGET).axf%.o:%.c$(ARMCC) $(CFLAGS) $(INC) $(CMACRO) -D__UVISION_VERSION="541" -DSTM32F407xx -DSTM32F40_41xxx $< -o $@ move $@ $(DIR)\$(OBJ)%.o:%.s$(ARMASM) $(ASMFLAGS) $< -o $@ move $@ $(DIR)\$(OBJ).PHONY : clean
clean: -del $(OBJS) .\output\*.map .\output\*.htm .\output\*.axf .\output\*.hex
三、STM32F407工程
D:.
│ Makefile
│ README
│
├─HARDWARE
│ └─LED
│ led.c
│ led.h
│
├─OBJ
│ delay.o
│ led.o
│ startup_stm32f40_41xxx.o
│ sys.o
│ TEST.axf
│ TEST.hex
│ TEST.htm
│ TEST.map
│ test.o
│ TEST.sct
│ usart.o
│
├─SYSTEM
│ │ readme.txt
│ │
│ ├─delay
│ │ delay.c
│ │ delay.h
│ │
│ ├─sys
│ │ core_cm4.h
│ │ core_cm4_simd.h
│ │ core_cmFunc.h
│ │ core_cmInstr.h
│ │ stm32f4xx.h
│ │ sys.c
│ │ sys.h
│ │ system_stm32f4xx.h
│ │
│ └─usart
│ usart.c
│ usart.h
│
└─USERstartup_stm32f40_41xxx.stest.c
四、STM32啟動過程
- 初始化堆棧指針 SP = _initial_sp
- 初始化程序計數器指針 PC = Reset_Handler
- 設置堆和棧的大小
- 初始化中斷向量表
- 配置外部SRAM作為數據存儲器(可選)
- 配置系統時鐘,通過調用SystemInit函數(可選)
- 調用C庫中的 _main 函數初始化用戶堆棧,最終調用 main 函數