☰
嵌入式开发中用Vibe Coding的半年实战:从真香场景到翻车重灾区
2026/9/25 1:45:25 网站建设 项目流程

Vibe Coding这个词在2025年初突然火起来的时候,嵌入式圈子里一半人嗤之以鼻,另一半人嘴上不说、私下已经偷偷在用了。我属于后者,而且用了大半年之后,反而对嵌入式开发这件事本身想通了不少东西。先说结论:Vibe Coding在嵌入式开发里既不是万能药,也不是洪水猛兽,它更像一个能力忽高忽低的实习生——你用好了,效率翻倍;你用不好,它能把你的板子搞冒烟。这篇文章我想认真聊聊这半年我在嵌入式项目里用AI辅助开发的真实体会、踩过的坑、以及我对“AI写代码”这件事的理解。

先说清楚Vibe Coding到底是个什么。这个词最早是Andrej Karpathy在2025年初提出来的,大意是“你说出想法,AI帮你写代码,你只负责浏览、接受、微调,整个过程像是在跟着感觉走”。放到Web开发、脚本工具的语境里,这套流程确实行得通——需求描述得够清楚,AI几秒钟就能给你整出个能跑的React页面或者Python脚本。但放到嵌入式开发,事情就没那么美好了:MCU资源受限、C语言指针满天飞、寄存器时序靠芯片手册慢慢抠,AI生成的代码就算编译通过,能不能在硬件上正常工作,完全是另一码事。

这篇文章不是来唱衰AI的,也不是来捧杀它的。我打算结合自己实际做过的一个汽车电子相关的项目——一个基于STM32的传感器数据采集与蓝牙低功耗传输模块——具体聊聊在嵌入式开发的哪些环节用Vibe Coding是真香,哪些环节用了就是灾难,以及我总结出来的AI时代嵌入式工程师的工作方式和思考方式。如果你正在纠结“要不要在嵌入式项目里用AI写代码”、“用的话到底该怎么分工”,这篇文章应该能给你一些靠谱的参考。

1. Vibe Coding和嵌入式开发:两个世界的碰撞

1.1 为什么AI写代码在Web端为什么能成立,在嵌入式里却经常翻车

先想一个问题:为什么Vibe Coding能在Web开发里大行其道?

因为Web开发的反馈回路极短。你写了代码,浏览器一刷新立刻能看到结果,报错、白屏、样式乱掉,马上就能调。AI生成的代码即使第一版有问题,在快速试错循环里也能很快被修正。而且Web生态全是高层抽象,框架本身就是确定性输出,React组件就是函数,API调用就是HTTP请求,几乎没有“这个值在某种极端输入下会变成垃圾”的物理世界不确定性。

嵌入式开发则完全是另一种生物。

硬件系统有大量不确定性:同一个I2C设备在不同上电时序下的行为可能不一致,一个变量在没有volatile修饰时会因为编译器优化产生诡异行为,DMA和CPU争抢总线可能导致数据错乱。这些问题的根源在物理层,AI只靠文本上下文根本看不到你板子上那根线是不是虚焊了,也感知不到你用的那批芯片是哪个批次、哪个晶圆出来的。

我的一个真实经历:让AI生成STM32F103的I2C初始化代码,它自信满满写了一段标准库代码。我贴进去一跑,SDA线上信号完全不对。对照芯片手册查了半天才发现,AI用的那组GPIO复用配置依赖的是旧版固件库的引脚映射,而我工程里用的是新版HAL库,pin mux已经换了位置。AI不知道这些,因为它的语料里混着无数个版本的代码和无数种芯片型号,它只能给你一个“统计上最常见”的答案。问题是,嵌入式工程恰恰不能容忍“统计上最常见”,它要求的是“你这个板子上、你这个芯片型号、你这个固件版本下唯一那个正确配置”。

1.2 嵌入式开发的底牌:确定性、可追溯、硬件感知

