五层进化 · 环境维度 👉 关于作者

历史的包袱

当你的代码活在十年前,而你的思想已经站在十年后。
那些被 Keil/IAR 钉死在 Windows 上的老项目,如何在不重写的代价下,成为 AI 能对话、能维护、能继承的资产。

itg · 公众号: 火星火箭 · 嵌入式AI工程化系列 · 工程遗产的解放之路

一、遗产不是罪,沉默才是

每个嵌入式工程师的硬盘里,都躺着一批 Keil/IAR 老项目。它们已经稳定运行了五年、十年,是公司的现金牛,是产品线的基石。它们沉默、可靠、不可触碰。没有人想重写它们——不是因为它们完美,而是因为当年写它们的人可能已经离职,当年用的芯片还可能带着七个硬件勘误,当年留下的注释只有一行// adjust this value

核心矛盾:你的 AI 方法论已经进化到能自治地管理代码与规约的知识生命体征,但你的老项目还活在一堵高墙之后。墙的一侧是现代 Linux 开发环境、VSCode、AI 助手、CLI 闭环;另一侧是 Windows 虚拟机、Keil/IAR 的图形界面、一个鼠标点来点去的编译按钮。每次你需要在老项目上做哪怕一行修改,你都要穿越这堵墙。

这份沉默是有代价的。它让你的老项目无法被 AI 理解、无法被自动化验证、无法被纳入你那套已经成形的五层进化体系。它们是历史,但历史不应是黑暗的。历史应该被照亮、被翻译、被赋予与当下对话的能力。

本文的主张:承认历史的物理惯性,但不被它定义。你不是在"全切 Linux"和"困在 Windows"之间做选择。你是在设计一套分层策略,逐步把老项目从供应商锁定的牢笼里,迁入你自建的、AI 可操作的开发生态。
策略分层 防御层 保留最低成本执行环境 抽象层 AI 翻译工程结构 进攻层 迁入 AI 友好的生态 从防御到进攻

图1:三层策略——防御层承认历史,抽象层翻译历史,进攻层超越历史。

二、防御层:把 Keil/IAR 变成一个"烧录按钮"

对老项目的日常维护,你真正需要 Keil/IAR 做的事情只有两件:编译,和烧录/调试。你不需要在 Keil 里面写代码、看代码、做版本对比。你的现代开发能力——VSCode 编辑、AI 对话、Git 管理——早已超越那个狭窄的 IDE 窗口。

防御层的核心思想是:不攻击 Keil/IAR,而是把它们封装成一个远程执行的命令。

具体做法:

  1. 保留一个最轻量的 Windows 环境——一台旧笔记本、一个工控机,或宿主机上一个干净到极致的虚拟机(只装 Keil/IAR + JLink 驱动,无其他任何负担)。
  2. 你的所有脑力工作(编码、AI 对话、版本管理)都在 Ubuntu 宿主机上进行。代码通过 Git 或共享文件夹同步到 Windows 执行环境。
  3. Keil 和 IAR 都有命令行编译接口。你在 Ubuntu 上写一个 Python 脚本,通过 ssh 远程触发 Windows 上的编译和烧录。编译输出、串口日志通过 TCP 转发回你的 Python 调试助手和 AI 分析流。

效果:你的日常主场已经是流畅的 Ubuntu。Windows 上的 Keil/IAR 退化成一个静默的"编译烧录服务器"——你甚至可以关掉它的显示器。你为老项目付出的"环境税",降低到了只是触发编译命令的那几秒网络延迟。

# 宿主机 Ubuntu 上的远程编译脚本(示例)
# 通过 ssh 触发 Windows 上 Keil 的命令行编译,并取回结果
ssh win-env "cd C:\\Projects\\OldFirmware && UV4.exe -b project.uvprojx -o build.log"
scp win-env:"C:\\Projects\\OldFirmware\\build.log" ./build.log
python3 parse_build_log.py build.log  # 将错误格式化为 VSCode problem matcher

三、抽象层:让 AI 成为你的"Keil 项目翻译官"

老项目最深的阻碍,不是编译工具链,而是它们的工程结构、配置选项、依赖关系全部藏在 .uvprojx.ewp.sct 这些二进制或半结构化的文件里。人读起来困难,AI 根本无法进入。这个项目对 AI 来说,是一个黑箱。

抽象层的使命是:喂给 AI 这些工程文件,让它生成一份 AI 可阅读、人可审查的"项目说明书"。

让 AI 做一次性翻译工作:

  1. 输入:.uvprojx / .ewp 工程文件、分散加载文件 .sct / .icf、启动文件 .s、以及 main.c 等核心文件,全部喂给 AI。
  2. 输出:AI 生成三份结构化文档——
    • 项目结构 Markdown:列出所有源文件、include 路径、预定义宏、链接脚本中的内存布局、外设基地址。
    • 平台无关的构建描述:CMakeLists.txt 初稿,或你的工具链能理解的 .json 配置文件。
    • 硬件抽象层(HAL)规格:这个老项目到底操作了哪些外设,GPIO 如何配置,中断向量表如何定义。

