光迅科技秋招嵌入式一面:20 分钟只抠两个项目,SPI 与任务划分是重点
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 第一个项目的设计思路和实现方法是什么?
- 第二个项目的细节(面试官逐项追问)。
- SPI 是怎么设计的?用的是硬件 SPI 还是软件模拟?有什么注意点?
- 任务划分的依据是什么?
- 任务之间的通信方式有哪些?
- 内存是怎么分配的?
- 反问环节。
《参考解析》
20 分钟的面试里,项目要讲「决策」而不是「功能」。每个项目准备三句话:解决什么问题、你做了哪个模块、关键设计是什么(为什么这样选)。面试官追问设计思路,就是在看你是否真的做过取舍。
SPI 硬件还是模拟:硬件 SPI 由外设产生时钟与移位,CPU 占用低、速率高,缺点是引脚固定、片选与时钟极性配置受限于外设;软件模拟(GPIO 翻转)灵活、可任意引脚,但速率受 CPU 与中断影响,时序抖动大。注意点要能说出几条:CPOL/CPHA 四种模式必须与从设备手册一致;片选建立与保持时间;高速时走线要短、必要时串阻匹配;DMA 搬运减少中断;多从设备时片选互斥与总线仲裁。
任务划分的依据:按周期、优先级、阻塞特性拆——周期采集一个任务、协议解析一个任务、业务计算一个任务、通信发送一个任务、监控与日志一个低优先级任务。划分的目标是让高优先级任务不被长计算阻塞,同时减少共享状态的锁竞争。
任务间通信:队列(传数据,带拷贝或指针)、任务通知(最轻量,适合一对一事件)、信号量(同步与计数)、互斥量(保护共享资源,带优先级继承)、事件组(多条件等待)。ISR 里只能给信号量/通知,不能阻塞。
内存分配:静态分配优先(编译期确定,无碎片),动态分配用内存池或固定大小块(避免长时间运行后的碎片),FreeRTOS 的 heap_4 带合并、heap_5 支持多区域;要能说出栈大小怎么估(看栈水位、留 20%-30% 余量)以及怎么检测溢出(哨兵、MPU)。