嵌入式软件和普通软件有个本质区别:嵌入式软件是替硬件“表达”逻辑的,它必须对齐电气特性、时序要求、内存布局、功耗约束。这导致嵌入式的质量要求不是“能跑就行”,而是“在反复上电、温度变化、电磁干扰下都稳定”。

这么说可能有点抽象,我用一个简单的例子说明。有一次我需要让AI帮我在STM32上写一个ADC多通道采集的初始化代码。它给出了一个看起来毫无问题的配置:连续扫描模式、DMA循环传输、采样时间设为7.5个周期。但代码下载到板子上后,采集到的电压值总是偏高,而且有两个通道的数据串了位。排查了很久才发现,问题是DMA的mem2mem标志被误设成了使能状态,导致DMA把内存中的数据反复搬运,覆盖了正常采样的结果。这类问题在纯软件环境里永远不会暴露,但接上真实传感器、真实电源、真实干扰之后,分分钟现出原形。

这就是嵌入式开发的核心矛盾:软件的“语法正确”与硬件的“行为正确”之间存在巨大的鸿沟。AI擅长前者,而工程师必须守住后者。

1.3 嵌入式工程师面对AI的第一反应:先是怀疑,再是真香

我刚接触AI辅助编程工具时,第一反应是“这些东西离能帮我写嵌入式代码还远着呢”。后来现实打脸了。

转折点是一个调试任务。当时需要给一个旧的NXP MCU工程写一段USB HID设备描述符,这玩意儿又臭又长,全是字节偏移和端点配置。我其实是知道原理的,但真的不想手敲那几百行重复的二进制配置。抱着试试的心态让AI生成了一份,然后对照协议规范逐字段检查修正,半小时就搞定了。要是按以前的节奏,翻手册、数偏移、反复试枚举错误,没有半天绝对拿不下来。

从那以后我开始正视一个问题:Vibe Coding在嵌入式开发里的定位不是“替代人写代码”,而是“替代人去写那些有明确规范、大量重复、高信息密度但低创造性要求的代码”。比如USB描述符、CRC校验表、通信协议的封包解包函数、不同传感器型号的驱动框架,这些内容AI生成七七八八、人类审查修修补补,效率提升非常可观。但反过来,中断优先级规划、内存池设计、电源管理策略这些依赖项目整体上下文、需要深刻理解系统行为的环节,交给AI就等于把方向盘交给了自动驾驶,而你开的是一台在矿山里跑的重卡。

下面我展开聊聊,到底哪些活能放心交给AI,哪些活必须自己死磕。

2. 嵌入式开发里Vibe Coding真香的几个场景

2.1 上位机工具开发:我第一个吃螃蟹的地方

我做嵌入式项目有个习惯:任何MCU设备都配一个PC端上位机,用来收发数据、显示波形、调试参数。这类上位机本质上是纯软件工程范畴,对上位机开发来说,Vibe Coding是真的能打得准。

比如之前做电池管理系统(BMS)项目时,调试端需要实时显示十几节电芯的电压、温度,还要支持曲线绘制、数据导出。以前写这种PyQt或Tkinter应用,我得花一整天搭窗口、绑定信号槽、调布局。那天我让AI直接“开了一个工单”:帮我生成一个PyQt5应用,串口接收BMS协议帧,解析后更新曲线,要求曲线库用pyqtgraph,界面三个区域——实时曲线区、参数表格区、日志区。AI第一版给出的代码虽然布局有点糙,但整体结构是对的,我改了几个回调逻辑、调了一下刷帧频率就上线了。整个上位机从零到能用,加起来不到三小时。

这个效率差异让我意识到:嵌入式工程师根本没有必要把所有软件层面的工作都自己硬扛。上位机、数据分析脚本、自动化测试工具,这些“周边软件”恰恰是Vibe Coding的舒适区——逻辑独立、反馈快、不依赖硬件。把这块外包给AI,你能省出大量时间去啃真正的硬件难题。

