校招 未知部门 / 硬件工程师 / 二面
[面试日期] 2026-08-07 [面试时长] 未知
[学校背景] 同济大学 | 985 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>面经2:小米 | 二面 | 大家电事业部</h2>
<p><em>来源为牛客付费专栏,以下仅收录公开可见内容,付费部分未收录。</em></p>
<h2>1. 自我介绍</h2>
<h2>2. 具体讲一下你的实习项目</h2>
<h2>3. 项目中 bootloader 这里怎么做的?</h2>
<h2>4. MCU 上电之后,讲一下程序的运行过程。</h2>
<p><strong>回答思路:</strong>从 Cortex-M 启动流程讲:</p>
<pre>上电复位
⬇
CPU 读取向量表
⬇
从向量表第一项获取初始 MSP
⬇
从第二项获取 Reset_Handler 地址
⬇
进入启动文件
⬇
初始化 .data、清零 .bss
⬇
系统时钟初始化
⬇
C 运行库初始化```
⬇
调用 main ()。
</pre>
<h2>5. 项目有没有考虑过功耗方面的问题?你觉得如何实现低功耗?</h2>
<p><strong>回答思路:</strong>从系统状态入手:正常工作 → 空闲 → Sleep → Stop / 低功耗模式 → 唤醒。</p>
<p>主要考虑进行优化的几个方向:</p>
<pre>- 降低 CPU 频率;
- 关闭不用的外设;
- 关闭 GPIO;
- 减少不必要的轮询;
- 使用中断唤醒;
- 使用 RTC 定时唤醒;
- 合理设计任务运行周期。
</pre>
<p>如果是 FreeRTOS,可以让系统空闲时进入低功耗,而不是一直空转。</p>
<h2>6. 实习中最难的 bug 是什么?怎么解决的?</h2>
<h2>7. 实习时工作时间是什么样?任务完不成怎么办?压力大吗?</h2>
<h2>8. 中断和普通函数调用有什么区别?为什么中断里不能使用 printf ()、delay 或者做大量计算?</h2>
<p><strong>回答思路:</strong>普通函数调用是程序主动执行,依赖 BL 等指令跳转;中断是硬件异步触发,由 NVIC 参与仲裁。中断发生后 Cortex-M 会自动保存部分现场,并通过向量表找到 ISR;普通函数则主要依靠编译器生成的调用 / 返回代码维护现场。</p>
<p>另外中断处理函数应该尽量短,不能在里面做大量阻塞、复杂计算或者长时间轮询。主要从实时性和系统稳定性考虑。</p>
<p>中断期间可能会影响其他中断和任务的执行:</p>
<pre>- 中断执行时间过长,会增加系统响应延迟;
- 可能造成高优先级任务无法及时运行;
- printf () 通常涉及大量计算和 IO 操作;
- delay () 属于阻塞等待,更不适合放在 ISR;
- 如果中断嵌套,还可能导致栈使用增加。
</pre>
<p>正确方式一般是:ISR 快速采集 / 记录事件 → 通过标志位、队列、信号量等方式通知任务 → 任务完成耗时处理。</p>
<h2>9. STM32 的中断响应流程是什么?</h2>
<p><strong>回答思路:</strong></p>
<pre>外设产生中断请求 → NVIC 检测中断 → CPU 响应异常 → 自动保存部分现场 → 获取对应中断向量 → 进入中断服务函数 → 执行中断处理 → 异常返回 → 恢复现场 → 回到被打断的位置。
</pre>
<p>需要理解 Cortex-M 硬件自动压栈的寄存器,包括:R0、R1、R2、R3、R12、LR、PC、xPSR。</p>
<h2>10. NVIC 的中断优先级是怎么管理的?</h2>
<p><strong>回答思路:</strong>Cortex-M 使用 NVIC 管理中断优先级。</p>
<p>需要区分:</p>
<pre>- 抢占优先级;
- 子优先级;
- 优先级分组。
</pre>
<p>高优先级中断可以抢占低优先级中断,但具体的优先级划分由优先级分组决定。实际开发中需要合理设置优先级,避免高优先级中断长期占用 CPU,也要注意 RTOS 对中断优先级的限制。</p>
<h2>11. 什么是 PendSV?为什么 RTOS 经常使用 PendSV 进行任务切换?</h2>
<p><strong>回答思路:</strong>PendSV 是 Cortex-M 提供的一个可挂起系统异常,特点是优先级可以设置得很低。</p>
<p>RTOS 通常利用:</p>
<pre>- SysTick:产生周期性系统节拍;
- PendSV:真正执行上下文切换。
</pre>
<p></p>
AI 推荐面试题
