Определим кроссплатформу для нашего проекта:
# Compilator prefixCROSS_PREFIX=arm-none-eabi-Также определим компилятор и прочие программы для сборки:
# Compilators and utilsCC=$(CROSS_PREFIX)gccOBJCOPY=$(CROSS_PREFIX)objcopySIZE=$(CROSS_PREFIX)sizeУкажем пути библиотек, заголовочных файлов и файлов исходных кодов ОСРВ:
# PathsSTM_PATH=../../stlink/exampleLIBS_STM_PATH=$(STM_PATH)/libs_stmFREERTOS_PATH=../FreeRTOSV7.1.1/SourceОпределим платформу с которой мы будем работать - stm32f10x:
# PlatformPLATFORM=stm32f10xЗададим основные флаги компилятора - оптимизацию по размеру, тип командой системы а также тип ядра процессора и указатель для заголовочного файла который показывает семейство используемого МК:
# Primary compiler flagsCFLAGS=-g -Os -mlittle-endian -mthumb -ffreestandingCFLAGS+= -mcpu=cortex-m3 -DSTM32F10X_MDЗададим вторичные флаги компилятора указав места размещения для поиска заголовочных файлов, а также секционные настройки и скрипт для сборщика:
# Secondary compiler flagsCFLAGS+= -I.CFLAGS+= -I$(LIBS_STM_PATH)/inc/baseCFLAGS+= -I$(LIBS_STM_PATH)/inc/core_supportCFLAGS+= -I$(LIBS_STM_PATH)/inc/device_supportCFLAGS+= -I$(FREERTOS_PATH)/includeCFLAGS+= -I$(FREERTOS_PATH)/portable/GCC/ARM_CM3CFLAGS+= -Wl,-T,stm32f102xb_flash.ldУкажем флаги сборщика - место расположения подгружаемых библиотек, а также то, что не используется стартовые файлы:
# Linker flagsLDFLAGS=-L. -nostartfilesУкажем путь хранения исходных файлов проекта и ОС:
# Sources and objects
SRCS=$(wildcard *.c)SRCS+=$(FREERTOS_PATH)/list.cSRCS+=$(FREERTOS_PATH)/croutine.cSRCS+=$(FREERTOS_PATH)/queue.cSRCS+=$(FREERTOS_PATH)/tasks.cSRCS+=$(FREERTOS_PATH)/timers.cSRCS+=$(FREERTOS_PATH)/portable/GCC/ARM_CM3/port.cSRCS+=$(FREERTOS_PATH)/portable/MemMang/heap_1.cИ заодно путь хранения объектных файлов:
OBJS=$(SRCS:.c=.o)Зададим правила для компиляции, сборки, прошивки и очистки проекта:# Rules for compileall: firmware.bin# Making binary firmware file%bin: %elf    $(OBJCOPY) -O binary $^ $@    $(SIZE) $^# Making elffirmware.elf: $(OBJS)    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)# Making objects%.o: $.c    $(CC) $(CFLAGS) -c -o $@ $^# Rules for cleanclean:    rm -rf *.o *.elf *.bin $(OBJS)# Rules for write firmware to mcuwrite: firmware.bin    qstlink2 -cewV ./firmware.bin# PHONY.PHONY: all clean