2.2 通信协议解析与封包代码:AI的“搬砖”天花板

嵌入式开发离不开通信协议,UART、SPI、CAN、Modbus、私有协议,每天都在跟字节流打交道。这类代码的特征是高度结构化:帧头、长度字段、命令字、数据域、校验码、帧尾,每一步都有明确的格式和边界。对AI来说,这几乎是最适合生成的代码类型。

举一个实际案例。一个网关项目里需要同时解析Modbus RTU和CAN J1939两种协议。Modbus的CRC16计算、J1939的PGN转义、多帧拆分重组,这些逻辑不复杂但极其繁琐,而且每个字节的偏移算错一个,整个数据包就废了。我把协议文档丢给AI,让它生成解析和封包函数,并单独生成一组测试用例。AI一口气给出了60多个用例,覆盖了常规帧、最短帧、超长帧、校验错误帧、极短帧等边界情况。我跑了一遍,发现两个用例的断言写得有问题,改掉之后所有用例通过。这套协议解析模块以前至少要写一天,现在半天内完成且测试覆盖率更高。

我总结了一下为什么这类代码AI能行:协议解析是“确定性翻译”,输入输出映射完全由规范定义,不存在含糊地带。这种特性让AI的“统计预测”刚好卡在强项上——它从语料里学到的Modbus代码足够多,拼出一个正确实现并不难。

2.3 单元测试生成与正则表达式:被低估的MVP

嵌入式开发里单元测试的地位很尴尬。MCU端代码通常跑在裸机或RTOS上,依赖具体硬件外设,很难做单元测试。但关键在于,很多底层逻辑其实是与硬件解耦的——比如状态机、PID控制器、报文解析、滤波算法。这些函数输入输出完全由内存数据决定,不依赖寄存器,完全可以脱离硬件做测试。

有一次写一个锂电池SOC估算的卡尔曼滤波实现,需要验证多个工况下的数据收敛性。手动写测试矩阵太痛苦了,我把滤波函数丢给AI,让它生成一个数据驱动的测试集,包含不同初始SOC误差、不同电流噪声幅度、不同采样间隔的测试场景。AI生成的测试代码帮我找到三个边界问题——初始化协方差矩阵过大时数值溢出、重采样率过低导致估计滞后、输入零电压时出现除零。这些问题靠人工测试样本大概率发现不了全部的,AI没有物理直觉但也因此没有“我觉得这样应该没问题”的偏见,它按你的要求穷举边界,这正是嵌入式工程师最需要的东西。

还有正则表达式。搞通信协议解析,从原始日志里提取特定字段是家常便饭。AI写正则的能力远超我的水平,我只要描述清楚“提取类型为01的帧,第三个字节后的2字节是小端温度,范围-40到125”,它给出来的表达式基本一次就能跑对。省下来的时间虽然不多,但积少成多,一个月下来省下的时间够我摸好几圈鱼了。

2.4 陌生代码解读与文档生成:老项目救星

嵌入式行业有个“祖传代码”难题。很多老工程没有注释、没有文档,逻辑绕得人想哭。以前遇到这种代码只能硬着头皮一行行啃,现在有了AI,效率完全变了。

我的一个典型用法是把一个看不懂的函数拆成几个部分,让人工智能解释每部分在做什么,并且提示潜在问题。比如在一个遗留的Bootloader代码里,有一段跳转到应用区的汇编,AI不仅解释了跳转前为什么要关中断、为什么要设置SP、为什么要清流水线,还提醒我“跳转目标地址与当前编译链接地址是否匹配”这个关键点。这一看就是有经验的嵌入式工程师总结过的内容,单靠啃汇编你很难想到这些。AI把这些“经验知识”整理成通俗解释,能够直接转化为你的排查线索。

