速通嵌入式八股文:一篇文章打通面试高频点
嵌入式面试的八股文看似零散,其实高度集中在C 语言 + 操作系统 + 硬件 + 调试能力这四条主线。抓住这几条线,基本就能覆盖 80% 以上的问题。
一、C 语言:嵌入式面试的地基
1. 指针与内存
必问点:
- 指针和数组的区别
- 二级指针的使用场景
- 指针作为函数参数,什么时候能修改外部变量
核心一句话:
指针本质是地址,是否能“改到外面”,取决于你有没有拿到“地址的地址”。
全网最全面的嵌入式八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
2. const / volatile / static
- const:约束使用者,不一定真的只读
- volatile:告诉编译器不要优化(寄存器 / 硬件寄存器 / 中断变量)
- static:修饰局部变量:延长生命周期修饰全局变量 / 函数:限制作用域
高频追问:
为什么寄存器变量一定要加 volatile?👉 因为值可能被硬件或中断异步修改。
3. sizeof vs strlen
sizeof:编译期(或伪编译期),看类型strlen:运行期,看\0
面试陷阱:
char *p = "abc"; sizeof(p) // 4 / 8 strlen(p) // 3
二、操作系统:FreeRTOS / Linux 都逃不掉
1. 任务 / 进程 / 线程
- 裸机:死循环 + 中断
- RTOS:任务 + 调度器
- Linux:进程是资源单位,线程是调度单位
一句话区分:
线程共享地址空间,进程不共享。
2. 调度与优先级
- 抢占式 vs 协作式
- 时间片轮转
- 优先级反转 → 互斥锁 + 优先级继承
FreeRTOS 高频:
vTaskDelayvsvTaskDelayUntil- Tick 中断干了什么
3. 同步与通信
- 信号量:同步
- 互斥锁:保护资源
- 消息队列:数据传递
- 事件组:多条件同步
面试常问:
中断里能不能用互斥锁?👉 不能,用信号量 / FromISR 接口。
三、硬件基础:不是让你画芯片,是考你“懂不懂边界”
1. 中断
- 中断向量表
- 中断嵌套
- 中断和任务的区别
关键点:
中断要“短平快”,复杂逻辑交给任务。
2. DMA
- CPU 不参与数据搬运
- 提高吞吐、降低功耗
- 常见场景:UART / SPI / ADC
面试一句话:
DMA 解决的是“搬数据太浪费 CPU”的问题。
3. 外设通信
- SPI:快、全双工、短距离
- I2C:慢、地址寻址、设备多
- UART:简单、点对点
四、Linux 嵌入式:不是背命令,是理解模型
1. 启动流程
BootROM → Bootloader → Kernel → RootFS → App
常问:
- U-Boot 做了什么
- Kernel 启动参数从哪来
2. 驱动基础
- 字符设备三大函数:open / read / write
copy_from_user/copy_to_user- 设备树的作用
一句话:
驱动的本质是“把硬件抽象成文件”。
3. 用户态 vs 内核态
- 系统调用
- 中断 / 异常
- 为什么不能随便进内核
五、调试能力:决定你是不是“能干活的人”
1. 常用手段
- 打 log(串口 / printk)
- JTAG / GDB
- 示波器 / 逻辑分析仪
2. 面试最爱问
程序跑飞了你怎么查?
标准思路:
- 复现问题
- 缩小范围
- 判断是软件 / 硬件 / 时序
- 验证假设
六、项目题:真正拉开差距的地方
面试官不怕你不会,怕你说不清。
项目描述公式:
做了什么 → 为什么这么做 → 遇到什么问题 → 怎么解决 → 效果如何
加分点:
- 用数据说话(延时 / 内存 / 吞吐)
- 主动提 trade-off
一句话总结
嵌入式八股文不是零散知识点,而是围绕 内存、并发、硬件边界和工程经验 的一套完整逻辑;面试不是考你背了多少,而是看你能不能把系统“讲明白、跑稳定”。