STM32F407 Keil工程转makefile构建系统生成工具
python脚本下载
这套Python工具可以从Keil uVision的.uvprojx
项目文件自动生成完整的GCC构建系统,包括Makefile、J-Link下载脚本、构建配置文件等,让你轻松从Keil IDE迁移到命令行构建环境。
🚀 快速开始
一键生成构建系统
# 自动检测项目并生成所有构建文件
python generate_makefile.py
# 编译项目
.\make.bat gcc debug # 调试版本
.\make.bat gcc release # 发布版本
# 编译并下载
.\make.bat flash
# 或者直接使用Makefile
make # 编译项目(默认配置)
.\jlink_cmd.bat # 下载到目标板
指定项目文件生成
# 指定特定的.uvprojx文件
python generate_makefile.py path/to/project.uvprojx
# 强制覆盖现有文件
python generate_makefile.py --force
# 查看帮助信息
python generate_makefile.py --help
✨ 功能特性
核心功能
- ✅ 智能项目解析 - 自动解析Keil
.uvprojx
项目文件 - ✅ 标准构建系统 - 生成符合GNU标准的Makefile
- ✅ 一键下载 - 生成J-Link/ST-Link下载脚本
- ✅ 灵活配置 - 可配置的构建参数和选项
- ✅ 跨平台支持 - Windows批处理脚本 + 跨平台Makefile
高级特性
- ✅ 多构建模式 - 支持调试(Debug)和发布(Release)模式
- ✅ 自动依赖 - 自动生成和管理文件依赖关系
- ✅ 死机调试 - 生成反汇编文件用于死机地址分析
- ✅ 内存分析 - 生成内存映射和使用统计
- ✅ 环境检测 - 自动检测工具链和开发环境
- ✅ 路径智能处理 - 自动转换Keil路径到GCC兼容格式
符合规范
- ✅ STM32编程规范 - 遵循项目编程标准
- ✅ FreeRTOS集成 - 完美支持FreeRTOS任务系统
- ✅ HAL库兼容 - 完全兼容STM32 HAL库
- ✅ 中间件支持 - 支持FATFS、USB等中间件
📖 详细使用方法
generate_makefile.py - 构建系统生成工具
这是主要的生成工具,可以从Keil项目文件自动生成完整的GCC构建系统:
# 基本用法 - 自动检测项目并生成所有文件
python generate_makefile.py
# 指定特定的项目文件
python generate_makefile.py path/to/your/project.uvprojx
# 强制覆盖现有文件
python generate_makefile.py --force
# 查看帮助信息
python generate_makefile.py --help
generate_makefile.py 特性:
- 🔍 智能检测 - 自动查找当前目录及子目录中的.uvprojx文件
- 📊 详细反馈 - 显示项目信息、源文件数量、包含路径等
- 🔧 完整生成 - 生成Makefile、构建脚本、下载脚本、配置文件等
- 🛡️ 安全保护 - 提供–force选项控制文件覆盖
- ⚡ 高效处理 - 智能路径转换和依赖关系处理
生成过程说明
运行 python generate_makefile.py
后,工具会:
- 自动检测项目文件 - 在当前目录及子目录中查找.uvprojx文件
- 解析项目配置 - 提取源文件、包含路径、预定义宏等信息
- 生成构建文件 - 创建6个核心文件:
- Makefile - 主构建文件
- make.bat - Windows构建脚本
- jlink_cmd.bat - J-Link下载脚本
- build_config.mk - 构建配置文件
- STM32F407VGTx_FLASH.ld - 链接脚本
- startup_stm32f407xx_gcc.s - GCC启动文件
- 显示生成结果 - 提供详细的统计信息和使用说明
典型输出示例
============================================================
STM32 Keil项目构建系统生成工具
============================================================
解析Keil项目文件: M:\STM32F407VGT6_Template\MDK-ARM\RTE\STM32F407VGT6_TEST.uvprojx
项目名称: STM32F407VGT6_TEST
目标设备: STM32F407VGTx
源文件数量: 80
包含路径数量: 19
预定义宏数量: 3
[1/6] 生成Makefile...
Makefile已生成: Makefile
[2/6] 生成J-Link下载脚本...
J-Link下载脚本已生成: jlink_cmd.bat
[3/6] 生成构建配置文件...
构建配置文件已生成: build_config.mk
[4/6] 生成构建脚本...
构建脚本已生成: make.bat
[5/6] 生成链接脚本...
链接脚本已生成: STM32F407VGTx_FLASH.ld
[6/6] 生成GCC启动文件...
GCC启动文件已生成: startup_stm32f407xx_gcc.s
============================================================
生成结果统计
============================================================
成功生成: 6/6 个文件
✓ 所有文件生成成功!
生成的文件:
• Makefile: Makefile
• J-Link脚本: jlink_cmd.bat
• 构建配置: build_config.mk
• 构建脚本: make.bat
• 链接脚本: STM32F407VGTx_FLASH.ld
• GCC启动文件: startup_stm32f407xx_gcc.s
使用方法:
1. 编译调试版本: make.bat gcc debug
2. 编译发布版本: make.bat gcc release
3. 编译并下载: make.bat flash
4. 清理构建: make.bat clean
注意事项:
• 确保已安装ARM GCC工具链
• 确保已安装J-Link软件
• 根据需要修改生成的配置文件
📁 生成的文件说明
核心构建文件
文件名 | 描述 | 用途 |
---|---|---|
Makefile | 标准GCC构建文件 | 编译项目的主要文件 |
make.bat | Windows构建脚本 | 提供便捷的构建命令 |
jlink_cmd.bat | J-Link下载脚本 | 程序下载和调试 |
build_config.mk | 构建参数配置 | 编译选项和工具链配置 |
STM32F407VGTx_FLASH.ld | 链接脚本 | 内存布局和链接配置 |
startup_stm32f407xx_gcc.s | GCC启动文件 | 系统启动和初始化 |
Makefile 特性
生成的Makefile包含以下功能:
- ✅ 多构建模式 - 支持调试(-Og)和发布(-O2)模式
- ✅ 自动依赖 - 自动生成和管理文件依赖关系(.d文件)
- ✅ 多种输出 - 生成.elf、.hex、.bin等多种格式
- ✅ 调试支持 - 生成反汇编文件(.dis)用于死机调试
- ✅ 内存分析 - 生成内存映射文件(.map)和详细信息(.dump)
- ✅ 并行编译 - 支持并行编译加速构建过程
make.bat 构建脚本
Windows构建脚本提供以下命令:
# 编译命令
.\make.bat gcc debug # 编译调试版本(-Og优化 + 调试信息)
.\make.bat gcc release # 编译发布版本(-O2优化,无调试信息)
# 维护命令
.\make.bat clean # 清理所有构建文件
.\make.bat size # 显示程序大小和内存使用情况
# 一键操作
.\make.bat flash # 编译并下载到目标板
.\make.bat generate # 重新生成构建文件(当Keil项目更新时)
# 帮助信息
.\make.bat help # 显示详细的使用帮助
J-Link下载脚本特性
生成的jlink_cmd.bat
脚本包含:
- ✅ 自动检测 - 自动检测编译输出的.bin文件
- ✅ 多接口支持 - 支持SWD和JTAG接口
- ✅ 下载验证 - 包含下载后的验证功能
- ✅ 自动复位 - 下载完成后自动复位并启动程序
- ✅ 错误处理 - 详细的错误提示和处理
- ✅ 速度配置 - 可配置的下载速度(默认4MHz)
构建配置文件
build_config.mk
包含以下可配置项:
######################################
# 项目配置
######################################
PROJECT_NAME = STM32F407VGT6_TEST
######################################
# 调试配置
######################################
DEBUG_INFO = 1 # 调试信息开关 (0=关闭, 1=开启)
OPT_LEVEL = -Og # 优化级别
######################################
# 工具链配置
######################################
# GCC_PATH = /path/to/gcc # 自定义工具链路径(如果不在PATH中)
TOOLCHAIN_PREFIX = arm-none-eabi-
######################################
# 目标配置
######################################
MCU_FAMILY = STM32F4xx
MCU_DEVICE = STM32F407xx
CPU_TYPE = cortex-m4
FPU_TYPE = fpv4-sp-d16
FLOAT_ABI = hard
######################################
# 功能开关
######################################
USE_FREERTOS = 1 # 启用FreeRTOS
USE_FATFS = 1 # 启用FATFS文件系统
USE_USB_DEVICE = 1 # 启用USB设备
USE_RTT_DEBUG = 1 # 启用RTT调试输出
🔨 构建命令详解
使用 generate_makefile.py 生成的文件
使用 make.bat 脚本(推荐)
# 编译不同版本
.\make.bat gcc debug # 调试版本(-Og优化 + 调试信息)
.\make.bat gcc release # 发布版本(-O2优化,无调试信息)
# 一键操作
.\make.bat flash # 编译并下载到目标板
.\make.bat clean # 清理所有构建文件
.\make.bat size # 显示程序大小和内存使用
# 维护操作
.\make.bat generate # 重新生成构建文件(当Keil项目更新时)
.\make.bat help # 显示详细帮助信息
直接使用 Makefile
# 基本编译(使用默认配置)
make
# 指定构建模式
make DEBUG=1 OPT=-Og # 调试版本
make DEBUG=0 OPT=-O2 # 发布版本
make DEBUG=0 OPT=-Os # 大小优化版本
# 并行编译(加速构建)
make -j4 # 使用4个并行任务
# 清理构建文件
make clean
# 查看详细编译过程
make V=1
构建模式对比
构建模式 | 命令 | 优化级别 | 调试信息 | 适用场景 |
---|---|---|---|---|
调试版本 | .\make.bat gcc debug | -Og | 包含 | 开发调试 |
发布版本 | .\make.bat gcc release | -O2 | 不包含 | 产品发布 |
自定义 | make DEBUG=0 OPT=-Os | -Os | 可选 | 空间优化 |
实际编译结果对比
根据当前项目的实际测试结果:
构建模式 | 文本段大小 | 数据段大小 | BSS段大小 | 总大小 | 优化效果 |
---|---|---|---|---|---|
调试版本 | 75,472 字节 | 264 字节 | 8,112 字节 | 83,848 字节 | 便于调试 |
发布版本 | 43,116 字节 | 264 字节 | 8,120 字节 | 51,500 字节 | 减少43% |
构建输出文件说明
编译成功后,在 build/
目录下会生成以下文件:
build/
├── STM32F407VGT6_TEST.elf # 可执行文件(包含调试信息)
├── STM32F407VGT6_TEST.hex # Intel HEX格式(用于烧录)
├── STM32F407VGT6_TEST.bin # 二进制文件(用于OTA更新)
├── STM32F407VGT6_TEST.map # 内存映射文件(分析内存使用)
├── STM32F407VGT6_TEST.dis # 反汇编文件(死机调试)
├── STM32F407VGT6_TEST.dump # ELF详细信息(符号表等)
├── *.o # 目标文件
├── *.d # 依赖文件
└── *.lst # 汇编列表文件
🛠️ 环境要求和安装
必需工具
工具 | 版本要求 | 用途 | 下载地址 |
---|---|---|---|
Python | 3.6+ | 运行生成脚本 | https://www.python.org/downloads/ |
ARM GCC | 9.0+ | 编译STM32代码 | https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm |
Make | 4.0+ | 执行构建任务 | Git Bash / MinGW-w64 / MSYS2 |
J-Link | 6.0+ | 程序下载调试 | https://www.segger.com/downloads/jlink/ |
快速安装指南
Windows 环境
# 1. 安装Python(从官网下载安装包)
python --version
# 2. 安装ARM GCC工具链
# 下载并安装到默认路径,或解压到自定义目录
# 3. 安装Make工具(推荐使用Git Bash)
# Git Bash自带make工具
# 4. 安装J-Link软件
# 从SEGGER官网下载安装包
环境变量配置
确保以下工具在PATH环境变量中:
C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin
C:\Program Files (x86)\SEGGER\JLink
验证安装
# 检查工具是否正确安装
python --version # Python 3.6+
arm-none-eabi-gcc --version # ARM GCC
make --version # Make工具
JLink.exe -? # J-Link(Windows)
自动环境检查
使用 quick_generate.py
可以自动检查环境:
# 生成文件时自动检查环境
python quick_generate.py
# 只检查环境,不生成文件
python quick_generate.py --help
检查结果示例:
🔧 检查构建环境...
✅ ARM GCC: arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10)
✅ Make: GNU Make 4.3
✅ J-Link: 已安装
✅ 环境检查通过
⚙️ 完整工作流程
典型开发流程
# 1. 初始化项目构建系统
python quick_generate.py
# 2. 日常开发循环
make.bat gcc debug # 编译调试版本
make.bat flash # 下载到目标板进行测试
# 3. 发布准备
make.bat gcc release # 编译发布版本
make.bat size # 检查程序大小
# 4. 维护和更新
make.bat clean # 清理构建文件
make.bat generate # 重新生成构建文件(当Keil项目更新时)
CI/CD 集成示例
# GitHub Actions 示例
name: STM32 Build
on: [push, pull_request]
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Setup ARM GCC
uses: carlosperate/arm-none-eabi-gcc-action@v1
- name: Generate build files
run: python quick_generate.py --no-env-check --force
- name: Build debug version
run: make DEBUG=1 OPT=-Og
- name: Build release version
run: make DEBUG=0 OPT=-O2
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: firmware
path: build/*.hex
📋 配置文件详解
build_config.mk 完整配置
######################################
# 项目配置
######################################
PROJECT_NAME = STM32F407VGT6_TEST
######################################
# 调试配置
######################################
DEBUG_INFO = 1 # 调试信息开关 (0=关闭, 1=开启)
OPT_LEVEL = -Og # 优化级别
# 优化级别选项:
# -Og: 调试优化 (推荐用于开发)
# -O0: 无优化 (最佳调试体验)
# -O1: 基本优化
# -O2: 标准优化 (推荐用于发布)
# -Os: 大小优化
######################################
# 工具链配置
######################################
# 如果工具链不在PATH中,取消注释并设置路径
# GCC_PATH = C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin
TOOLCHAIN_PREFIX = arm-none-eabi-
######################################
# 目标配置
######################################
MCU_FAMILY = STM32F4xx
MCU_DEVICE = STM32F407xx
CPU_TYPE = cortex-m4
FPU_TYPE = fpv4-sp-d16
FLOAT_ABI = hard
######################################
# 内存配置
######################################
FLASH_ORIGIN = 0x08000000
FLASH_LENGTH = 1024K
RAM_ORIGIN = 0x20000000
RAM_LENGTH = 128K
CCMRAM_ORIGIN = 0x10000000
CCMRAM_LENGTH = 64K
######################################
# 编译选项
######################################
EXTRA_CFLAGS = -fstack-usage -fcyclomatic-complexity
EXTRA_LDFLAGS = -Wl,--print-memory-usage
WARNING_FLAGS = -Wall -Wextra -Wno-unused-parameter
######################################
# 功能开关
######################################
USE_FREERTOS = 1 # 启用FreeRTOS
USE_FATFS = 1 # 启用FATFS文件系统
USE_USB_DEVICE = 1 # 启用USB设备
USE_RTT_DEBUG = 1 # 启用RTT调试输出
######################################
# 下载配置
######################################
DEFAULT_PROGRAMMER = jlink # 默认下载工具
JLINK_DEVICE = STM32F407VGTx
JLINK_INTERFACE = SWD
JLINK_SPEED = 4000
常用配置修改
1. 切换优化级别
# 开发阶段 - 便于调试
DEBUG_INFO = 1
OPT_LEVEL = -Og
# 测试阶段 - 平衡性能和调试
DEBUG_INFO = 1
OPT_LEVEL = -O1
# 发布阶段 - 最佳性能
DEBUG_INFO = 0
OPT_LEVEL = -O2
# 空间受限 - 最小体积
DEBUG_INFO = 0
OPT_LEVEL = -Os
2. 自定义工具链路径
# 如果使用非标准安装路径
GCC_PATH = D:/Tools/gcc-arm-none-eabi-10.3-2021.10/bin
3. 添加自定义编译选项
# 启用更多警告
WARNING_FLAGS = -Wall -Wextra -Wpedantic -Wconversion
# 生成更多调试信息
EXTRA_CFLAGS = -fstack-usage -fcyclomatic-complexity -fno-omit-frame-pointer
# 链接时优化
EXTRA_LDFLAGS = -Wl,--print-memory-usage -Wl,--gc-sections
🔧 故障排除和调试
常见问题及解决方案
1. 环境相关问题
问题:找不到ARM GCC工具链
❌ 错误: 找不到ARM GCC工具链,请检查PATH环境变量
解决方案:
# 检查工具链是否安装
arm-none-eabi-gcc --version
# 如果未安装,下载并安装ARM GCC工具链
# 下载地址: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
# 添加到PATH环境变量(Windows)
set PATH=%PATH%;C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin
# 或在build_config.mk中指定路径
GCC_PATH = C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin
问题:Make工具未找到
❌ 错误: 'make' 不是内部或外部命令
解决方案:
# 安装Git Bash(推荐,自带make工具)
# 或安装MinGW/MSYS2
# 使用Git Bash运行命令
# 或使用完整路径
C:\Program Files\Git\usr\bin\make.exe
2. 编译相关问题
问题:头文件找不到
❌ fatal error: stm32f4xx_hal.h: No such file or directory
解决方案:
# 1. 检查Keil项目是否正确配置
# 2. 重新生成构建文件
python quick_generate.py --force
# 3. 手动检查包含路径
grep -n "C_INCLUDES" Makefile
问题:链接错误
❌ undefined reference to `main'
解决方案:
# 检查main.c是否在源文件列表中
grep -n "main.c" Makefile
# 检查启动文件是否正确
ls -la startup_stm32f407xx_gcc.s
问题:内存不足
❌ region `FLASH' overflowed by 1024 bytes
解决方案:
# 在build_config.mk中启用大小优化
OPT_LEVEL = -Os
# 或添加额外的优化选项
EXTRA_CFLAGS += -ffunction-sections -fdata-sections
EXTRA_LDFLAGS += -Wl,--gc-sections
3. 下载相关问题
问题:J-Link连接失败
❌ Cannot connect to J-Link via USB
解决方案:
# 1. 检查硬件连接
# 2. 检查J-Link驱动
# 3. 尝试不同的接口速度
# 编辑jlink_cmd.bat,修改速度设置
echo speed 1000 >> jlink_cmd.txt # 降低到1MHz
# 4. 检查目标板电源
# 5. 尝试JTAG接口
echo si JTAG >> jlink_cmd.txt
问题:下载验证失败
❌ Verify failed
解决方案:
# 1. 检查Flash是否被保护
# 2. 尝试先擦除芯片
# 在jlink_cmd.txt中添加
echo erase >> jlink_cmd.txt
# 3. 检查文件是否损坏
ls -la build/STM32F407VGT6_TEST.bin
调试技巧和工具
1. 编译调试
# 查看详细编译过程
make V=1
# 查看预处理结果
arm-none-eabi-gcc -E main.c -I... > main.i
# 查看汇编代码
arm-none-eabi-gcc -S main.c -I... -o main.s
# 检查编译器版本和配置
arm-none-eabi-gcc -v
2. 内存分析
# 查看程序大小
arm-none-eabi-size build/STM32F407VGT6_TEST.elf
# 详细内存使用分析
arm-none-eabi-size -A build/STM32F407VGT6_TEST.elf
# 查看内存映射
less build/STM32F407VGT6_TEST.map
# 查找最大的函数和变量
arm-none-eabi-nm --size-sort -r build/STM32F407VGT6_TEST.elf
3. 死机调试
# 根据死机地址查找源码位置
arm-none-eabi-addr2line -e build/STM32F407VGT6_TEST.elf -f -C 0x08001234
# 查看反汇编代码
arm-none-eabi-objdump -d build/STM32F407VGT6_TEST.elf | grep -A 10 -B 10 "8001234"
# 查看符号表
arm-none-eabi-nm -C build/STM32F407VGT6_TEST.elf | grep function_name
# 使用生成的反汇编文件
less build/STM32F407VGT6_TEST.dis
4. 性能分析
# 查看函数调用关系
arm-none-eabi-objdump -t build/STM32F407VGT6_TEST.elf
# 分析栈使用情况(如果启用了-fstack-usage)
find build -name "*.su" -exec cat {} \;
# 查看代码复杂度(如果启用了-fcyclomatic-complexity)
# 编译时会显示复杂度警告
最佳实践建议
1. 开发阶段
# build_config.mk 推荐配置
DEBUG_INFO = 1
OPT_LEVEL = -Og
WARNING_FLAGS = -Wall -Wextra
EXTRA_CFLAGS = -fstack-usage
2. 测试阶段
DEBUG_INFO = 1
OPT_LEVEL = -O1
WARNING_FLAGS = -Wall -Wextra -Wpedantic
EXTRA_CFLAGS = -fstack-usage -fcyclomatic-complexity
3. 发布阶段
DEBUG_INFO = 0
OPT_LEVEL = -O2
WARNING_FLAGS = -Wall -Wextra -Werror
EXTRA_LDFLAGS = -Wl,--gc-sections
自动化脚本
创建一键构建脚本
# 创建 build_all.bat
@echo off
echo 构建所有版本...
make.bat clean
make.bat gcc debug
make.bat gcc release
make.bat size
echo 构建完成!
创建测试脚本
# 创建 test_build.bat
@echo off
echo 测试构建系统...
python quick_generate.py --force --no-env-check
make.bat gcc debug
if errorlevel 1 (
echo 构建失败!
exit /b 1
) else (
echo 构建成功!
)
🚀 高级用法和技巧
1. 自定义编译选项
在配置文件中添加选项
# 在 build_config.mk 中添加
EXTRA_CFLAGS = -fstack-usage -fcyclomatic-complexity -fno-omit-frame-pointer
EXTRA_LDFLAGS = -Wl,--print-memory-usage -Wl,--gc-sections
临时使用编译选项
# 临时添加编译选项
make EXTRA_CFLAGS="-DDEBUG_LEVEL=2" EXTRA_LDFLAGS="-Wl,--verbose"
# 使用不同的链接脚本
make LDSCRIPT=custom_linker.ld
2. 多目标和多配置支持
为不同目标生成配置
# 为不同的STM32型号生成配置
python generate_makefile.py --config stm32f407_config.mk
python generate_makefile.py --config stm32f429_config.mk
# 为不同的构建类型生成配置
python quick_generate.py > debug_build.log
python quick_generate.py --minimal > release_build.log
使用不同的配置文件
# 使用特定配置文件构建
make -f Makefile CONFIG_FILE=debug_config.mk
make -f Makefile CONFIG_FILE=release_config.mk
3. 集成开发环境
VS Code 集成
创建 .vscode/tasks.json
:
{
"version": "2.0.0",
"tasks": [
{
"label": "STM32: Build Debug",
"type": "shell",
"command": "make.bat",
"args": ["gcc", "debug"],
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
}
},
{
"label": "STM32: Flash",
"type": "shell",
"command": "make.bat",
"args": ["flash"],
"group": "build"
},
{
"label": "STM32: Clean",
"type": "shell",
"command": "make.bat",
"args": ["clean"],
"group": "build"
}
]
}
创建调试配置 .vscode/launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"name": "STM32 Debug",
"type": "cortex-debug",
"request": "launch",
"servertype": "jlink",
"cwd": "${workspaceRoot}",
"executable": "build/STM32F407VGT6_TEST.elf",
"device": "STM32F407VG",
"interface": "swd"
}
]
}
4. 性能优化技巧
编译速度优化
# 使用并行编译
make -j$(nproc) # Linux
make -j4 # Windows
# 使用ccache加速重复编译
export CC="ccache arm-none-eabi-gcc"
程序大小优化
# 在 build_config.mk 中添加
OPT_LEVEL = -Os
EXTRA_CFLAGS += -ffunction-sections -fdata-sections -flto
EXTRA_LDFLAGS += -Wl,--gc-sections -flto
5. 自动化脚本示例
完整的构建和测试脚本
#!/bin/bash
# build_and_test.sh
set -e # 遇到错误立即退出
echo "🚀 开始完整构建和测试流程..."
# 1. 重新生成构建文件
echo "📁 重新生成构建文件..."
python quick_generate.py --force --no-env-check
# 2. 清理旧的构建文件
echo "🧹 清理构建文件..."
make clean
# 3. 构建调试版本
echo "🔨 构建调试版本..."
make DEBUG=1 OPT=-Og
# 4. 检查程序大小
echo "📊 检查程序大小..."
arm-none-eabi-size build/STM32F407VGT6_TEST.elf
# 5. 构建发布版本
echo "🔨 构建发布版本..."
make DEBUG=0 OPT=-O2
# 6. 比较两个版本的大小
echo "📈 版本大小对比..."
echo "调试版本:"
arm-none-eabi-size build/STM32F407VGT6_TEST.elf
echo "发布版本:"
arm-none-eabi-size build/STM32F407VGT6_TEST.elf
echo "✅ 构建和测试完成!"
自动部署脚本
#!/bin/bash
# deploy.sh
echo "🚀 开始自动部署..."
# 构建发布版本
make.bat gcc release
# 检查构建是否成功
if [ $? -eq 0 ]; then
echo "✅ 构建成功,开始下载..."
# 下载到目标板
jlink_cmd.bat
if [ $? -eq 0 ]; then
echo "✅ 部署成功!"
# 可选:备份固件
cp build/STM32F407VGT6_TEST.hex "firmware_backup_$(date +%Y%m%d_%H%M%S).hex"
echo "💾 固件已备份"
else
echo "❌ 下载失败"
exit 1
fi
else
echo "❌ 构建失败"
exit 1
fi
📚 参考资料和扩展阅读
官方文档
相关工具
- STM32CubeMX - 图形化配置工具
- STM32CubeIDE - 官方IDE
- PlatformIO - 跨平台开发环境
- OpenOCD - 开源调试器
学习资源
🤝 贡献和支持
问题反馈
如果你在使用过程中遇到问题,请:
- 检查本文档的故障排除部分
- 确认环境配置是否正确
- 查看生成的日志文件
- 提供详细的错误信息和环境信息
功能建议
欢迎提出改进建议:
- 支持更多STM32系列
- 添加其他调试器支持
- 改进构建性能
- 增强错误处理
版本历史
- v1.1 - 增强quick_generate.py功能,添加环境检查
- v1.0 - 初始版本,基本功能实现
📄 版本信息
项目 | 信息 |
---|---|
版本 | 1.1 |
作者 | Kiro AI Assistant |
支持的MCU | STM32F4系列 (主要测试F407) |
支持的IDE | Keil uVision 5.x |
支持的工具链 | ARM GCC 9.0+ |
支持的系统 | Windows (主要), Linux/macOS (部分支持) |
Python要求 | 3.6+ |
📜 许可证
本工具遵循项目的开源许可证。使用本工具即表示同意相关条款。
💡 提示: 如果你觉得这个工具有用,请考虑:
- ⭐ 给项目点个星
- 📢 分享给其他开发者
- 🐛 报告发现的问题
- 💡 提出改进建议
python脚本下载
快乐编程!🎉