大疆|嵌入式软件开发|一面面经
大疆嵌入式软件开发岗位,一面通常不会只问「会不会用 STM32」,而是围绕全链路交付能力展开:从 Boot、驱动、RTOS/Linux,到性能、功耗、可靠性,再到你如何把一块板子做成可量产、可维护的产品。
根据近年投递反馈与岗位 JD(芯片底层到智能系统、异构平台、软硬协同),一面常见节奏是:
- 30% 项目经历与难点复盘(能不能讲清你负责什么、怎么验证)
- 30% 基础与架构(ARM、总线、OS 选型、中断与内存)
- 25% 编码或伪代码(C/C++、并发、协议解析)
- 15% 调试与工程素养(示波器/逻辑分析仪、日志、版本管理、协作)
面试题目:
- 选一个你参与度最高的固件模块:它的输入/输出接口是什么?如果重来一次,你会改架构里的哪一处?
- 产品要求 MCU 在 500ms 内进入可通信状态,你会从 Bootloader、时钟树、外设初始化、任务启动哪几段分别估时间?
- 说明 Cortex-M 异常向量表 与中断服务函数的关系;若中断里调用了不可重入的 printf,可能引发什么问题?
- DMA 循环模式 接收 UART 不定长帧时,如何用 IDLE 线检测或定时器判定一帧结束?半帧丢失如何发现?
- 在 FreeRTOS 里,软件定时器回调 与 普通任务 在执行上下文上有何区别?为什么回调里不宜做耗时操作?
- 两个任务通过 共享全局结构体 交换传感器数据,最少需要哪些同步手段?只关中断是否总是够用?
- 用 C 实现 无锁单生产者单消费者队列(仅说明思路亦可):头尾指针、内存序、溢出时策略分别是什么?
- I2C 设备 NACK 时,驱动层应重试、上报还是复位总线?结合上拉、时钟频率说明你的判断依据。
- 一块板子 USB 枚举偶尔失败,你会按什么顺序排查(供电、D+/D-、时钟、描述符、任务初始化顺序)?
- 片内 Flash 写参数 时断电可能导致什么后果?你会如何用「备份区 + 顺序号」或类似机制保证数据有效?
- 系统 运行数小时后偶发复位,你会如何区分看门狗、HardFault、电源跌落、栈溢出?各保留哪些日志或寄存器信息?
- 要把 10ms 控制环 和 LVGL 刷新 放在同一颗 MCU 上,任务优先级、中断抢占、CPU 占用率你会怎么规划?
- 解释 「内存对齐」 对结构体大小与 DMA 传输的影响;举一个因对齐不当导致读错数据的例子。
- 若模块需对接 上位机自定义二进制协议,帧格式(帧头、长度、校验、序号)你会怎么设计以兼顾可靠性与实现成本?
- 未来三年,你更想深耕 底层驱动 / RTOS 平台 / 感知与算法部署 哪一条?结合你现有项目说明理由
更多嵌入式大厂面试经验和题目以及基础八股文资料都放在专栏了:
https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
(oppo,vivo,海康威视,小米等大厂面经)