项目是自己敲的,面试却像抄的:嵌入式项目复盘
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 这个数据为什么放在中断里处理?
- 接收缓冲区为什么定这么大?
- 如果上位机连续发两条指令,你怎么把它们分开?
- 项目里遇到的最大困难是什么,具体是怎么定位的?(原帖提到只答”环境配置比较麻烦”、“调了很久最后解决了”会当场卡住)
《参考解析》
- 为什么把处理放在中断里:中断里只该做必须及时做且极短的事——把数据搬进缓冲区、置标志位,然后立刻退出;协议解析、屏幕刷新、可能阻塞的操作都放回主循环。判断标准很直接:中断服务程序里有没有等待、有没有动态内存、有没有长循环,有就说明位置放错了,代价是丢中断和时序抖动。
- 接收缓冲区大小怎么定:从协议和流量倒推——一帧的最大长度、上位机最短的发送间隔、主循环最坏一轮的处理耗时,三者相乘再留余量,同时要定溢出策略(丢最旧、丢最新还是报错并置标志)。面试官追问这个数,其实是想知道它是算出来的,还是照抄例程里那个值。
- 连续两条指令怎么分开:本质是”怎么认出一条指令的边界”。定长协议按长度切;变长协议用帧头加长度域或结束符,再配超时判断(比如最后一个字节之后多久没来就认为一帧结束)。接收端要有状态机型缓冲——一次收到的可能是半帧也可能是多帧,处理不完的部分留在缓冲区等下一次,而不是当成一帧直接解析。
- “最大困难”怎么答:别只给结论,按”现象、条件、怀疑、检查、改动”讲——什么现象、什么条件下必现、先怀疑哪里、做了哪些对比(换线、模块单独跑、加日志)、最后定位到哪一行、为什么这么改有效。当时只是绕过去没查明原因的,也要如实说清还没定位,而不是把”没再复现”当成已经解决。