速腾聚创嵌入式软开一面:中间件、RTOS 与多相机同步
- 轮次
- 一面
- 结果
- 已约二面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 跨硬件、跨操作系统的平台中间件可以怎样分层设计?
- 远程过程调用框架的底层通信链路可以替换吗?为什么?
- 操作系统抽象层通常提供哪些公共接口?
- 构建过程中的重复文件搜索如何优化?为什么缓存能够明显降低耗时?
- 嵌入式系统的 A/B 分区如何瘦身并调整容量?
- 自动化测试如何说明覆盖范围?有哪些情况可能没有测到?
- 嵌入式设备的启动速度可以怎样定位和优化?
- 有限状态机的基本原理是什么?
- 分层状态机中,外层状态变化会影响内层吗?
- 没有操作系统的裸机能实现状态机吗?
- 裸机上如何模拟二值或计数信号量?
- 裸机上如何发送消息并让状态机处理?
- 屏蔽中断与发送消息之间是什么关系?
- 实时系统如何寻找最高优先级的就绪任务?
- 扫描就绪优先级与使用硬件位图指令,各自的时间复杂度是多少?
- 实时视频处理链路有哪些常见技术难点?
- 多摄像头同步的基本原理是什么?
- 如何让多个相机在同一时间点曝光?
- 不同相机的触发到曝光延迟不一致时,怎样处理?
《参考解析》
中间件分层的目标是“上层不感知硬件和 OS 差异”。 常见分法是 OSAL/HAL 提供线程、锁、时间、内存、网络和设备接口;传输层封装 TCP/UDP/共享内存/总线;RPC/IDL 层负责序列化、调用和错误码;服务层提供设备管理、配置、日志和升级;最上面才是业务应用。这样换 OS 或换通信介质时,主要改 HAL/传输实现,业务代码不动。RPC 的通信链路通常可以替换,前提是接口定义和序列化协议与传输解耦;替换时要重新评估延迟、吞吐、可靠性、顺序性和背压,不能只看“能通”。
构建优化和 A/B 分区都是系统工程。 重复文件搜索慢,通常是因为每次构建都全量扫描、重复计算哈希、没有依赖图;优化手段包括内容哈希缓存、include 依赖图、只扫描变更目录、并行哈希、把结果持久化。缓存之所以有效,是因为大部分文件没变,命中缓存可以跳过解析和编译。A/B 分区瘦身则可以从删调试符号、压缩文件系统、去重、裁剪不需要的语言/资源、用 delta OTA 入手;调整容量要考虑对齐、签名、元数据和回滚空间,不能把分区切得刚好满。
裸机状态机完全可行,关键是事件驱动。 主循环从队列取事件,按当前状态查表调用处理函数,处理函数返回下一个状态;状态表可以用二维数组或 switch,事件用枚举,复杂系统再做分层状态机。裸机模拟二值信号量可以用一个 volatile 标志加关中断保护,计数信号量用计数器;发消息可以用环形缓冲区,生产者(中断)写 tail、消费者(主循环)读 head,用内存屏障和临界区保证索引更新原子。屏蔽中断和发消息的关系是:如果消息队列的索引更新不是原子的,入队/出队就要用短临界区保护;但临界区越短越好,不能在关中断期间做拷贝之外的重活。
RTOS 找最高优先级就绪任务,本质是位图 + 前导零。 每个优先级对应位图的一位,调度时用硬件 CLZ/FFS 一类指令找到最高置位,复杂度 O(1);如果每次从最高优先级往下扫描,最坏是 O(n)。多相机同步则要先统一时间基准:硬件触发线同时给所有相机发脉冲,或用 PTP/gPTP 做时钟同步;曝光时刻要记录触发时间戳和曝光延迟,软件按标定值补偿。不同相机从触发到曝光延迟不一致时,可以测每个相机的固定延迟做偏移,或者用支持外触发同步的 sensor;动态场景下还要考虑曝光时长和运动模糊。实时视频链路的难点通常集中在带宽、缓冲、帧同步、丢帧和端到端延迟。