其他
用 Keil MDK 构建嵌入式工程:扫描工程、枚举…
在存在 Keil MDK(uVision/UV4)工程的嵌入式项目中,执行 scan/targets/build/rebuild/clean 并返回 flash_file、debug_file 等产物路径供 jlink/openocd 使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15
适用场景
用 Keil MDK 构建嵌入式工程:扫特定
解决思路
- 首次使用前检查 skill 目录下的 skill/config.json,确认 uv4_exe 为 UV4.exe 的完整路径(必填),并按需设置 operation_mode:1 直接执行、2 输出风险摘要但不阻塞、3 执行前确认。
- 工程级共享配置统一写入 workspace/.embeddedskills/config.json 的 keil 段:project(默认工程路径,相对 workspace,构建成功后自动更新)、target(默认 Target 名称,构建成功后自动更新)、log_dir(构建日志输出目录,默认 .embeddedskills/build)。
- 参数解析严格按优先级从高到低:CLI 显式参数 → 环境级配置 skill/config.json → 工程级配置 .embeddedskills/config.json → .embeddedskills/state.json(上次构建记录)→ 搜索/询问。
- 选择子命令:scan 搜索当前目录下的 .uvprojx/.uvproj/.uvmpw 工程(低风险);targets 枚举工程中的 Target(低风险);build 增量编译(中风险);rebuild 全量重建(中风险);clean 清理工程(高风险);flash 通过 Keil 烧录(高风险,仅作兼容入口,优先建议改用 jlink/openocd)。
- 按执行流程操作:读取 config.json 确认 uv4_exe 路径有效;未指定子命令时默认执行 scan;未提供工程路径时先执行 scan 搜索工程;同时发现多个工程或多个 Target 时列出选项让用户选择,绝不自动猜测;build/rebuild/clean 按 operation_mode 决定是否需要确认;build/rebuild 成功后尽量从工程配置中解析 flash_file / debug_file 等产物路径;flash 仅在最近一次构建成功时允许执行;所有构建命令输出到日志文件后再解析并返回结构化结果。
- 扫描工程:python <skill-dir>/scripts/keil_project.py scan --root <搜索目录> --json。
- 枚举 Target:python <skill-dir>/scripts/keil_project.py targets --project <工程路径> --json。
- 执行构建类操作:python <skill-dir>/scripts/keil_build.py <build|rebuild|clean|flash> --uv4 <UV4路径> --project <工程路径> --target <TargetName> --log-dir <日志目录> --json;其中 rebuild 额外支持 --clean-first,用 -cr 而非 -r。
- 按统一的 JSON 结构消费输出:基础字段 status(ok/error)、action、summary、details,并可能附带 context、artifacts、metrics、state、next_actions、timing;成功时从 details/metrics 中取 log_file、flash_file、debug_file、errors、warnings、flash_bytes、ram_bytes,失败时读 error.code 与 error.message。
- 遵守核心规则:不修改工程配置文件(.uvprojx / .uvproj / .uvmpw / .uvoptx);.uvproj(旧版 MDK4)与 .uvprojx 共用同一套 XML 结构(Target/TargetOption/TargetCommonOption),产物解析、Target 枚举、扫描对两种后缀均支持;不自动猜测工程路径或 Target,有歧义必须询问用户;构建成功后优先用返回的 flash_file / debug_file 与 jlink/openocd 串联;flash 前必须确认最近一次构建成功(errors == 0);clean 不在自动流程中隐式执行。
- 输出与排错:构建失败时优先展示首个错误和日志文件路径;结果回显中始终包含工程名、Target 名、日志路径,若识别到产物路径也要回显;遇到编译器相关问题查阅 references/compiler-notes.md。
适用边界 · 注意事项
- 目标工程不是 Keil MDK 工程(没有 .uvprojx/.uvproj/.uvmpw),或使用其他构建系统。
- 本机未安装 Keil MDK、skill/config.json 中 uv4_exe 路径无效或 UV4.exe 不可执行。
- 需要烧录固件时——flash 仅为兼容入口,应优先使用 jlink/openocd。