校招 未知部门 / 硬件工程师 / 二面

[面试日期] 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 推荐面试题