效果:经过这一次翻译,你立即获得了一个 AI 能读懂的旧项目。以后你问 AI:"这个项目的 SPI 时钟是多少?"它不用猜,而是有你的翻译文档作为知识基础。你还未真正迁移它的工具链,但你已经解放了它的设计意图。这份翻译文档,就是老项目进入 AI 对话世界的护照。

这一步不涉及任何代码修改,因此风险为零。但它为所有后续的维护、理解和演进工作,铺平了道路。它是历史被照亮的第一步。

四、进攻层:把老项目的"灵魂"迁移出来

如果某个老项目对你还有战略价值——需要长期维护、衍生新项目——那么你应该逐步把它的核心资产从 Keil/IAR 牢笼中抽离出来。核心资产不是代码,而是规格和约束。代码是那个时代的表达,规格才是超越时代的价值。

逆向提取核心资产:

  1. 用 AI 配合你的 PCB 分析器,把老项目的硬件原理图和代码中的外设操作对应上。
  2. 提取出所有应该在 agents.md 中存在的规约:"这个传感器需要 10ms 的启动时间"、"电机控制必须在 1ms 周期内完成"、"这颗 Flash 在写入后必须等待 3μs"。
  3. 用你的高复用模板重新生成一个平台无关的新固件骨架,在你的 Ubuntu + GCC 环境下开发。
  4. 用老项目作为黄金参考模型,用你闭环收敛的方法,让 AI 确保新固件在行为上与老固件一致。老项目的输入/输出数据,成为你的测试基准。

效果:你为一个有遗产价值的项目赋予了新生。它从一个特定供应商的牢笼中解放,迁入了你自己建立的、AI 可操作的开发生态。它现在可以享受你的五层进化的全部红利:负日志的可观测性、双轨收敛的测试保障、PCB 分析器的硬件感知、知识的生命体征管理。

核心原则:不是盲目的重写,而是为有遗产价值的项目赋予新的生命形态。那些没有战略价值的老项目,防御层和抽象层已经足够。只有那些还需要活很久、还需要不断演化的项目,才值得动用进攻层。

五、三层策略的选择指南

项目类型 推荐策略 核心动作
只需极偶尔维护、稳定运行多年的老产品 防御层 保留 Keil/IAR 执行环境,远程触发编译烧录
仍需定期维护、但无战略演进需求的项目 防御层 + 抽象层 防御层日常使用 + AI 翻译项目结构,获得可读性
有长期演进需求、需要衍生新产品的项目 全部三层 逐步逆向核心规约,迁入 AI 友好的开发生态

六、在五层进化框架中的定位

这篇文章处理的是五层框架的前置条件——在 AI 能够对项目施加任何影响力之前,项目本身必须从供应商锁定的工具链中被解析、翻译、解放。它与各层的关系如下:

五层框架 本方法论的对应
L1 上下文增强 抽象层:AI 翻译 Keil/IAR 工程结构,生成结构化文档,增强项目可读性
L2 可观测性 防御层中,编译结果和串口日志被转发到宿主机,进入统一的监控体系
L3 数据闭环 防御层的远程编译脚本成为 CI 的一环,编译错误自动反馈到 VSCode
L4 自动化 进攻层:用老项目作为黄金参考模型,驱动新固件的自动闭环收敛
L5 自治与共生 老项目规约被提取后,纳入知识生命体征管理。即使原始 IDE 被废弃,知识不丢失

七、历史不是负资产

嵌入式工程师常常觉得,老项目是包袱。它们用的工具是过时的,它们写的代码是陈旧的,它们占用的时间是沉默的。但真相是:老项目是被封装在过时工具链里的智慧结晶。那些为特定芯片勘误而写的绕行代码,那些在现场极端条件下被验证的时序参数,那些一个离职老工程师再也不会说出来的决策原因——这些才是真正有价值的东西。

你的工作,不是逃避这些历史,而是用你手中的方法论去照亮它。让 AI 读懂它,让工具链适配它,让它的知识从二进制工程文件的坟墓里被挖掘出来,成为你整个五层进化体系的一部分。

一条新的方法论原则:不为遗留工具链放弃先进环境,而是用抽象层将遗留工具链封装为可替换的执行模块。历史不应是锁链,而应是地基。你的体系,有能力将它们从锁链变成地基。

本文定位

本文是五层进化框架在环境维度的扩展。它回答了"如何将封闭 IDE 的老项目纳入 AI 工程化体系"这一现实问题,提供了三层递进策略:防御层承认约束、抽象层翻译意图、进攻层解放资产。建议与《知识的生命体征》共同阅读,理解知识一致性的全生命周期管理。

相关文章:① 五层进化 · ② 实践项目模板 · ③ 自主修复闭环 · ④ 从收敛到进化 · ⑤ 知识的生命体征 · ⑥ 电路图分析器 · ⑦ Skills · ⑧ 历史的包袱 · ⑨ 固件铭牌与设备画像 · ⑩ 合规验证与AI编程 · ⑪ 回归现实:单Agent实践框架

关于作者