乐于分享
好东西不私藏

「迷雾札记」嵌入式AI开发:构建CLI工具链实现Vibe Coding

「迷雾札记」嵌入式AI开发:构建CLI工具链实现Vibe Coding

引言

AI编程在纯软件领域已经大杀四方。程序员可以对着AI说一句”帮我写一个待办事项应用”,几分钟后就能得到一个完整可运行的项目。这种被Andrej Karpathy称为”Vibe Coding”的开发方式,正在重塑软件开发的工作流。

然而在嵌入式开发领域,AI的渗透率却出奇地低。你很少听到有人用AI写STM32程序,更别说让AI完成完整的嵌入式项目开发。

是AI不会写嵌入式代码吗?显然不是。

AI掌握了大量的嵌入式知识,理解寄存器、中断、DMA、RTOS,甚至能写出相当专业的驱动代码。真正的问题在于:嵌入式开发的工具链不友好,AI写完代码后无法验证、无法调试、无法形成闭环。

纯软件开发的AI工作流是这样的:

写代码 → 编译运行 → 单元测试 → AI分析结果 → 自动修复 → 再次运行

这是一个完整的闭环,AI可以不断试错、优化。

而嵌入式开发的现状是:

写代码 → 打开Keil → 点编译 → 点下载 → 接线 → 看串口 → 手动调试 → ...

每个环节都需要人工介入,AI被挡在IDE的图形界面之外,无法感知程序运行状态,无法形成有效的反馈闭环。

本文的目标:打破这个困局。

我们将构建一套完全CLI化的嵌入式开发工具链,让AI能够:

自动编译项目(CMake + GCC)自动烧写程序(OpenOCD)自动调试分析(GDB)感知硬件状态(串口监控、寄存器读取)形成完整的”编写-编译-烧写-调试-优化”闭环

最终实现的效果:你只需要用自然语言描述需求,AI就能自动完成嵌入式项目的开发,包括代码编写、编译、烧写、调试,全程无需打开任何IDE。


一、问题深度分析

1.1 嵌入式开发的特点

嵌入式开发与传统软件开发有三个本质区别:

1. 强依赖IDE

主流嵌入式开发都离不开集成开发环境:

Keil MDK:ARM Cortex-M系列最流行的开发环境IAR EWARM:高性能商业IDESTM32CubeIDE:ST官方IDEMPLAB X:Microchip PIC/AVR开发环境

这些IDE功能强大,但也带来了问题:所有操作都封装在GUI中,没有CLI接口,AI无法操作。

2. 需要硬件交互

嵌入式代码必须在真实的硬件上运行和验证:

程序需要烧写到MCU的Flash调试需要连接JTAG/SWD调试器验证需要观察LED、串口、传感器输出

这导致了一个关键问题:AI写完代码后,无法自己验证代码是否正确。

3. 缺少标准化测试框架

纯软件开发有完善的测试生态:

单元测试:JUnit, pytest, googletest集成测试:各种CI/CD工具测试覆盖率报告:自动化生成

嵌入式领域虽然有Unity, CppUTest等测试框架,但普及率极低。大部分项目根本没有自动化测试,全靠人工验证。

1.2 为什么AI在嵌入式领域”失灵”

让我们对比一下AI在两个领域的工作流程:

纯软件开发流程:

用户:帮我写一个字符串反转函数AI:[生成代码]用户:运行测试系统:测试通过 ✓AI:完成用户:帮我写一个HTTP服务器AI:[生成代码]用户:npm test系统:测试通过,覆盖率95%AI:完成

AI可以看到测试结果,知道哪里有问题,自动修改代码,形成闭环。

嵌入式开发流程:

用户:帮我写一个LED闪烁程序AI:[生成代码]用户:[需要手动打开Keil,新建项目,添加文件,配置芯片,设置时钟,添加启动文件,配置下载选项,点击编译,解决编译错误,连接调试器,点击下载,观察LED...]AI:???(AI已经退出了,后面全是人工操作)

AI写完代码后,整个工作流就断开了。后面所有的编译、烧写、调试都需要人工操作。这就是AI在嵌入式领域渗透率低的核心原因。

1.3 解决思路

要让AI真正接管嵌入式开发,必须做到三点:

1. 工具链CLI化

把所有GUI操作转化为命令行操作:

编译:cmake --build .烧写:openocd -f board.cfg调试:gdb -x debug.gdb

2. 状态可感知

AI必须能够”看到”程序运行的状态:

GDB可以读取寄存器、内存、变量值串口可以输出调试信息LED状态可以通过GPIO读取

3. 形成反馈闭环

AI写代码 → 编译 → 烧写 → 调试 → 读取状态 → AI分析 → AI修改 → 再编译...

每个环节都有反馈,AI可以不断试错优化。


二、技术栈详解

2.1 技术选型:CMake + GCC + OpenOCD + GDB

我们将使用以下开源工具链替代传统IDE:

CMake – 项目构建管理 替代Keil工程管理,跨平台、CLI操作、生成Makefile。

