# STM8S003F3P6TR 固件第一阶段构建文件。 # 本阶段只验证工程结构和模块接口,硬件寄存器驱动将在后续阶段逐步接入。 PROJECT := mesh_relay BUILD_DIR := build SRC_DIR := src INC_DIR := include CC := sdcc OBJCOPY := packihx MAKEBIN := makebin CFLAGS := -mstm8 --std-c99 --opt-code-size -I$(INC_DIR) # Bootloader占用0x8000~0x87FF,主程序必须从0x8800开始链接。 LDFLAGS := -mstm8 --out-fmt-ihx --code-loc 0x8800 SOURCES := $(shell find $(SRC_DIR) -name '*.c' -print) OBJECTS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.rel,$(SOURCES)) IHX := $(BUILD_DIR)/$(PROJECT).ihx HEX := $(BUILD_DIR)/$(PROJECT).hex BIN := $(BUILD_DIR)/$(PROJECT).bin .PHONY: all clean size all: $(HEX) $(BIN) $(HEX): $(IHX) @mkdir -p $(dir $@) $(OBJCOPY) $< > $@ # 生成OTA使用的裸二进制:跳过0x0000~0x87FF,只保留0x8800之后的应用程序数据。 # -s 0x10000确保按STM8完整地址空间解析IHX;-o 0x8800去除Bootloader区域; # -p再截断到应用程序最后一个实际占用地址,避免生成无意义的尾部空洞。 $(BIN): $(IHX) @mkdir -p $(dir $@) $(MAKEBIN) -p -s 0x10000 -o 0x8800 $< $@ $(IHX): $(OBJECTS) @mkdir -p $(dir $@) $(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(BUILD_DIR)/%.rel: $(SRC_DIR)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c $< -o $@ size: $(IHX) @ls -lh $(IHX) $(HEX) $(BIN) clean: rm -rf $(BUILD_DIR)