PDUR数据提供机制
2026/4/20 8:44:21 网站建设 项目流程

这是 PDUR 接口路由中最容易混淆的两个核心配置,本质是 "PDUR 主动推送" 和 "目标模块主动拉取"两种完全相反的数据传输机制,直接决定了通信的实时性、CPU 负载和数据一致性。

Direct 模式:就像外卖骑手送餐,餐一做好就立刻给你送上门,你必须在家等着收

Trigger 模式:就像快递柜,快递员把包裹放进去,你什么时候有空什么时候去取,永远取到最新的那个包裹

模式

控制权归属

数据传输逻辑

核心优势

核心劣势

Direct(直接数据提供)

PDUR(源端)

有数据就立刻发

延迟最低,实时性最好

可能阻塞源端,浪费 CPU 资源

Trigger Transmit(触发传输)

目标模块

等目标要的时候才给最新数据

目标完全控制时机,永远拿最新数据,节省资源

延迟由目标调用周期决定

Direct data provision(直接数据提供)

定义

PDUR 收到源模块的 PDU 后,立刻将数据复制到目标模块,并立刻调用目标模块的 Transmit 函数完成发送。

典型实例

动力 CAN 总线上收到制动踏板位置信号。CanIf 调用PduR_Transmit(0x123, pduPtr),PDUR 立刻将数据复制并转发给:

  • 底盘 CAN 的 CanIf 模块(供 ESP 使用)

  • COM 模块(供应用层紧急制动逻辑使用)

整个过程在同一个函数调用栈中完成,延迟仅几微秒,确保安全信号能被立即处理。

适用场景

  • 所有安全相关的信号(制动、转向、气囊、电池故障)

  • 事件触发型信号(车门打开、碰撞信号)

  • 对延迟要求极高的控制信号

Trigger transmit data provision(触发传输数据提供)

定义

PDUR 收到源模块的 PDU 后,不立即转发,而是将数据存入自己的单缓冲区(覆盖旧数据)。只有当目标模块主动调用PduR_TriggerTransmit()时,PDUR 才将缓冲区中最新的数据复制给目标模块。

典型实例

仪表显示发动机转速信号。发动机 ECU 每 10ms 发送一次转速信号到 CAN 总线,PDUR 收到后只更新自己的缓冲区。

仪表模块每 100ms 刷新一次屏幕,它不需要 PDUR 每 10ms 就推一次数据,而是自己每 100ms 调用一次PduR_TriggerTransmit(0x456, &pduPtr),获取最新的转速值。

这样即使 PDUR 在 100ms 内收到了 10 次转速数据,仪表也只需要处理 1 次,CPU 负载降低了 90%。

适用场景

  • 周期性的、非安全相关的显示类信号(转速、车速、油量、水温)
  • 目标模块有严格的时序要求(如 LIN 主节点轮询)
  • 同一个 PDU 需要被多个不同周期的模块使用
  • 低优先级的状态信号(空调状态、车窗位置)

开发中最常见的坑

安全信号误用 Trigger 模式

现象:紧急制动信号延迟 100ms 才到达 ESP,导致制动距离增加
解决:所有 ASIL 等级的信号必须强制使用 Direct 模式

Trigger 模式配置多缓冲区

现象:目标模块总是拿到旧数据,而不是最新数据

解决:Trigger 模式必须且只能配置单缓冲区,多缓冲区会存储历史数据,违背了 Trigger 模式 "永远取最新" 的设计初衷

Direct 模式下目标模块处理过慢

现象:PDUR 的 Transmit 函数被阻塞,导致源模块的发送队列溢出,丢包

解决:将非实时的目标模块改为 Trigger 模式,或者提高目标模块的处理优先级

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询