feat: complete assembly mesh relay control path
- synchronize STM8 application and external flash layout updates\n- add assembly bootloader and assembly application test projects\n- add UART1 interrupt receive ring buffer\n- parse JDY-28M Mesh outer frames and source addresses\n- add CRC-16/MODBUS validation\n- implement relay control command 0x01 and response 0x81\n- support unicast and broadcast relay control frames\n- update host protocol, OTA documents, and serial tools
This commit is contained in:
@@ -11,29 +11,47 @@ 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
|
||||
# Bootloader占用0x8000~0x84FF,主程序必须从0x8500开始链接。
|
||||
LDFLAGS := -mstm8 --out-fmt-ihx --code-loc 0x8500
|
||||
|
||||
SOURCES := $(shell find $(SRC_DIR) -name '*.c' -print)
|
||||
# 当前验证固件暂时关闭 OTA:外部 SPI Flash 驱动和 OTA 状态机源码保留在仓库中,
|
||||
# 但不参与本次主程序链接,避免 SDCC 将未使用的 OTA 代码整体放入固件。
|
||||
SOURCES := $(filter-out $(SRC_DIR)/protocol/ota_manager.c \
|
||||
$(SRC_DIR)/drivers/w25q64_app.c,$(SOURCES))
|
||||
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
|
||||
.PHONY: all full clean size
|
||||
|
||||
all: $(HEX) $(BIN)
|
||||
|
||||
# 整片初次烧录目标:构建Bootloader和主程序后合并绝对地址HEX。
|
||||
# OTA仍使用主程序单独生成的BIN,不使用这个完整镜像。
|
||||
full: bootloader $(BUILD_DIR)/stm8_mesh_full.hex $(BUILD_DIR)/stm8_mesh_full.bin
|
||||
|
||||
bootloader:
|
||||
$(MAKE) -C STM8_Bootloader
|
||||
|
||||
$(BUILD_DIR)/stm8_mesh_full.hex: STM8_Bootloader/build/stm8_bootloader.hex $(HEX) tools/merge_intel_hex.py
|
||||
@mkdir -p $(dir $@)
|
||||
python3 tools/merge_intel_hex.py $@ $< $(HEX)
|
||||
|
||||
$(BUILD_DIR)/stm8_mesh_full.bin: $(BUILD_DIR)/stm8_mesh_full.hex
|
||||
$(MAKEBIN) -p -s 0x10000 -o 0x8000 $< $@
|
||||
|
||||
$(HEX): $(IHX)
|
||||
@mkdir -p $(dir $@)
|
||||
$(OBJCOPY) $< > $@
|
||||
|
||||
# 生成OTA使用的裸二进制:跳过0x0000~0x87FF,只保留0x8800之后的应用程序数据。
|
||||
# -s 0x10000确保按STM8完整地址空间解析IHX;-o 0x8800去除Bootloader区域;
|
||||
# 生成OTA使用的裸二进制:跳过0x0000~0x84FF,只保留0x8500之后的应用程序数据。
|
||||
# -s 0x10000确保按STM8完整地址空间解析IHX;-o 0x8500去除Bootloader区域;
|
||||
# -p再截断到应用程序最后一个实际占用地址,避免生成无意义的尾部空洞。
|
||||
$(BIN): $(IHX)
|
||||
@mkdir -p $(dir $@)
|
||||
$(MAKEBIN) -p -s 0x10000 -o 0x8800 $< $@
|
||||
$(MAKEBIN) -p -s 0x10000 -o 0x8500 $< $@
|
||||
|
||||
$(IHX): $(OBJECTS)
|
||||
@mkdir -p $(dir $@)
|
||||
|
||||
Reference in New Issue
Block a user