ARM GCC – 交叉编译器 替代Keil编译器,开源、ARM官方支持、多数MCU厂商提供支持包。

OpenOCD – 烧写调试服务器 替代Keil下载调试,开源、CLI操作、支持J-Link/ST-Link。

GDB – 调试器 替代Keil调试功能,命令行调试、AI可调用、功能强大。

这套技术栈的优势:

1. 完全CLI化 所有操作都可以通过命令行完成,AI可以直接调用。

2. 开源免费 没有商业授权问题,可以自由使用和分发。

3. 广泛支持

GCC:ARM官方维护,所有Cortex-M芯片都支持OpenOCD:支持主流调试器(J-Link, ST-Link, CMSIS-DAP等)CMake:行业标准构建工具,生态丰富

4. 平台无关 可以在Windows/Linux/macOS上运行,不依赖特定操作系统。

2.2 技术栈工作流程

AI驱动嵌入式开发的完整流程:

用户需求 → AI自动完成编译、烧写、调试、优化全流程

核心闭环:AI生成代码 → AI编译 →AI 烧写 → AI调试 →AI 反馈 → AI优化 → 再编译…

以LED闪烁为例:

1.用户提出需求:”让LED每500ms闪烁一次”2.AI分析需求,生成GPIO初始化、定时器配置代码3.CMake生成构建文件4.GCC编译生成main.elf5.OpenOCD烧写到MCU Flash6.GDB读取LED状态、寄存器值7.AI分析反馈:”定时器配置正确”或”需要调整分频系数”8.若有问题,AI自动修改代码,重新执行流程

2.3 OpenCode:AI开发助手

OpenCode是一个开源的AI编程助手,它有以下特点:

1. 开源免费

GitHub开源,可自由使用支持本地部署,数据隐私有保障

2. 支持多种大模型

OpenAI GPT系列Anthropic Claude系列本地部署模型(Ollama, LM Studio等)国内大模型(通义千问、文心一言等)

3. 强大的工具调用能力

可以执行shell命令可以读写文件可以调用编译器、调试器等工具支持自定义工作流

4. 项目级配置

通过opencode.json配置模型和工具支持AGENTS.md定义项目规范支持MEMORY.md记忆项目上下文

在本文中,OpenCode将作为整个工作流的大脑,负责:

理解用户需求生成嵌入式代码调用工具链完成编译、烧写、调试分析运行结果自动修复问题

2.4 各工具的职责

CMake的职责:

管理项目结构配置编译选项管理依赖关系生成构建文件

GCC的职责:

编译C/C++代码链接生成可执行文件生成调试符号优化代码

OpenOCD的职责:

连接调试器(J-Link/ST-Link)烧写Flash提供GDB服务器支持断点调试

GDB的职责:

加载调试符号设置断点单步执行读取寄存器和内存监视变量

OpenCode的职责:

理解用户需求生成代码调用工具链分析结果自动优化


三、AI编程工作流实战

3.1 工作流示例

以LED闪烁程序为例,展示AI驱动的完整开发流程:

步骤1:用户提出需求

让LED每500ms闪烁一次,使用定时器中断方式实现。

步骤2:AI生成代码 AI分析需求,自动生成GPIO初始化、定时器配置、中断处理等代码。

步骤3:AI编译项目 AI调用编译脚本,读取编译输出判断是否有错误,自动修复编译问题。

步骤4:AI烧写程序 AI调用烧写脚本,将程序写入MCU Flash。

步骤5:AI调试验证 AI通过GDB读取寄存器值、检查GPIO状态,验证程序运行正确性。

步骤6:AI自动优化 若发现问题(如定时器配置错误),AI自动计算正确参数并修改代码。

步骤7:形成闭环 整个过程无需人工介入,AI完成”编写-编译-烧写-调试-优化”完整闭环。

3.2 自动化测试反馈

为让AI感知程序状态,可采用以下机制:

1. 串口输出监控 代码中添加调试输出,AI读取串口数据验证运行状态。

2. GPIO状态检测 通过读取GPIO寄存器判断LED状态。

3. GDB寄存器监控 AI通过GDB读取任意寄存器值,进行位运算判断硬件状态。


四、效果对比与注意事项

4.1 与传统开发对比

传统Keil开发:

开发环境:安装IDE约2GB项目创建:手动配置工程向导代码编写:手动编写或复制编译烧写:点击按钮操作调试方式:手动设置断点迭代速度:分钟级跨平台:Windows only成本:商业授权费用

AI+CLI工具链开发:

开发环境:工具链约500MB项目创建:CMake自动生成代码编写:AI生成+手动调整编译烧写:脚本一键执行调试方式:AI自动分析迭代速度:秒级跨平台:Windows/Linux/macOS成本:开源免费


工具链的CLI化、自动化、智能化,是嵌入式开发的必然趋势。希望本文能为嵌入式AI编程的发展提供一些思路和实践经验。

让我们一起拥抱AI,让嵌入式开发也进入”Vibe Coding”时代!


作者:Exdimen 「迷雾札记」

辅助AI:GLM-5