我怎么用 AI 一天学完 15 个嵌入式固件源文件

我怎么用 AI 一天学完 15 个嵌入式固件源文件

一句话: AI 不只是写代码的工具。把它当老师用——追问每个概念直到彻底搞懂、不让它帮你写而是让它帮你解释——一天能从零吃透一个上万行的嵌入式项目。分享我的学习方法。

系列文章:《AI赋能嵌入式开发》 — DeepSeek看图、AI当老师、AI审查代码、省Token技巧——用AI加速嵌入式开发

📄 含一键部署提示词 ✅ 一天学完15个源文件 📄 双窗口分工法 📄 7条血泪经验



@[TOC]

适合谁读:适合嵌入式开发者、单片机初学者及遇到类似问题的工程师

AI 能写代码,但别让它帮你写

我这段时间用 AI 做嵌入式开发,发现一个现象:

大多数人问 AI:"帮我写一个 I2C 从机驱动"→ AI 写好了 → 贴进去能跑 → 下次还是不会写。

我反过来用:不让 AI 帮我写代码,而是问 AI"这段代码什么意思"

比如看到这行:

pADI_CLK->CLKCON0 |= BITM_CLOCK_CLKCON0_CLKMUX;

不问 AI "帮我配个时钟",而是问:

"|=这个操作是什么意思?BITM_CLOCK_CLKCON0_CLKMUX是个什么东西?为什么用|=而不是=?"

AI 回答:|=是"只把某一位设成 1,其他位保持不变"。=会覆盖所有位,可能把旁边已经配好的功能全毁掉。BITM_前缀表示这是一个位掩码。

这一行懂了,后面所有|=&= ~的操作都不用再问了。因为原理是一样的——只改要改的位,不动其他位。


不跳步:每个概念追到彻底明白

嵌入式代码里全是这种"看起来简单但不知道什么意思"的东西:

我看到的东西我追问的问题
0U"数字后面加 U 是什么意思?"
volatile uint8_t g_bTick;"volatile 到底防止编译器做什么?不加会怎样?"
NVIC_EnableIRQ(22U)"22 是哪来的?为什么不用枚举名?中断号到底是怎么对应到向量表的?"
__disable_irq()"关中断之后如果忘了开会发生什么?为什么 Flash 写之前必须关中断?"
BITM_I2C_SSTAT_START"这个宏展开是什么?START 事件和 REPSTART 有什么区别?"

大多数教程会说"volatile 防止编译器优化",就完了。

我要追问到:"什么叫编译器优化?假如不加 volatile,编译器会怎么处理?能不能举个例子让我看到区别?"

AI 给了我一个场景:定时器 ISR 里g_bTick = 1,主循环while (g_bTick == 0)等——如果不加 volatile,编译器可能把g_bTick读到寄存器里反复用,永远看不到 ISR 改的新值。程序死循环。

懂了场景,volatile 就永远不会忘了加。


读写分离:一个窗口学,一个窗口做

我是个新手,刚开始看项目的时候连很多基本语法都不熟。

但我发现一个好办法:开两个窗口

窗口干什么
窗口 1(学习窗口)问 AI"这段代码什么意思""为什么这么做"——纯聊、纯学
窗口 2(工作窗口)写代码、改代码、编译、调试

为什么要分开?

因为混在一起会打断节奏。学的时候想"要不要试一下",试了发现跑不通,就忘了刚才学到哪了。两个窗口把"学"和"做"隔离开,学习窗口里只关注一件事:搞懂概念


跟着 CPU 的执行顺序学,不跟着目录学

第一天打开项目,16 个源文件,不知道从哪看起。

AI 告诉我:别按目录读,跟着 CPU 上电的流程走。

上电 → main() → App_Init() → 15 步初始化 → 主循环

于是我的学习路线变成了:

1. main.c — 先看懂"程序从哪开始、做了什么事" 2. app_state.c — 状态机是怎么跑的 3. app_monitor.c — 100ms 监控链路 4. mod_tec.c — TEC 温控怎么用状态机代替延时 5. app_cmis.c — I2C 寄存器表 + Page Select 6. drv_i2c_slave.c — I2C 从机中断状态机 7. drv_pi12030.c — SPI 怎么和外设芯片通信 8. drv_timer.c — 硬件定时器怎么触发 100ms 9. drv_adc.c — 8 路模拟采集 10. drv_flash.c — Flash 双备份 + CRC 校验 ...

每看完一个文件,AI 会告诉我"这个文件调了哪个驱动,下一个该看那个"。顺着调用链,一天之内 15 个文件全串起来了。


问"为什么",不问"是什么"

这是最关键的区别。

问"是什么"问"为什么"
"ISR 里不能放延时""为什么 ISR 里不能放延时?放了会怎样?"
"Flash 要双备份""为什么不能只存一份?写一半断电了怎么办?"
"状态机用枚举""为什么用枚举而不是直接写 0 1 2 3?"
"BSP 层收口引脚""不用 BSP 层会怎样?为什么不能直接调 DioClr?"

问"是什么"得到一个规则。问"为什么"得到理解。

理解了之后,你不需要死记规则——因为你知道违反规则的后果是什么。


遇到不懂的词立刻停下来

以前看教程,遇到不认识的缩写,我习惯"跳过,先看完再说"。

现在不一样了。看到volatile|=BITM_REPSTARTTMPGDAPC——遇到一个陌生的,立刻问 AI 这是什么意思

不攒着,不跳过去。"

为什么?因为嵌入式代码的术语是嵌套的——你不懂BITM_,就看不懂|= BITM_,就看不懂寄存器配置,就看不懂整个外设初始化。一个词卡住,后面全部白读。

AI 的好处是你可以无限追问,不用担心"问题太蠢"被嘲笑。


三步总结:我的学习法

步骤做什么例子
1跟着 CPU 执行顺序读,不按目录读main()开始,顺着调用链往下
2每个不认识的词立刻停下来问0Uvolatile、`
3问"为什么"而不是"是什么""为什么 ISR 里不能放延时?放了会怎样?"

AI 在这个过程里的角色不是"代码生成器",而是一个永远不会烦的老师——你可以问它 50 遍同一个问题,从不同角度、用不同比喻,直到你彻底搞懂。

这就是我一天从零学到能理解整个 19 文件嵌入式项目的办法。不是什么天赋,就是不跳步 + 追问到底 + AI 当老师


实测对比:传统自学: 15个文件 ≈ 2-3周 | AI辅助+追问法: 15个文件 ≈ 1天

有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。

下一篇:含一键部署提示词——DeepSeek看图、AI当老师、AI审查代码、省Token技巧——用AI加速嵌入式开发