嵌入式暑期实习必备八股文:项目能进门,基础决定你能不能过

你简历上写着「熟悉 STM32、做过 FreeRTOS、会 SPI/I2C」,面试官下一句往往还是:

volatile 到底解决什么问题?中断里能不能 printf?信号量和互斥量差在哪?」

很多暑期实习挂掉,不是项目假,而是基础题答得散、答得浅——听起来「用过」,一追问就露馅。这篇文章按暑期实习考察权重整理一套八股主线:先告诉你该背什么、背到什么程度,再按模块展开。

先说结论:暑期实习八股怎么分配时间

P0

C 语言(指针、内存、关键字)

能画图、能举寄存器/中断例子

P0

项目深挖

架构、数据流、调试闭环、你的贡献

P1

MCU + 外设 + 中断/定时器

原理 + 你板子上的引脚/时钟/DMA 选择

P1

通信协议 UART/SPI/I2C/CAN

时序、模式、典型坑

P2

RTOS(FreeRTOS 为主)

调度、同步、优先级反转、栈大小

P2

计算机基础

链表、栈队列、常见排序与复杂度

P3

Linux/驱动

投 BSP/驱动岗再加;纯 MCU 岗点到为止

一、C 语言:嵌入式面试的底线,也是分水岭

实习岗不会考你背完整 C99 标准,但会考和硬件、内存、并发相关的理解。

1. 指针与内存

必须能讲清:

  • 指针和数组的区别(类型、sizeof、传参退化)
  • 栈 / 堆 / 全局 / 常量区各放什么,嵌入式为什么慎用 malloc
  • 结构体对齐:规则、#pragma pack、为什么协议结构体要对齐
  • 函数调用:参数压栈、返回地址、局部变量在栈上——栈溢出在嵌入式里多致命

2. const / volatile / static

高频,且要和场景绑定:

volatile

防止编译器优化;硬件寄存器、中断共享标志、多任务无锁读写的可见性(不替代互斥)

const

只读语义、ROM 常量、接口契约

static

文件内链接、函数内静态局部变量生命周期

典型追问:中断里改 flag,主循环 while(flag==0),去掉 volatile 会怎样?

3. 位操作与宏

  • 置位、清位、读位的宏写法
  • 为什么寄存器操作用宏而不是随意魔法数
  • inline 和宏的取舍(实习常问概念即可)

4. 什么程度算「扎实」

  • 听过:能背堆栈区别
  • 会用:能写驱动式位操作
  • 过实习:能结合 中断 + DMA + 共享变量 讲清楚关键字和内存布局

嵌入式大厂面试题,基础八股文资料合集整理:

https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

二、RTOS:有 FreeRTOS 项目就必须系统准备

没 RTOS 项目也可能被问概念;简历写了 OS,这块几乎必问。

1. 核心概念

  • 任务 / 线程;就绪、运行、阻塞、挂起
  • 抢占式 vs 时间片;FreeRTOS 默认抢占
  • 调度时机:tick、主动 yield、阻塞 API

2. 同步与通信

二值/计数信号量

同步、资源计数

误当互斥用

互斥量

互斥访问共享资源

优先级继承、死锁

消息队列

传数据块

拷贝开销、长度设计

事件组

多事件等待

位标志设计

必背题链:信号量 vs 互斥量 → 优先级反转 → 如何避免(优先级继承、优先级天花板)→ 死锁四个条件。

3. 中断与任务边界

  • 中断里只做短逻辑:清标志、发信号、唤醒任务
  • 禁止:中断里 printf、阻塞 API、耗时循环
  • FromISR 版本 API 为什么存在

