# Makefile for BMU-18S-Firmware (STM32F103) # Explicitly synced with BMU-18S_APP.uvprojx TARGET = BMU_18S_APP_V6337 MCU = cortex-m3 OPT = -Os BUILD_DIR = build # --- Toolchain --- CC = arm-none-eabi-gcc AS = arm-none-eabi-gcc -x assembler-with-cpp CP = arm-none-eabi-objcopy SZ = arm-none-eabi-size # --- Paths --- SDK_PATH = . USER_DIR = $(SDK_PATH)/USER CORE_DIR = $(SDK_PATH)/CORE APP_DIR = $(SDK_PATH)/APP HARDWARE_DIR = $(SDK_PATH)/HARDWARE SYSTEM_DIR = $(SDK_PATH)/SYSTEM FWLIB_DIR = $(SDK_PATH)/FWLIB UCOS_DIR = $(SDK_PATH)/UCOSIII # --- Sources (Explicitly from Keil Project) --- C_SOURCES = \ $(USER_DIR)/main.c \ $(FWLIB_DIR)/stm32f10x_it.c \ $(FWLIB_DIR)/system_stm32f10x.c \ $(APP_DIR)/console.c \ $(APP_DIR)/screen.c \ $(APP_DIR)/asutil.c \ $(APP_DIR)/app_ver.c \ $(APP_DIR)/brtc.c \ $(APP_DIR)/io.c \ $(APP_DIR)/temp.c \ $(APP_DIR)/display_status.c \ $(APP_DIR)/device_param.c \ $(APP_DIR)/dflash_sf1.c \ $(APP_DIR)/dflash_sbs.c \ $(APP_DIR)/flash_if.c \ $(APP_DIR)/can_comm.c \ $(APP_DIR)/can_data_process.c \ $(APP_DIR)/can_inv_data_process.c \ $(APP_DIR)/can_update_process.c \ $(APP_DIR)/ltc6813_comm.c \ $(APP_DIR)/alarm.c \ $(APP_DIR)/task_manager.c \ $(HARDWARE_DIR)/can.c \ $(HARDWARE_DIR)/iwdg.c \ $(HARDWARE_DIR)/led.c \ $(HARDWARE_DIR)/spi.c \ $(HARDWARE_DIR)/ltc681x.c \ $(HARDWARE_DIR)/ltc6813.c \ $(CORE_DIR)/core_cm3.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/misc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c \ $(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c \ $(SYSTEM_DIR)/delay.c \ $(SYSTEM_DIR)/sys.c \ $(SYSTEM_DIR)/usart.c \ $(UCOS_DIR)/UCOS_BSP/bsp.c \ $(UCOS_DIR)/uC-CPU/ARM-Cortex-M3/GNU/cpu_c.c \ $(UCOS_DIR)/uC-CPU/cpu_core.c \ $(UCOS_DIR)/uCOS-III/Source/os_cfg_app.c \ $(UCOS_DIR)/uCOS-III/Source/os_core.c \ $(UCOS_DIR)/uCOS-III/Source/os_dbg.c \ $(UCOS_DIR)/uCOS-III/Source/os_flag.c \ $(UCOS_DIR)/uCOS-III/Source/os_int.c \ $(UCOS_DIR)/uCOS-III/Source/os_mem.c \ $(UCOS_DIR)/uCOS-III/Source/os_msg.c \ $(UCOS_DIR)/uCOS-III/Source/os_mutex.c \ $(UCOS_DIR)/uCOS-III/Source/os_pend_multi.c \ $(UCOS_DIR)/uCOS-III/Source/os_prio.c \ $(UCOS_DIR)/uCOS-III/Source/os_q.c \ $(UCOS_DIR)/uCOS-III/Source/os_sem.c \ $(UCOS_DIR)/uCOS-III/Source/os_stat.c \ $(UCOS_DIR)/uCOS-III/Source/os_task.c \ $(UCOS_DIR)/uCOS-III/Source/os_tick.c \ $(UCOS_DIR)/uCOS-III/Source/os_time.c \ $(UCOS_DIR)/uCOS-III/Source/os_tmr.c \ $(UCOS_DIR)/uCOS-III/Source/os_var.c \ $(UCOS_DIR)/uCOS-III/Ports/ARM-Cortex-M3/Generic/GNU/os_cpu_c.c \ $(UCOS_DIR)/uCOS_CONFIG/os_app_hooks.c \ $(UCOS_DIR)/uC-LIB/lib_ascii.c \ $(UCOS_DIR)/uC-LIB/lib_math.c \ $(UCOS_DIR)/uC-LIB/lib_mem.c \ $(UCOS_DIR)/uC-LIB/lib_str.c # --- ASM Sources --- ASM_S_SOURCES = \ $(UCOS_DIR)/uC-CPU/ARM-Cortex-M3/GNU/cpu_a.s \ $(UCOS_DIR)/uC-LIB/Ports/ARM-Cortex-M3/GNU/lib_mem_a.s \ $(UCOS_DIR)/uCOS-III/Ports/ARM-Cortex-M3/Generic/GNU/os_cpu_a.s ASM_UPPER_S_SOURCES = \ $(CORE_DIR)/startup_stm32f10x_md_gcc.S # --- Includes --- C_INCLUDES = \ -I$(CORE_DIR) \ -I$(SYSTEM_DIR) \ -I$(USER_DIR) \ -I$(HARDWARE_DIR) \ -I$(FWLIB_DIR) \ -I$(FWLIB_DIR)/CMSIS/Include \ -I$(FWLIB_DIR)/STM32F10x_StdPeriph_Driver/inc \ -I$(UCOS_DIR)/uC-CPU \ -I$(UCOS_DIR)/uC-LIB \ -I$(UCOS_DIR)/uCOS-III \ -I$(UCOS_DIR)/UCOS_BSP \ -I$(UCOS_DIR)/uCOS_CONFIG \ -I$(UCOS_DIR)/uCOS-III/Source \ -I$(UCOS_DIR)/uC-CPU/ARM-Cortex-M3/GNU \ -I$(UCOS_DIR)/uC-LIB/Ports/ARM-Cortex-M3/GNU \ -I$(UCOS_DIR)/uCOS-III/Ports/ARM-Cortex-M3/Generic/GNU \ -I$(APP_DIR) # --- Compiler Flags --- C_DEFS = \ -DUSE_STDPERIPH_DRIVER \ -DSTM32F10X_MD \ -DARM_MATH_CM3 \ -D__FPU_PRESENT=1 \ -D__FPU_USED=1 CFLAGS = -mcpu=$(MCU) -mthumb $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -std=c99 ASFLAGS = -mcpu=$(MCU) -mthumb $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections # --- Linker Flags --- LDSCRIPT = stm32f103.ld LDFLAGS = -mcpu=$(MCU) -mthumb -specs=nano.specs -specs=nosys.specs -T$(LDSCRIPT) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--gc-sections # --- Build Rules --- all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin # Object list OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_S_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_S_SOURCES))) OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_UPPER_S_SOURCES:.S=.o))) vpath %.S $(sort $(dir $(ASM_UPPER_S_SOURCES))) $(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CC) -c $(CFLAGS) $< -o $@ $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) $(AS) -c $(ASFLAGS) $< -o $@ $(BUILD_DIR)/%.o: %.S Makefile | $(BUILD_DIR) $(AS) -c $(ASFLAGS) $< -o $@ $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(CC) $(OBJECTS) $(LDFLAGS) -o $@ $(SZ) $@ $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf $(CP) -O ihex $< $@ $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf $(CP) -O binary -S $< $@ $(BUILD_DIR): mkdir $@ clean: rm -fR $(BUILD_DIR)