文档生成也一样。让AI为一个外设驱动模块生成API注释和README,它写出来的说明文档至少能达到一个初级工程师的水平,我再补充硬件设计上的背景信息,一份像样的技术文档就有了。以前写文档是最磨人的收尾工作,现在成了最先完成的环节之一。

3. 嵌入式开发里Vibe Coding翻车的重灾区

3.1 底层硬件抽象层(HAL):AI的“三手知识”陷阱

如果说上位机和协议解析是Vibe Coding的甜蜜区,那底层HAL层就是它的百慕大三角。

原因在于AI的知识来源:它从GitHub、技术博客、论坛帖子里学到的底层代码,很多都是二手甚至三手信息。芯片手册更新了,引脚定义换了,寄存器位域改了,HAL库版本迭代了,AI的语料里新老信息混杂,它根本无法分辨哪些已经过时。而你真正需要的,是精确到芯片型号、固件库版本、板级硬件设计的“单点真相”。

我给汽车电子项目写SPI-Flash驱动时,让AI生成W25Q128的写入函数。它生成的代码逻辑基本正确,但扇区擦除命令、状态寄存器轮询位这两个关键细节写错了,导致整片擦除后数据一直不对。排查时我一度怀疑是硬件连线问题,后来打开W25Q128的手册逐条对照才发现,AI把JEDEC标准里的FFh状态位解读错了。这类问题在纯软件项目中根本不会出现,因为状态寄存器的每一位都有电气意义,必须逐位核对。

所以我对Vibe Coding在嵌入式里的第一条戒律是:凡是直接操作寄存器、配置外设初始化的时间,必须自己对着参考手册过一遍。AI可以给你一个初稿,但初稿必须当作草图,而不是成品。

3.2 实时性与中断逻辑:时序里的“薛定谔的bug”

嵌入式系统里最让人头疼的问题是什么?不是编译错误,不是逻辑错误,而是偶发性时序问题——系统有时候正常,有时候异常,而且极难复现。

这类问题AI基本帮不上忙,因为在AI的文本世界里不存在“物理时间”。它不知道一次I2C中断服务函数执行超过100微秒,会导致主循环里的传感器采样周期漂移;不知道一个delay_ms(10)在SysTick被高优先级中断抢占后实际会变成30毫秒;更不知道当DMA buffer地址没有对齐到4字节边界时,在某些Cortex-M3芯片上会产生总线错误。

我有个真实翻车经历:让AI写一个多级中断嵌套的代码框架,它给出的配置里给定时器中断和串口中断分配了不同的优先级分组方案(一个是抢占优先级分组2,一个是分组3),实际运行时中断一直不嵌套,串口数据频繁丢失。查了半天才发现是两个中断源的优先级分组配置不一致,导致比较基准根本不同。这类“配置玄学”靠AI生成的代码无法避免,因为它看不到整个工程的系统配置上下文。

处理中断逻辑的正确姿势永远是:在纸上画出中断优先级、频率、共享资源、阻塞时间的完整图景,然后自己动手写。你可以让AI帮你生成某段中断处理函数的初稿框架,但最终的中断响应时间、临界区保护、信号量传递逻辑必须自己理解和把控。

3.3 内存、DMA与Flash:AI看不见的物理约束

嵌入式开发的内存管理比PC端复杂得多:栈大小要事前估算、堆碎片要控制、全局变量要尽量少、DMA缓冲区要地址对齐、Flash写入要擦除扇区、磨损均衡要设计。AI生成代码时几乎不会考虑这些物理限制,它默认你有一台无限资源、无限性能的虚拟机。

举一个例子。我让AI写一段ADC持续采样并通过DMA搬运到内存环形缓冲区的代码。编译通过,运行看似正常,但采样数据每隔一段时间就出现一段乱码。排查后发现问题出在DMA配置的传输宽度和外设寄存器地址宽度不匹配——AI用的是字节传输,而ADC数据寄存器是半字宽度。这种配置错误在编译时不会有任何警告,在运行时也不一定立刻崩溃,但长期运行下来数据质量一定变差。还有一次,AI生成的代码里用了一个512字节的栈上数组做JSON解析缓冲,这在PC上毫无压力,但我的MCU总共才20KB的RAM,光这一个数组就占了四分之一,直接撑爆了默认栈空间。