4. 稳定性相关(加分)

  • 任务栈怎么定(水位线 uxTaskGetStackHighWaterMark
  • configMAX_SYSCALL_INTERRUPT_PRIORITY 大意
  • 看门狗 + 任务监控思路

三、MCU 与硬件基础:要能「讲机制」,不是只会调库

1. GPIO / 时钟 / 复位

  • 推挽 / 开漏 / 上拉下拉适用场景
  • 时钟树:HSE/HSI、PLL、外设时钟使能——波特率算错很多是时钟源没搞清

2. 中断

  • NVIC、抢占优先级 vs 子优先级
  • 中断流程:入口 → 服务 → 退出;延迟从哪来
  • 中断 vs 轮询:实时性、CPU 占用、实现复杂度

3. 定时器 / PWM / 输入捕获

  • 计数模式、预分频、ARR 与频率关系
  • PWM 占空比怎么算;编码器测速常用捕获

4. DMA

  • 减轻 CPU、适合大批量外设搬运
  • 半传输/全传输完成中断;与 Cache 一致性(H7 等要懂一点)

5. ADC

  • 采样时间、分辨率、参考电压、多次采样滤波
  • 实习常问:为什么 ADC 值抖动,你怎么处理

6. 启动与存储(STM32 常考)

  • 上电从哪执行:Boot 引脚、向量表、.map 里各段
  • Flash 里代码 vs RAM 里运行(XIP、QSPI 外挂 Flash 等,结合你项目一句即可)

四、通信协议:UART / SPI / I2C / CAN

原则:会画时序、会说模式、能讲项目里选型理由。

UART

  • 帧格式:起始位、数据位、校验、停止位
  • 波特率误差容忍;RS232 / TTL 电平区别(了解即可)
  • 环形缓冲区 + DMA + 空闲中断接收帧(项目加分点)

SPI

  • 四线、主从、模式 0~3(CPOL/CPHA)
  • 全双工、速度高;片选、多从设备
  • vs I2C:距离、线数、速度、硬件复杂度

I2C

  • 开漏、上拉、地址、ACK/NACK
  • 400k / 1MHz;时钟拉伸;多主机了解即可

CAN(投车企/工控加分)

  • 多主、仲裁 ID、帧类型
  • 终端电阻、波特率与采样点(概念级)

五、计算机基础:实习会考,但权重低于 C 和项目

  • 数据结构:单链表反转、环检测、队列实现(RTOS 消息队列能联系)
  • 排序:快排思路、稳定性、O(n log n)
  • 进程 vs 线程:投 Linux 岗必问;MCU 岗也可能顺带
  • 大小端:协议组包、网络字节序

六、Linux / 驱动(定向准备,非人人必考)

岗位写 BSP、Linux 驱动、系统软件时再重点背:

  • 用户态 / 内核态;系统调用大致过程
  • 进程地址空间、虚拟内存为什么需要
  • 字符设备 vs 块设备;open/read/write/ioctl 流程
  • 设备树作用(ARM Linux 常见)
  • 内核里为什么睡眠、中断上下文限制

纯 STM32 实习:知道分层即可,别和 MCU 八股抢时间。

七、项目深挖:和八股同等重要

面试官用项目判断你是不是「能上手的人」。

每个项目至少准备 6 条线(建议写下来口述 3 遍):

  1. 系统架构:几个任务/模块、谁调谁
  2. 数据流:传感器 → 滤波 → 协议 → 存储/上报
  3. 控制流:状态机、异常分支、复位策略
  4. 关键参数:栈大小、队列长度、波特率、采样率怎么定的
  5. 调试闭环:示波器 / 逻辑分析仪 / 日志 / Shell / 仿真器用过什么
  6. 你的贡献:哪些是你独立完成的,哪些是参考例程改的(诚实但突出改动)

危险回答:「就是调了 HAL 库」「参考正点原子例程」。

安全回答:「例程基础上我改了 XX,因为 YY 现象,用 ZZ 验证」。

八、两周冲刺怎么排

第 1 周

  • 每天 2 小时:C 指针/内存/关键字 + 手绘栈帧
  • 每天 1 小时:RTOS 同步 + 中断边界
  • 每天 1 小时:协议时序 + 对照你项目原理图口述

第 2 周

  • 每天 2 小时:项目 6 条线 + 模拟追问(同学互问)
  • 每天 1 小时:过下面题单,只口述不默写
  • 隔天 30 分钟:1~2 道链表/排序手写

每天收尾:用 3 分钟录音答一题,听自己是否啰嗦、是否缺「项目一句」。

九、常见误区

  1. 只背题不解项目 —— 实习面试官会立刻转到板子
  2. 项目堆砌模块名 —— OTA、MQTT、LVGL 全写上,却讲不清数据从哪来到哪去
  3. RTOS 只会创建任务 —— 一问优先级反转就卡壳
  4. 外设只会 CubeMX 点选 —— 一问 DMA 双缓冲就哑火
  5. 忽视口述 —— 嵌入式面试大量是电话/视频,卡顿比写不出更致命
全部评论

相关推荐

05-19 16:41
复旦大学 Python
ynq2126:我一直觉得现在考算法题没啥意义 真要选拔人才不如把公司实际项目中遇到的问题当成一系列场景题抛给求职者答 这才是能检测能力的东西
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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