
69 DCM PDU路由:从“单通道”到“多路复用”开篇故事:一个让我熬了三个通宵的“幽灵丢帧”还记得去年我接手一个域控制器项目,ECU同时挂着CAN、CAN FD和以太网DoIP三条诊断通道。台架测试时,CAN通道的诊断响应永远正常,但DoIP通道偶尔会丢帧——不是物理层丢包,而是DCM压根没处理。我拿着逻辑分析仪蹲了三天,终于发现真相:DCM内部只有一个“单通道”的PDU接收队列。当CAN通道的连续诊断请求(比如0x22读取VIN)占满队列时,DoIP通道的请求就被无情地丢弃了。更坑的是,UDS协议里没有“重传”机制,客户那边的测试脚本直接报“ECU无响应”。后来我翻看AUTOSAR 4.4规范,才发现DCM模块的PDU路由器(PduR)天然支持多路复用——只是我们项目组用了“裸奔式”实现,把PduR当成了单纯的“转发器”。今天,我就带你把这个坑填上。痛点拆解:你写的“多通道”其实是“伪并发”常见认知误区:以为加个if-else就是路由很多工程师(包括当年的我)会写出这样的“伪多路”代码:# 反例:单线程轮询式路由class