所以做资源受限平台,所有由AI生成的代码,必须过一遍“内存审计”——哪些数组放在栈上,哪些需要静态分配,是否对齐,功耗能不能接受,RAM/Flash余量多少。AI不帮你算账,这个账必须自己算。

4. 我实践出来的嵌入式Vibe Coding工作流

4.1 我的AI分工原则:AI负责生成“零件”,人负责设计“系统”

说完了真香和翻车两方面的现象,下面聊一下我实际总结出来的工作流。

我现在的AI使用方式是“零件外包,系统自研”。整个项目的架构、模块划分、任务调度、资源规划、接口设计必须由我自己完成,这些是系统的骨架和灵魂。而AI负责生成系统中的“标准件”——某个传感器的驱动函数、某种通信协议的解析类、某个状态机的实现代码、某份文档的初稿、某个上位机的页面框架。

以那个BMS电池管理系统为例,我自己的工作是确定状态机(休眠→充电→放电→故障)间的关系、定义CAN报文矩阵和ID分配、设计均衡策略和温度保护策略。AI负责的工作包括:生成CAN收发的中断处理框架、编写温度传感器NTC查表插值函数、生成上位机的参数标定页面、写一套自动化测试脚本验证SOC算法。这么分工下来,整个项目我能腾出四成左右的时间做以前没时间做的事情——比如硬件原理图复查、整板功耗测试、以及把代码的注释补齐。

4.2 一套实用的AI辅助嵌入式开发流程模板

如果你也想在嵌入式项目里引入Vibe Coding,我建议你按下面这个流程来操作,这套流程是我踩坑踩出来的:

第一步:需求原子化拆分。把大功能拆成一个个“可独立验证的小任务”,每个小任务要有明确的输入输出定义。比如“读AT24C02的EEPROM,地址范围0x00-0xFF,通过I2C读取,返回NULL表示失败”,而不是“写一个EEPROM驱动”。

第二步:给AI喂足上下文。把芯片型号、HAL库版本、编译工具链、工程里的引脚分配表、现有的代码风格示例,一并放在提示词里。信息越具体,AI的生成结果越接近你想要的。我见过太多人只说一句“帮我在STM32上写个温湿度传感器驱动”,然后抱怨AI写出来的代码跑不通——你把传感器型号、接线引脚、I2C地址、输出格式都告诉它,结果会完全不一样。

第三步:要求AI分段输出而不是一次性甩一大坨。让AI一次性写一个完整驱动,它的输出往往有隐含的假设和未定义的依赖。分段输出、逐段审查、逐段验证,虽然多两轮交互,但每次都能及时发现和修正问题,整体成功率反而高得多。

第四步:每段AI代码都必须做人工Diff Review。重点是检查四类问题:寄存器配置是否符合芯片手册、缓冲区大小是否越界、是否忽略错误返回、是否有未定义的依赖(比如某个头文件、某个宏定义)。这一步绝不能省,省了就等着半夜起来救火。

第五步:硬件在环验证。AI生成的任何代码最终都要跑到真实板子上做验证,不能因为单元测试过了就认为万事大吉。时序、功耗、稳定性和边缘输入下的行为只能在硬件上体现。

4.3 提示词这么写,AI的嵌入式代码才靠谱

AI生成嵌入式代码的质量,一半取决于模型能力,一半取决于你怎么提问。我总结了一套提示词写法,分享几个要点:

第一,明确硬件边界。比如:

“你是嵌入式开发专家,请帮我写STM32F103C8T6的I2C驱动,基于STM32Cube HAL库版本1.8.0,I2C1连接一颗AT24C02,地址为0xA0(7位地址0x50),PB6/SCL、PB7/SDA,系统时钟72MHz,要求支持100kHz标准模式,返回错误码需区分超时和NACK。”

