From a424dddcf0a0775c4d304e6c7c2a0a1936e91e6c Mon Sep 17 00:00:00 2001 From: yuquanjun Date: Fri, 23 Oct 2026 19:48:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=201.0.0=20=E5=9B=BA=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E6=96=87=E4=BB=B6=E5=90=8D=E5=B8=A6=E4=B8=8A=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=92=8C=E6=BA=90=E7=A0=81=E6=8F=90=E4=BA=A4=E5=8F=B7?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- Makefile | 17 +- .../hub75_80x40_v1.0.0_20261023_8e3fbf.bin | Bin 0 -> 12404 bytes .../hub75_80x40_v1.0.0_20261023_8e3fbf.hex | 781 ++++++++++++++++++ 3 files changed, 794 insertions(+), 4 deletions(-) create mode 100644 firmware/hub75_80x40_v1.0.0_20261023_8e3fbf.bin create mode 100644 firmware/hub75_80x40_v1.0.0_20261023_8e3fbf.hex diff --git a/Makefile b/Makefile index a84b3d9..277afef 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,11 @@ TARGET = hub75_80x40 BUILD = build +FW_VERSION = 1.0.0 +FW_REPO = ../RGB-Matrix-Px-xx +FW_GIT = $(shell git -C $(FW_REPO) rev-parse --short=6 HEAD) +FW_DATE = $(shell git -C $(FW_REPO) log -1 --format=%cd --date=format:%Y%m%d) +RELEASE_DIR = firmware +RELEASE_NAME = $(TARGET)_v$(FW_VERSION)_$(FW_DATE)_$(FW_GIT) PREFIX = arm-none-eabi- CC = $(PREFIX)gcc @@ -58,12 +64,12 @@ C_INCLUDES = \ -I$(SRC_ROOT)/User/image CPU = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -DEFS = -DSTM32F103xB -DUSE_HAL_DRIVER -DHSE_VALUE=8000000U -DHUB75_PANEL_PROFILE=HUB75_PANEL_PROFILE_80X40_1_20 +DEFS = -DSTM32F103xB -DUSE_HAL_DRIVER -DHSE_VALUE=8000000U -DHUB75_PANEL_PROFILE=HUB75_PANEL_PROFILE_80X40_1_20 -DFW_GIT_HASH=\"$(FW_GIT)\" OPT = -Os CFLAGS = $(CPU) $(DEFS) $(C_INCLUDES) $(OPT) -Wall -ffunction-sections -fdata-sections -fno-common -g ASFLAGS = $(CPU) -g -LDFLAGS = $(CPU) -TSTM32F103ZET6.ld -Wl,--gc-sections -Wl,-Map=$(BUILD)/$(TARGET).map --specs=nano.specs --specs=nosys.specs +LDFLAGS = $(CPU) -TSTM32F103ZET6.ld -Wl,--gc-sections -Wl,-u,fw_build_id -Wl,-Map=$(BUILD)/$(TARGET).map --specs=nano.specs --specs=nosys.specs OBJECTS = $(addprefix $(BUILD)/,$(notdir $(C_SOURCES:.c=.o))) OBJECTS += $(addprefix $(BUILD)/,$(notdir $(ASM_SOURCES:.s=.o))) @@ -71,9 +77,12 @@ OBJECTS += $(addprefix $(BUILD)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.c $(sort $(dir $(C_SOURCES))) vpath %.s $(sort $(dir $(ASM_SOURCES))) -all: $(BUILD)/$(TARGET).elf $(BUILD)/$(TARGET).bin $(BUILD)/$(TARGET).hex +all: $(BUILD)/$(TARGET).elf $(BUILD)/$(TARGET).bin $(BUILD)/$(TARGET).hex release $(SIZE) $(BUILD)/$(TARGET).elf +release: $(BUILD)/$(TARGET).hex $(BUILD)/$(TARGET).bin + python -c "import os,shutil; os.makedirs(r'$(RELEASE_DIR)', exist_ok=True); shutil.copyfile(r'$(BUILD)/$(TARGET).hex', r'$(RELEASE_DIR)/$(RELEASE_NAME).hex'); shutil.copyfile(r'$(BUILD)/$(TARGET).bin', r'$(RELEASE_DIR)/$(RELEASE_NAME).bin'); print(r'$(RELEASE_DIR)/$(RELEASE_NAME)')" + $(BUILD)/%.o: %.c | $(BUILD) $(CC) -c $(CFLAGS) $< -o $@ @@ -95,4 +104,4 @@ $(BUILD): clean: rm -rf $(BUILD) -.PHONY: all clean +.PHONY: all clean release diff --git a/firmware/hub75_80x40_v1.0.0_20261023_8e3fbf.bin b/firmware/hub75_80x40_v1.0.0_20261023_8e3fbf.bin new file mode 100644 index 0000000000000000000000000000000000000000..8d5cc09a1be3aadfcea70d66d6e3d75b72739b3f GIT binary patch literal 12404 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