速通嵌入式八股文:一篇文章打通面试高频点

嵌入式面试的八股文看似零散,其实高度集中在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 高频:

  • vTaskDelay vs vTaskDelayUntil
  • 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. 面试最爱问

程序跑飞了你怎么查?

标准思路:

  1. 复现问题
  2. 缩小范围
  3. 判断是软件 / 硬件 / 时序
  4. 验证假设

六、项目题:真正拉开差距的地方

面试官不怕你不会,怕你说不清

项目描述公式:

做了什么 → 为什么这么做 → 遇到什么问题 → 怎么解决 → 效果如何

加分点:

  • 用数据说话(延时 / 内存 / 吞吐)
  • 主动提 trade-off

一句话总结

嵌入式八股文不是零散知识点,而是围绕 内存、并发、硬件边界和工程经验 的一套完整逻辑;面试不是考你背了多少,而是看你能不能把系统“讲明白、跑稳定”。

全部评论
干货满满啊,必须收藏一波
点赞 回复 分享
发布于 昨天 16:12 江西
大佬干货真多
点赞 回复 分享
发布于 12-17 21:40 北京
mark
点赞 回复 分享
发布于 12-16 13:45 陕西

相关推荐

12-15 12:50
河北工程大学
sta666:我也是这个国际商业化的,三天,一天一面,就通过了,不过我是后端实习生,好好面感觉能过。
点赞 评论 收藏
分享
两位师弟的,很基础,主要还是你对于自己的项目能不能像讲故事一样给面试官讲出来,不过这家公司挺海的,可以练练手A: 1. 说一下它底层的任务切换的那个底层逻辑?2. 优先级反转了解吗?什么场景会出现优先级反转吗?遇到优先级反转这种场景应该怎么解决呢?3. 你用 STM32 做那些驱动外设的时候,你是用的库函数还是用的寄存器?4. STM32 的启动流程你了解吗? 5. 串口协议和 I 2 C 的主要区别?I 2 C 的起始信号你还记得吗?6. 介绍一下 SPI?项目相关: 1. 你项目里 ESP8266 这个模块的功能是你开发的,还是说用的也是串口控制的?2. ADC+DMA 配合缓冲区,ADC 你设的是什么模式?(循环模式和连续模式用的哪一个)3. 你那个 I 2 C 用的是 STM32 内部的硬件 I 2 C 接口吗?4. 第一个项目里面说到引入队列集,实现多个数据源统一监听管理功能,能说一下这个设计吗?5. 第二个项目里面构建的 work 队列后台调度架构是什么东西?能介绍一下吗?6. 第一个项目里的 8 个任务分别是负责什么的?7. 项目中 “抽象出统一的设备访问接口,使上层应用与硬件解耦” 是怎么实现的?能介绍一下怎么做的吗?B: 1.裸机开发和RTOS开发区别2.中断触发流程3.RTOS任务调度4.SPI,IIC选一个结合时序简单说一下5.为什么你使用软件IIC,以及如果IIC通信的时候主机收不到数据了如何排查
查看18道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务