第二,要求它“解释为什么”。别只让它给代码,让它同时解释每个关键配置的选择理由。这一步非常有用,因为它会逼着AI在知识库里检索对应芯片的真实特性,而不是凭印象生成。如果它的解释含含糊糊或者明显与手册矛盾,你就有理由怀疑代码质量了。

第三,主动要求它“考虑异常场景”。既然AI的默认输出是“理想状态下的代码”,那你就得明确要求它考虑异常。比如“如果传感器不响应怎么办?如果DMA传输在半途中发生总线错误怎么办?如果输入参数非法怎么办?”用这些追问逼AI补齐边界处理,生成的结果会扎实很多。

第四,给它提供现有工程的部分代码作为风格参考。把工程里两三个文件的头几十行丢给AI,让它按同样的风格和规范生成新代码,这样能最大程度减少与现有工程的风格冲突。我用这个方法之后,AI生成的代码几乎不需要额外调整格式就能合入工程。

4.4 效率到底提升了多少:我的实测数据

那实际效率提升到底有多大?我拿自己的时间记录说事。以前一个完整的嵌入式功能模块(比如带通信协议的传感器驱动+数据缓存+上位机调试界面),从动手到可验证,通常需要4到5个工作日。现在用了AI辅助之后,这个周期压到了2到2.5个工作日,大约提升了一倍。

但我必须强调一个反直觉的现象:编译类任务效率提升有限,排查类任务效率提升巨大。所谓编译类任务是那种“代码能写完,但就是跑不对”的情况,比如调时序、调中断、追内存问题,这种情况AI不仅帮不上忙,还可能因为你盲目相信它的初始代码引入更多变量。而排查类任务比如定位协议解析错在哪、查某个日志字段的含义、看一堆寄存器值推算系统状态,AI作为“知识库查询引擎”非常好用,能帮你迅速缩小范围。

另一个数据:以前写驱动时,大约六成时间在“翻译”芯片手册里的寄存器信息,现在这个比例降到了三成。省下来的时间我用来做硬件设计评审和编写自动化测试了,项目整体质量有明显提升。

5. 常见问题与避坑技巧实录

5.1 问题:AI生成的代码“看起来对”但“跑起来错”

这是嵌入式开发中用AI最常遇到的问题。代码逻辑看起来天衣无缝,编译不报错,但下载到板子上就是达不到预期效果。

排查方法要从“代码逻辑”切换到“硬件行为”。先把代码里的配置参数和芯片手册逐一对照,尤其是时钟树配置、GPIO复用功能、中断优先级、DMA通道映射这几类最常出错的配置项。然后,用逻辑分析仪或示波器观察关键引脚的波形,看时序是否符合预期。一条最简单的经验是:先把AI改写的代码还原成你熟悉的手写方式,分模块替换,找到第一个行为不正常的模块,再从那里开始深挖。

我遇到的最隐蔽的一个问题是:AI生成代码里的变量自动使用了uint8_t类型,用来存储一个长度计算表达式的结果。当长度超过255时,数据被截断,导致协议帧长度字段不对。这种类型长度错误在代码审查时非常容易被忽略,因为它在大多数数据量小的场景下根本不会触发。

5.2 问题:AI“一本正经地胡编”——幻造的寄存器与API

AI生成嵌入式代码最大的坑就是幻觉:它会编造出一个看起来很专业、但实际根本不存在的寄存器名或API函数。

有一次,AI给我生成ESP32的蓝牙配网代码,里面写了一个叫esp_ble_gap_set_scan_params_ext的函数。我查遍了ESP-IDF的头文件,根本没有这个函数名,但AI信誓旦旦说它是ESP-IDF 5.x版本里的新接口。最后只能上GitHub去翻真实API列表,把函数名改成正确的esp_ble_gap_set_scan_params,参数列表也按实际版本的函数签名重新写了。

