正浩创新嵌入式软件一面 项目与协议连环追问
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 实习 1 的主要工作是什么?这段实习中最有挑战性的事是什么?
- 实习里的 bootloader 是你自己设计的吗?
- 实习 2 做了哪些工作?
- 项目 1 的项目背景、使用场景是什么?
- 项目 1 里 FPGA 的代码是你自己设计的吗?
- 项目分工是怎么样的?
- 耗时比较久的困难是什么?
- 从项目里学到了哪些东西?
- 项目 1 落地了吗?
- Modbus 协议。
- 项目 2 的项目背景、使用场景是什么?
- 项目 2 的困难是什么?
- LoRa 的通信频率是多少?
- LoRa 发送使用分包发送了吗?
- 这个是有多组采集板吗?一个网关配置多少个采集板?
- 项目 2 落地了吗?
- 分时复用加低功耗是怎么实现的?时间基准是什么?
- 项目 3 的项目背景、使用场景是什么?
- 温度控制如何实现?
- 目标温度是多少,实际测试的温度是多少,如何验证结果?
- 从设定目标到达到目标温度要多久?
- 项目 3 落地了吗?
- 讲一个比较有代表性的竞赛奖项。
- 字节对齐:32 位系统中结构体里
char+int占用多少内存? - 接触过电源行业吗,了解 BMS、EMS 吗?
- 更倾向于做硬件还是软件?
《参考解析》
Modbus 协议:Modbus 是主从(Master/Slave,新版称 Client/Server)的请求响应协议,从站不会主动发数据。三种承载方式:RTU(二进制,串口,靠 3.5 个字符时间的静默间隔分帧,CRC16 校验)、ASCII(可读文本,LRC 校验)、Modbus TCP(以太网,默认 502 端口,报文前加 7 字节 MBAP 头,去掉 CRC,因为有 TCP 校验)。常用功能码:01 读线圈、02 读离散输入、03 读保持寄存器、04 读输入寄存器、05/06 写单个线圈/寄存器、15/16 写多个。要能说清寄存器地址与协议地址差 1(文档里 40001 对应协议地址 0)、数据是大端、一次最多读 125 个寄存器,以及工程实现上的要点:串口丢包要有超时与重试、从站地址冲突、半双工收发切换的方向控制、多从站轮询的周期估算、异常码(0x01 非法功能、0x02 非法地址、0x03 非法数据、0x04 从站故障)。
LoRa 频率与分包:LoRa 是物理层调制技术,工作在国际通用的免授权 ISM 频段,中国区常用 470510 MHz(LoRaWAN 中国区规范为 470518 MHz,常用 470/486.3/490 等信道),欧洲 868 MHz,北美 915 MHz,另有 433 MHz 的短距应用。频率选择要遵守当地无线电管理规定,并考虑与对讲机、遥控器等既有业务的干扰。分包几乎必然要做:LoRa 单包有效载荷有限(SF 越大速率越低,SF12 时单包几十字节)、空中传输时间长、还要遵守信道占空比限制(部分频段有 1% 的占空比要求),所以工程上按 MTU 切分,每包带序号和总包数,接收端做重组与超时重传,应用层再叠加 CRC 与去重。SF、带宽、编码率三个参数共同决定速率、灵敏度和抗干扰能力,速率越高越省电但距离越近,这是功耗与覆盖之间的核心取舍。
分时复用加低功耗怎么实现:核心是「大部分时间睡着,醒来干活」。硬件上用 RTC(外部 32.768 kHz 晶振)或低功耗定时器做时间基准,MCU 进入 Stop/Standby 模式,只有 RTC 中断、外部中断和看门狗还活着;外设按需上电(传感器、LoRa 模块、显示屏都用 MOS 管或负载开关单独断电),未用的 GPIO 配成模拟输入或输出低电平避免漏电。软件上是周期性的占空比调度:唤醒 → 上电稳定 → 采集 → 处理 → 发送 → 等待确认 → 断电 → 回睡,把每次唤醒的时长压到最短,采集和发送能并行就并行。分时复用指的是同一套射频或同一组传感器在时间上错开服务多路任务,时间基准必须统一,否则多个节点的唤醒时刻会撞在一起互相干扰,常见做法是网关下发时间同步或按节点 id 做时隙偏移。实测要给出休眠电流(µA 级)、工作电流(mA 级)和平均电流,再用电池容量除以平均电流估算续航,这才是面试官想听的数据。
结构体字节对齐:32 位系统默认按成员自身大小对齐(char 对齐 1 字节,int 对齐 4 字节),同时结构体总大小要补齐到最大成员对齐数的整数倍。struct { char c; int i; } 的布局是:c 在偏移 0,填充 3 字节,i 在偏移 47,总大小 8 字节。如果调换顺序写成 3,{ int i; char c; },i 占 0c 在偏移 4,尾部再填充 3 字节凑齐 4 的倍数,仍然是 8 字节。缩小体积的办法是把大类型放前面、小类型聚在一起,或者按需用 #pragma pack(1) 取消填充——但取消对齐会带来非对齐访问,在部分架构上性能下降甚至触发硬件异常,通信协议打包时可以用、共享内存结构体要谨慎。实战提醒:网络协议结构体不要直接把内存结构体发出去,字段顺序、大小端和填充都不受控,应逐字段序列化。
温度控制如何验证与作答:先讲控制方案——加热用功率 MOS 或继电器 PWM 控温、制冷用半导体制冷片或风扇,传感器用 NTC 热敏电阻或数字温度传感器(DS18B20、PT100),控制算法从最简单的开关控制起步,需要稳态精度就上 PID(比例决定响应速度、积分消除稳态误差、微分抑制超调),并说明采样周期、积分限幅和抗积分饱和怎么处理的。然后讲验证指标:目标温度、实际稳态温度与稳态误差、超调量、从设定到进入 ±1℃ 带宽的时间、断电重启后的恢复时间、环境温度变化时的抗扰表现,以及多点测温(不同位置的温度差)和长时间漂移。如果实测和目标有偏差,要能说清是传感器位置、保温结构还是参数整定的问题。项目里的每个项目都要准备好一句话回答「落地了吗、落地到什么程度」,没量产就如实说做到样机或小批量,并说明卡在哪。
其他追问的准备:项目类问题会反复问「背景、使用场景、分工、你的具体贡献、落地情况」,回答模板是:解决什么问题、给谁用、指标要求是什么、硬件方案与软件架构、我负责哪一部分、遇到的困难和解决过程、最终验证结果。合作项目一定要区分「我做的」和「团队做的」,被追问实现细节时答不出来会非常扣分。竞赛奖项用 STAR 讲清题目、你的角色、技术难点和名次。BMS 与 EMS 至少要知道基本职责:BMS 负责电池电压/电流/温度采集、SOC/SOH 估算、均衡、过充过放过流过温保护与通信上报;EMS 负责能量调度、峰谷策略、与电网和负载的功率分配、报表与远程运维——正浩做储能与户外电源,把这两块和项目里的采集、通信、低功耗串起来讲会明显加分。