嵌入式开发:把“编译→烧录→测试“变成一条命令
一句话: 用 Keil 命令行编译、命令行烧录、Python 脚本自动化串口测试配合 git 高频提交和测试指令隔离把点编译 → 点下载 → 串口助手反复复制粘贴的手工流程变成改代码 → 一条命令 → 全量回归报告。适合谁读还在用鼠标点编译、点下载按钮、手动开串口助手测协议的嵌入式工程师。手工流程的痛点平时调试嵌入式固件的循环是改代码 → 打开 IDE → 点编译 → 点下载 → 开串口助手 → 发命令 → 看回显 → 记结果一天重复几十次。痛点编译结果要盯着 Build 窗口烧录要点按钮烧错了板子要后悔协议测试靠串口助手手动发帧、手动对回显改了什么、测过什么全靠记忆第一步命令行编译结果可脚本化判断Keil 的 UV4.exe 支持命令行编译UV4.exe -b project.uvprojx -j0 -o build.log echo EXIT$? # 0 编译通过 grep -E Error|error build.log | tail -3-b批处理编译编译完自动退出-o log把输出写文件脚本可以 grep退出码 0 无错误1 有警告从此编译验证从人工看窗口变成脚本断言编译不通过提交脚本直接失败。第二步命令行烧录脚本可控两个选择方案 AIDE 自带命令行下载工程里配好调试器后最省事UV4.exe -f project.uvprojx -o flash.log # 日志里应有: Erase Done. Programming Done. Verify OK.方案 BJ-Link 命令行需要更细控制时JLink.exe -device 目标芯片 -if SWD -speed 4000 -AutoConnect 1 -CommanderScript flash.jlinkflash.jlink内容就三行loadfile build/firmware.hex r g qc踩过的坑J-Link 脚本里写connect命令会卡在交互等待烧录根本没执行。解法不要写 connect用命令行参数自动连接脚本只放烧录动作。第三步Python 自动化串口测试协议帧收发写成通用库测试用例全是脚本def build_frame(cmd, wr, datab): lenght 3 len(data) body [lenght 8, lenght 0xFF, cmd, wr] list(data) crc (0xFF - (sum(body) 0xFF)) 0xFF return bytes([FRAME_HEAD]) bytes(body) bytes([crc, 0x0D, 0x0A]) def recv_frame(ser, timeout1.0): # 找帧头 → 读长度 → 收数据 → 校验 CRC → 返回 ...然后测试就是脚本化的断言r cmd(1, 1, bytes([0x03, 0xE8])) # 设通道1 10.00mA assert u16(r[2], 0) 1000 # 回显一致 r cmd(24, 2) # 读监控电流 assert 3300 u16(r[2], 0) 3500 # 电流码在预期范围测试脚本还可以做数据驱动的验证——电流阶梯、温度曲线、全码扫描一次跑完带报告for ma in [0, 10, 50, 100]: # 阶梯 set_current(ma) time.sleep(0.2) code read_monitor() assert linear(code, ma) # 线性度断言第四步测试指令与正式协议隔离自动化测试要用一堆调试命令读寄存器、设特殊模式如果混进正式协议上位机同事会懵。规则测试指令从 50 号开始编号正式协议 1~26 保持不变cmd 1~26 正式协议 (上位机用) cmd 50 测试指令 (调试/标定/自动化脚本用)好处协议文档不用为测试命令改版上位机不受干扰测试脚本自成一族。第五步git 工作流配合自动化循环要能回到上一个状态git 是基石做法为什么高频提交每完成一个改动就提交被覆盖/改坏随时回退提交信息写详细改动/原因/验证/影响几周后还能知道当时为什么这么改源码与编译产物分开提交产物等烧录验证后再提交避免产物和源码对不上改前打 tag如before-100mA大改动前留恢复点一行命令回退一个防坑经验IDE 旧缓冲覆盖自动化改代码后IDE 里如果开着旧版本的文件你手动保存一次哪怕只改了一处IDE 会把整个旧缓冲写回磁盘——自动化做的改动被静默覆盖。防法IDE 开启文件监视自动重载改代码前git diff校验基线提交前 grep 关键值宏值、命令号确认发现被覆盖 →git checkout恢复串起来一条命令的调试循环# 1. 改代码 # 2. 编译 UV4.exe -b project.uvprojx -j0 -o build.log || exit 1 # 3. 烧录 UV4.exe -f project.uvprojx -o flash.log # 4. 回归测试 python tests/fulltest.py # 5. 通过就提交 git add ... git commit -m fix: ...效果从手工点按钮 串口助手 记笔记变成改一行 → 一条命令 → 拿到全量测试报告。测试清单里每项都有脚本对应回归成本趋近于零。环节手工自动化编译盯 Build 窗口退出码 grep 断言烧录点下载命令行 日志校验测试串口助手复制粘贴脚本断言 数据驱动回退翻备份文件git tag/checkout记录记忆 笔记提交信息 测试报告实测对比手工流程点编译→点下载→串口助手→复制粘贴 | 自动化后一条命令编译烧录回归测试有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇git几个救急命令——恢复文件、查看历史、删追踪——改坏了永远有退路