应对幻觉的办法只有一个:凡是AI生成的代码里出现的API调用、寄存器名、结构体字段,都要去权威文档核对一遍,不要因为“AI说这是5.2版本的新特性”就轻信。核对的成本其实不高,但漏掉一次就可能烧板子。

5.3 问题:AI对不同芯片型号和框架版本的知识混淆

另一个高频问题:AI的知识库里混着大量架构相似但细节不同的芯片型号,它会理所当然地把A芯片的寄存器配置放到B芯片上。

最典型的例子是STM32F1系列和STM32F4系列。这两个系列的GPIO配置方式完全不同——F1是复用开漏输出,F4是复用推挽输出且需要配置GPIO速度。AI经常把F1的配置风格套在F4的项目里,编译倒是能过,但引脚就是不出信号。还有就是ST HAL库和标准外设库的混用问题,我在代码里见过AI用HAL库的函数名搭配标准库的初始化结构体,编译直接报错都算轻的,最怕的是两边都能编过,但运行结果诡异。

我的处理方式是:在提示词里明确指定芯片系列(比如“STM32F401CCU6,属于F4系列,不是F1系列”),并且在代码审查时对照芯片手册重点检查系列特有的配置项。发现问题后把正确配置写回提示词当作“新知识”,再让AI基于修正后的配置重新生成,过程比较痛苦,但可靠性高很多。

5.4 问题:AI代码里“暗藏”的功耗坑

做电池供电的设备,功耗是命根子。AI生成的代码几乎不会考虑功耗——它不会主动关闭不用的外设时钟,不会把GPIO配置成低功耗模式,更不会在空闲时让MCU进入Sleep状态。

有一次我让AI写一个带RTC定时唤醒的传感器采集程序。AI生成的代码把传感器电源引脚一直拉高,RTC中断唤醒后循环里还跑着一个忙等待延时。整机电流比我设计的待机指标高了整整3mA。对于一块200mAh的电池来说,这意味着续航缩短了两个星期以上。

所以让AI生成低功耗相关的代码,必须额外在提示词里补一条“请考虑所有外设的电源管理,包括关闭未使用的外设时钟、配置空闲GPIO为模拟输入、在主循环无任务时进入STOP模式”。然后,最终功耗数据一定要实测,用电流计看整板电流曲线是否符合设计预期。AI不会心疼你的电池,只有你会。

5.5 避坑技巧总结:用AI生成嵌入式代码的四条铁律

兜兜转转说了这么多,核心避坑经验归纳成四条铁律:

第一条,AI生成的代码只配当“第一个草稿”,永远不配当“最终答案”。你可以享受它帮你快速起稿的效率,但你必须投入比手写更多的精力去审查打磨。

第二条,凡是和芯片寄存器打交道的地方,必须对照参考手册逐项核实。这条没得商量。

第三条,先做单元测试和静态审查,再上硬件验证。顺序不能反,否则出了问题你无法判断是代码问题、硬件问题还是调试方法问题。

第四条,每次从AI那里得到有效的修正信息,都把它沉淀成工程里的注释或文档。AI会忘,你不会。

6. 嵌入式工程师在Vibe Coding时代如何自处

6.1 芯片手册和示波器,比任何AI都“值钱”

这半年用下来,我对“AI会不会取代嵌入式工程师”这个问题有了自己的答案——它取代的是那些不愿意扩展边界、只满足于顶多把别人代码拼起来的“码农”,但它无法取代真正吃透硬件系统的人。

AI可以在1分钟内读完一份800页的芯片手册,但它不理解为什么这个具体项目的“布线寄生电容”会导致I2C信号沿变慢,也不理解为什么在这个电机控制场景里需要把PWM死区时间设为2微秒而不是库默认的1微秒。这些知识不是在语料库里统计出来的,是从示波器波形上肉眼观察、从硬件故障排查中磕磕绊绊总结出来的。这部分“经验”才是嵌入式工程师的护城河。

我在实际面试新人时,现在会多问一个问题:“如果你手里的板子突然不工作了,你的排查顺序是什么?”说实话,凡是能流利回答出“先看电源、再看时钟、然后查复位、量波形”的人,AI抢不走他的饭碗。他的思路是诊断式的、物理感知式的,而不是“我重新编译试试”式的。

6.2 从“写代码的”进化为“定义问题的”

Vibe Coding时代最深刻的改变不是编程效率本身,而是工程师的角色重新定位:代码的“物理打字”工作被极大压缩,真正被放大的能力是“定义问题”的能力。

你能否把老板一句含糊的“做一个低功耗的环境监测装置”拆解成具体的MCU选型、传感器选型、通信方式、功耗预算、唤醒策略、数据格式?你能否在动手写第一行代码之前,在脑子里把整个系统从上电、初始化、采集、传输、休眠的过程完整过一遍?你能否在没有AI提示的情况下,靠对硬件的理解判断出某个设计在“极限温度、极限电压”下会出什么问题?

这些能力决定了你能不能用好AI。如果你的问题定义得足够清晰,AI就是一把锋利的刀;如果你的问题本身就模糊不清,AI只会把糊涂状态放大成更混乱的代码。

6.3 我认为未来的嵌入式开发者会分化为三种类型

基于我这些年的观察和思考,AI时代的嵌入式工程师很可能会分出三种路线:

第一种是“系统架构师”路线。这种人可能动手写代码的频率变低,但负责整体方案设计、软硬件划分、安全冗余设计、功耗与性能平衡。他们需要比AI更懂系统全局,能把抽象需求变成可实现的工程约束。这是我个人认为最有长期价值的方向。

第二种是“硬件专家”路线。专注芯片级设计、高速数字电路、电源完整性、信号完整性。AI写不了PCB,更设计不了模拟前端电路,硬件设计能力依然是硬通货。

第三种是“敏捷原型工程师”路线。用AI快速把想法变成能跑的demo,做产品概念验证和快速迭代。这种人不需要什么都深入,但需要对软件和硬件都有足够的广度,配合AI在短时间内搭出可演示的原型。在创业公司和小团队里,这种人会越来越吃香。

三条路线没有绝对好坏,关键在于你想走哪条,以及你愿不愿意为此补上对应的能力短板。

6.4 一条最实用的建议:把AI当“新来的实习生”来带

最后聊一个非常接地气的话题——我是怎么调整自己的心态的。

有段时间我特别焦虑,觉得AI写代码这么厉害,迟早会让我失业。后来我想通了一件事:AI之于嵌入式开发,就像一台可以自动换刀的数控机床之于一个老钳工——钳工不会被机床取代,但不愿意学数控编程的钳工一定会被会用机床的钳工取代。AI不是你的竞争者,它更像你的“新来的实习生”。你不会因为你带了一个实习生就没事做了,反而要花更多心思去解释思路、约束边界、检查产出、纠偏方向。但在这个“带人”的过程中,你的系统设计能力、架构能力和决策能力反而变得更重要了。我用AI写了大量代码之后,再也没有手敲过几十行GPIO初始化,但我会花更多时间思考“这条总线在2米线缆长度下能不能稳定跑到400kHz”。这大概就是Vibe Coding对嵌入式工程师的终极重塑——它释放了你敲键盘的手,让你有更多心思用脑子去理解物理世界的运行规律。

我个人的体会是:AI能不能成为你的得力干将,取决于你脑子里有没有一张“硬件系统全景图”。如果你拿着这张图去用AI,它就是你的超级实习生;如果你只是拿它当自动补全工具用,那你可能连它给你的垃圾代码和好代码都分不出来。这大概才是Vibe Coding时代嵌入式工程师最值得思考的命题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询