AUTOSAR_CP文档图解==>AUTOSAR_CP_SWS_COMBasedTransformer

AUTOSAR COM Based Transformer(ComXf)详解:配置模型、序列化流程与工程排查

基于 AUTOSAR Classic Platform R25-11《Specification of COM Based Transformer》整理,并结合当前工程中的 COM、RTE 和 PduR 代码进行说明。

规范依据:AUTOSAR CP R25-11,AUTOSAR_CP_SWS_COMBasedTransformer,Document ID 662。


目录

  1. 概述
  2. 模块架构与工程现状
  3. 配置对象关系
  4. 序列化与反序列化流程
  5. API、缓冲区与数据布局
  6. 状态、错误与配置约束
  7. 问题排查流程
  8. 总结与工程检查清单

1. 概述

1.1 ComXf 的作用

COM Based Transformer 是 AUTOSAR RTE Transformer 链中的序列化 Transformer。它把软件组件(SWC)侧的复合数据转换为按照通信矩阵定义的线性 uint8 数组,再交给 COM 放入 Signal Group 对应的 I-PDU;接收侧执行相反过程。

text 复制代码
发送:SWC 复合数据
    -> RTE Transformer Chain
    -> ComXf_<transformerId>
    -> uint8 数组
    -> Com_SendSignalGroupArray
    -> COM I-PDU Buffer
    -> PduR / CanIf / 总线

接收:总线 I-PDU
    -> COM I-PDU Buffer
    -> Com_ReceiveSignalGroupArray
    -> uint8 数组
    -> ComXf_Inv_<transformerId>
    -> RTE Transformer Chain
    -> SWC 复合数据

从 SWC 角度看,Transformer 对通信是透明的。SWC 只处理原始数据元素,RTE 负责执行配置的 Transformer 链,COM 负责把线性数组放入或取出 I-PDU。

1.2 适用范围

规范定义的 COM Based Transformer 适用于:

  • 固定通信矩阵;
  • 固定长度的复合数据;
  • COM Signal Group 数组访问;
  • 通过通信矩阵确定信号组内每个元素的布局、字节序和位置;
  • RTE 中需要与其他 Transformer 串联的 Sender/Receiver 通信。

1.3 规范限制

COM Based Transformer 有明确边界:

  • 不支持 Client-Server 通信;
  • 不支持 external trigger communication;
  • 只支持复合数据类型,通常对应 COM Signal Group;
  • 只支持固定长度数据;
  • Signal Group 必须按字节对齐;
  • 只允许作为发送侧 Transformer 链的第一个 Transformer;
  • 接收侧对应为最后一个执行的反序列化 Transformer;
  • 不支持 UINT8_DYN 作为其基础数据类型;
  • 线性数组中的未映射间隙需要使用 COM 配置的未使用区域默认值填充。

如果需要对单个基本数据元素使用 COM Based Transformer,规范建议把该元素封装成只包含一个成员的结构,使其在系统模型中作为复合数据和 Signal Group 处理。


2. 模块架构与工程现状

2.1 AUTOSAR 逻辑架构

#mermaid-svg-wmFG4Jt8Adsf1PN3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .error-icon{fill:#552222;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .marker.cross{stroke:#333333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 p{margin:0;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster-label text{fill:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster-label span{color:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster-label span p{background-color:transparent;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .label text,#mermaid-svg-wmFG4Jt8Adsf1PN3 span{fill:#333;color:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .node rect,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node circle,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node ellipse,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node polygon,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .rough-node .label text,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node .label text,#mermaid-svg-wmFG4Jt8Adsf1PN3 .image-shape .label,#mermaid-svg-wmFG4Jt8Adsf1PN3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .rough-node .label,#mermaid-svg-wmFG4Jt8Adsf1PN3 .node .label,#mermaid-svg-wmFG4Jt8Adsf1PN3 .image-shape .label,#mermaid-svg-wmFG4Jt8Adsf1PN3 .icon-shape .label{text-align:center;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .node.clickable{cursor:pointer;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .arrowheadPath{fill:#333333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wmFG4Jt8Adsf1PN3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wmFG4Jt8Adsf1PN3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster text{fill:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .cluster span{color:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wmFG4Jt8Adsf1PN3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .icon-shape,#mermaid-svg-wmFG4Jt8Adsf1PN3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .icon-shape p,#mermaid-svg-wmFG4Jt8Adsf1PN3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .icon-shape .label rect,#mermaid-svg-wmFG4Jt8Adsf1PN3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wmFG4Jt8Adsf1PN3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wmFG4Jt8Adsf1PN3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wmFG4Jt8Adsf1PN3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 复合数据
线性 uint8 数组
增强后的数组
Com_SendSignalGroupArray
Com_ReceiveSignalGroupArray
反序列化数据
Application SWC
RTE Transformer Chain
COM Based Transformer

ComXf_
E2E / Safety / Other Transformer
COM

Signal Group Array API
PduR
CanIf / FrIf / LinIf
通信总线

COM Based Transformer 与 E2E、Security 或其他 Transformer 的关系取决于 Transformer 链配置。典型发送顺序是:

text 复制代码
COM Based Serializer -> E2E / Security / Custom Transformer -> COM

接收时顺序反向:

text 复制代码
COM -> E2E / Security / Custom Inverse Transformer -> COM Based Deserializer

COM Based Transformer 必须是发送链第一项。原因是它负责把结构化数据转换成线性字节布局,后续 Transformer 才能在字节数组上追加头部、尾部、CRC、计数器或安全信息。

2.2 当前工程的实际证据

当前工程扫描结果如下:

工程位置 证据 结论
BSWL\_gen\RTE\Rte.h 定义 Rte_TransformerError、RTE_TRANSFORMER_SERIALIZER、RTE_TRANSFORMER_SAFETY 等类型 RTE 具备通用 Transformer 类型和错误模型
BSWL\BSW\Com\api\Com.h 声明 Com_SendSignalGroupArray、Com_ReceiveSignalGroupArray COM 提供 Signal Group 数组接口
BSWL\BSW\Com\src\Com_SendSignalGroupArray.c 函数受 #ifdef COM_TX_SIGNALGROUP_ARRAY 保护 发送数组 API 是否存在取决于有效宏
BSWL\BSW\Com\src\Com_ReceiveSignalGroupArray.c 函数受 #ifdef COM_RX_SIGNALGROUP_ARRAY 保护 接收数组 API 是否存在取决于有效宏
BSWL\_gen\BSW\Com\Com_Cfg.h COM_TX_SIGNALGROUP、COM_RX_SIGNALGROUP 为注释,未见数组开关定义 当前生成配置未证明已启用 Signal Group Array
工程全局扫描 未找到 ComXf_<transformerId>、ComXf_Inv_<transformerId> 或独立 ComXf 生成文件 当前工程未发现已生成的 COM Based Transformer 实例

因此,当前工程可以确认"COM 层存在 Signal Group Array 的实现代码",但不能据此直接确认"当前 ECU 已启用 COM Based Transformer"。必须继续核对实际编译命令、包含的配置头、RTE 生成输出以及系统配置源文件。

2.3 当前工程的实际 COM 数组发送路径

当前实现中的 Com_SendSignalGroupArray 逻辑为:

  1. 检查 COM 是否初始化;
  2. 检查输入指针和 Signal Group ID;
  3. 将外部 Signal Group ID 映射为内部 ID;
  4. 检查该 Signal Group 是否启用 ArrayAccess;
  5. 检查 TP 大数据发送是否正在进行;
  6. 根据 firstByteNo 和 length 把数组复制到 COM I-PDU Buffer;
  7. 如配置了 Triggered-on-change,比较相关 GroupSignal;
  8. 调用内部 Signal Group 发送逻辑。

对应代码中的关键行为是:

c 复制代码
Com_ByteCopy(
    txIpduConstPtr_pcst->buffPtr_pu8 + txSigGrpArrayConstPtr_pcst->firstByteNo_uo,
    signalGroupArrayPtr_pcu8,
    txSigGrpArrayConstPtr_pcst->length_uo);

这说明 COM 数组接口本身并不负责把 C 结构体序列化为数组;它接收的输入必须已经是符合 Signal Group 数组表示的线性字节序列。这正是 ComXf 的职责。

2.4 当前工程的实际 COM 数组接收路径

当前实现中的 Com_ReceiveSignalGroupArray 逻辑为:

  1. 检查 COM 状态、输出指针和 Signal Group ID;
  2. 把外部 Signal Group ID 映射为内部 ID;
  3. 检查 ArrayAccess;
  4. 找到对应 I-PDU 和接收主函数缓存;
  5. 检查 I-PDU 是否处于可接收状态;
  6. 将接收 Signal Group 数组缓存复制到调用者缓冲区。

对应实现通过 firstByteNo 和最后字节位置计算数组复制长度。这个长度必须与 RTE Transformer 申请的缓冲区布局一致,否则会产生字段错位、越界或尾部数据未更新等问题。


3. 配置对象关系

3.1 配置对象实体关系图

下面的图按照截图中的配置对象风格,使用实体框、属性行和关系线描述 COM Based Transformer 的关键配置链路。
#mermaid-svg-wSbjzTkMhPwFnOFz{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wSbjzTkMhPwFnOFz .error-icon{fill:#552222;}#mermaid-svg-wSbjzTkMhPwFnOFz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wSbjzTkMhPwFnOFz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wSbjzTkMhPwFnOFz .marker.cross{stroke:#333333;}#mermaid-svg-wSbjzTkMhPwFnOFz svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wSbjzTkMhPwFnOFz p{margin:0;}#mermaid-svg-wSbjzTkMhPwFnOFz .entityBox{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-wSbjzTkMhPwFnOFz .relationshipLabelBox{fill:hsl(80, 100%, 96.2745098039%);opacity:0.7;background-color:hsl(80, 100%, 96.2745098039%);}#mermaid-svg-wSbjzTkMhPwFnOFz .relationshipLabelBox rect{opacity:0.5;}#mermaid-svg-wSbjzTkMhPwFnOFz .labelBkg{background-color:rgba(248.6666666666, 255, 235.9999999999, 0.5);}#mermaid-svg-wSbjzTkMhPwFnOFz .edgeLabel .label{fill:#9370DB;font-size:14px;}#mermaid-svg-wSbjzTkMhPwFnOFz .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wSbjzTkMhPwFnOFz .edge-pattern-dashed{stroke-dasharray:8,8;}#mermaid-svg-wSbjzTkMhPwFnOFz .node rect,#mermaid-svg-wSbjzTkMhPwFnOFz .node circle,#mermaid-svg-wSbjzTkMhPwFnOFz .node ellipse,#mermaid-svg-wSbjzTkMhPwFnOFz .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wSbjzTkMhPwFnOFz .relationshipLine{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-wSbjzTkMhPwFnOFz .marker{fill:none!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-wSbjzTkMhPwFnOFz .edgeLabel{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wSbjzTkMhPwFnOFz .edgeLabel .label rect{fill:rgba(232,232,232, 0.8);}#mermaid-svg-wSbjzTkMhPwFnOFz .edgeLabel .label text{fill:#333;}#mermaid-svg-wSbjzTkMhPwFnOFz :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} aligns_with
defines
generates
configures
configures
uses
maps
references
realizes
references
maps_to
maps_to
belongs_to
chains
reserves
executed_by
calls
uses_array_layout
routed_by
ECUC_COMXf
string
apiServicePrefix
boolean
postBuildVariantSupport
string
configurationVariant
COM_CONFIGURATION
boolean
SignalGroupArrayApi
boolean
MetaDataSupport
enum
ConfigurationVariant
string
ConfigSet
SWC_PORT
string
PortPrototype
string
CommunicationType
string
DataElementType
SENDER_RECEIVER_INTERFACE
string
InterfaceName
string
DataElementList
string
CompositeDataType
SYSTEM_MAPPING
string
DataElementRef
string
SystemSignalGroupRef
string
TypeMapping
SYSTEM_SIGNAL_GROUP
string
SystemSignalGroupRef
string
SystemSignalList
string
TransformingSystemSignal
ISIGNAL_GROUP
string
ISignalGroupRef
string
ComBasedTransformationRef
boolean
ByteAligned
uint32
GroupLengthBits
COM_SIGNAL_GROUP
uint16
SignalGroupId
boolean
ArrayAccess
uint16
FirstByte
uint16
Length
ISIGNAL_TO_IPDU_MAPPING
string
SignalGroupRef
uint32
StartPosition
enum
PackingByteOrder
uint32
UpdateBitPosition
COM_IPDU
uint16
PduId
uint16
Length
uint8
UnusedAreaDefault
enum
TransmissionMode
DATA_TRANSFORMATION
string
DataTransformationRef
enum
DataTransformationKind
boolean
ExecuteDespiteNoData
string
TransformerChain
TRANSFORMATION_TECHNOLOGY
string
Protocol
string
Version
enum
TransformerClass
boolean
HasInternalState
boolean
NeedsOriginalData
BUFFER_PROPERTIES
uint32
HeaderLengthBits
boolean
InPlace
COMXF_API
string
SerializeApi
string
DeserializeApi
uint8
ServiceId
enum
ReturnCode
RTE
string
TransformerChainOrder
uint32
BufferLength
enum
ErrorClass
PduR_ROUTE
uint16
SourcePduId
uint16
DestinationPduId
enum
RoutingType

3.2 对象阅读方式

  • ECUC_COMXf:ComXf 模块的 ECUC 定义,规范要求 API 前缀为 ComXf。
  • COM_CONFIGURATION:真正决定 Signal Group 数组长度、起始位置和 I-PDU 布局的 COM 配置。
  • SENDER_RECEIVER_INTERFACE:定义 SWC 侧复合数据元素。
  • SYSTEM_MAPPING:把 Sender/Receiver 数据元素映射到 System Signal Group。
  • SYSTEM_SIGNAL_GROUP:在系统模型中保持一组信号的原子性。
  • ISIGNAL_GROUP:定义网络侧 Signal Group,并引用 comBasedSignalGroupTransformation。
  • DATA_TRANSFORMATION:有序的 Transformer 链。
  • TRANSFORMATION_TECHNOLOGY:链中的具体 Transformer,COM Based Transformer 的关键属性是 protocol = COM-Based、version = 1.0.0、transformerClass = serializer。
  • COM_SIGNAL_GROUP:COM ECUC 侧数组访问对象,必须启用 ArrayAccess 才能使用数组 API。
  • ISIGNAL_TO_IPDU_MAPPING:决定 Signal Group 在 I-PDU 中的起始位置、长度和布局。
  • COM_IPDU:承载 Signal Group 的 I-PDU,包含长度、未使用区域默认值和传输模式。
  • RTE:执行 Transformer 链并提供输入/输出缓冲区。
  • PduR_ROUTE:ComXf 和 COM 完成数组操作之后,PduR 只负责正常 I-PDU 路由。

3.3 配置一致性要求

以下关系必须同时满足:

  1. SWC 复合数据元素必须映射到 SystemSignalGroup。
  2. ISignalGroup 必须引用相应的 COM Based DataTransformation。
  3. COM Signal Group 必须配置数组访问能力。
  4. Signal Group 必须有确定的 firstByte 和 length。
  5. Signal Group 的布局必须满足字节对齐要求。
  6. COM I-PDU 长度必须覆盖 Signal Group 的起始位置和数组长度。
  7. Transformer 链中的 COM Based Transformer 必须排在第一位。
  8. RTE 缓冲长度必须覆盖所有 Transformer 使用的输入、输出、头部和尾部空间。
  9. COM 的 Post-Build 配置时,ComXf 对应配置也必须是 Post-Build。
  10. PduR 的源 PDU ID 必须对应 COM 产生的实际 Tx PDU。

4. 序列化与反序列化流程

4.1 发送流程

CanIf / Lower Layer PduR COM E2E / Other Transformer ComXf_<transformerId> RTE Application SWC CanIf / Lower Layer PduR COM E2E / Other Transformer ComXf_<transformerId> RTE Application SWC #mermaid-svg-adwj1nfUQ4bhpF5s{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-adwj1nfUQ4bhpF5s .error-icon{fill:#552222;}#mermaid-svg-adwj1nfUQ4bhpF5s .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-adwj1nfUQ4bhpF5s .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-adwj1nfUQ4bhpF5s .marker{fill:#333333;stroke:#333333;}#mermaid-svg-adwj1nfUQ4bhpF5s .marker.cross{stroke:#333333;}#mermaid-svg-adwj1nfUQ4bhpF5s svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-adwj1nfUQ4bhpF5s p{margin:0;}#mermaid-svg-adwj1nfUQ4bhpF5s .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-adwj1nfUQ4bhpF5s text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-adwj1nfUQ4bhpF5s .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-adwj1nfUQ4bhpF5s .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-adwj1nfUQ4bhpF5s #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-adwj1nfUQ4bhpF5s .sequenceNumber{fill:white;}#mermaid-svg-adwj1nfUQ4bhpF5s #sequencenumber{fill:#333;}#mermaid-svg-adwj1nfUQ4bhpF5s #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-adwj1nfUQ4bhpF5s .messageText{fill:#333;stroke:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-adwj1nfUQ4bhpF5s .labelText,#mermaid-svg-adwj1nfUQ4bhpF5s .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .loopText,#mermaid-svg-adwj1nfUQ4bhpF5s .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-adwj1nfUQ4bhpF5s .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-adwj1nfUQ4bhpF5s .noteText,#mermaid-svg-adwj1nfUQ4bhpF5s .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-adwj1nfUQ4bhpF5s .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-adwj1nfUQ4bhpF5s .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-adwj1nfUQ4bhpF5s .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-adwj1nfUQ4bhpF5s .actorPopupMenu{position:absolute;}#mermaid-svg-adwj1nfUQ4bhpF5s .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-adwj1nfUQ4bhpF5s .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-adwj1nfUQ4bhpF5s .actor-man circle,#mermaid-svg-adwj1nfUQ4bhpF5s line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-adwj1nfUQ4bhpF5s :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Rte_Write(DataElement) 结构化 dataElement 按 COM Signal Group 布局序列化 uint8 数组 + bufferLength 传递线性数组 增加 CRC / Counter / Header 等 Com_SendSignalGroupArray(SignalGroupId, buffer) 检查 ArrayAccess、复制到 I-PDU Buffer PduR_ComTransmit(TxPduId, PduInfo) Lower_Transmit TxConfirmation Com_TxConfirmation

ComXf 的序列化要点:

  • 每个 Sender/Receiver dataElement 按 COM 规则分别处理;
  • 遵循 COM 的字节序转换和符号扩展规则;
  • 使用 COM Signal Group 在 I-PDU 中定义的 bit/byte 位置;
  • 为没有映射信号的空洞填充 ComTxIPduUnusedAreasDefault;
  • 为后续 Transformer 预留头部或尾部空间;
  • 输出长度必须与 RTE 和 COM Signal Group Array 配置一致。

4.2 接收流程

Application SWC ComXf_Inv_<transformerId> E2E / Other Inverse Transformer RTE COM PduR CanIf / Lower Layer 通信总线 Application SWC ComXf_Inv_<transformerId> E2E / Other Inverse Transformer RTE COM PduR CanIf / Lower Layer 通信总线 #mermaid-svg-4UQX6AjwmJHr2h4L{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4UQX6AjwmJHr2h4L .error-icon{fill:#552222;}#mermaid-svg-4UQX6AjwmJHr2h4L .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4UQX6AjwmJHr2h4L .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4UQX6AjwmJHr2h4L .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4UQX6AjwmJHr2h4L .marker.cross{stroke:#333333;}#mermaid-svg-4UQX6AjwmJHr2h4L svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4UQX6AjwmJHr2h4L p{margin:0;}#mermaid-svg-4UQX6AjwmJHr2h4L .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4UQX6AjwmJHr2h4L text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-4UQX6AjwmJHr2h4L .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-4UQX6AjwmJHr2h4L .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-4UQX6AjwmJHr2h4L #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-4UQX6AjwmJHr2h4L .sequenceNumber{fill:white;}#mermaid-svg-4UQX6AjwmJHr2h4L #sequencenumber{fill:#333;}#mermaid-svg-4UQX6AjwmJHr2h4L #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-4UQX6AjwmJHr2h4L .messageText{fill:#333;stroke:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4UQX6AjwmJHr2h4L .labelText,#mermaid-svg-4UQX6AjwmJHr2h4L .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .loopText,#mermaid-svg-4UQX6AjwmJHr2h4L .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-4UQX6AjwmJHr2h4L .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-4UQX6AjwmJHr2h4L .noteText,#mermaid-svg-4UQX6AjwmJHr2h4L .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-4UQX6AjwmJHr2h4L .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4UQX6AjwmJHr2h4L .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4UQX6AjwmJHr2h4L .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-4UQX6AjwmJHr2h4L .actorPopupMenu{position:absolute;}#mermaid-svg-4UQX6AjwmJHr2h4L .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-4UQX6AjwmJHr2h4L .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-4UQX6AjwmJHr2h4L .actor-man circle,#mermaid-svg-4UQX6AjwmJHr2h4L line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-4UQX6AjwmJHr2h4L :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 接收 I-PDU RxIndication Com_RxIndication 更新 I-PDU / Signal Group Array 缓存 Com_ReceiveSignalGroupArray(SignalGroupId, buffer) 线性 uint8 数组 执行逆向 Transformer 去除 CRC / Counter / Header ComXf_Inv_<transformerId>(buffer, length, dataElement) 按 COM 布局反序列化 结构化 dataElement Rte_Read(DataElement)

ComXf_Inv_<transformerId> 如果收到 buffer = NULL_PTR 且 bufferLength = 0,必须保持输出数据不变并返回 E_NO_DATA。这对应规范中的无数据场景,实际排查时不能把该返回值误判为普通序列化失败。

4.3 Transformer 链中的数据范围

一个 Signal Group 的数组可能同时包含:

  • COM Based Transformer 负责的业务数据;
  • E2E Transformer 负责的 CRC、Sequence Counter;
  • 其他 Transformer 负责的头部或尾部;
  • 没有对应信号的空洞区域;
  • 由 COM 未使用区域默认值填充的字节。

因此,不能简单地认为"Signal Group 数组长度就是业务结构体大小"。实际长度应从 COM Signal Group 的 firstByte、length、I-PDU 映射以及 Transformer 链的缓冲预留共同确定。


5. API、缓冲区与数据布局

5.1 ComXf API

API 作用 规范返回值
ComXf_<transformerId> 将结构化数据序列化为 uint8 数组 E_OK、E_SER_GENERIC_ERROR
ComXf_Inv_<transformerId> 将 uint8 数组反序列化为结构化数据 E_OK、E_NO_DATA、E_SER_GENERIC_ERROR
ComXf_Init 初始化 Transformer 无返回值
ComXf_DeInit 去初始化 Transformer 无返回值
ComXf_GetVersionInfo 读取版本信息 无返回值

典型原型:

c 复制代码
uint8 ComXf_<transformerId>(
    uint8 *buffer,
    uint32 *bufferLength,
    <paramtype> dataElement);

uint8 ComXf_Inv_<transformerId>(
    const uint8 *buffer,
    uint32 bufferLength,
    <type> *dataElement);

所有 Transformer 实例函数是同步、可重入的;ComXf_Init 和 ComXf_DeInit 在规范中为同步且不可重入。

5.2 COM 数组 API 与工程实现

当前工程的 COM API 声明包括:

c 复制代码
extern uint8 Com_SendSignalGroupArray(
    Com_SignalGroupIdType idSignalGroup_u16,
    const uint8 *signalGroupArrayPtr_pcu8);

extern uint8 Com_ReceiveSignalGroupArray(
    Com_SignalGroupIdType idSignalGroup_u16,
    uint8 *signalGroupArrayPtr_pu8);

实际代码中的重要条件:

条件 工程行为
COM 未初始化 报告 COM_E_UNINIT,返回不可用
数组指针为空 报告 COM_E_PARAM_POINTER
Signal Group ID 非法 报告 COM_E_PARAM
ArrayAccess 未启用 不执行数组复制,返回不可用
Tx 大数据传输进行中 发送数组可能返回 COM_BUSY
Rx I-PDU 已停止 接收 API 返回最后已知数据或初始化值
Tx ArrayAccess 有效 按生成的 firstByteNo 和 length 复制到 I-PDU

5.3 字节布局

COM Based Transformer 使用 COM 配置的布局,而不是自行创建一套独立布局。至少需要核对:

  • Signal Group 起始字节;
  • Signal Group 数组长度;
  • 每个 GroupSignal 的位位置和位长度;
  • Little Endian、Big Endian 或 Opaque 配置;
  • I-PDU 未使用区域默认值;
  • Transformer 头部和尾部的保留空间;
  • COM I-PDU 的总长度;
  • RTE 提供的实际 buffer 长度。

Signal Group 允许存在 gaps,但发送时 gaps 必须使用对应 Tx I-PDU 的 ComTxIPduUnusedAreasDefault 填充。接收侧对未知数据元素的兼容规则是:允许更大的数组表示,并忽略已知接口之后追加的数据元素。

5.4 缓冲区关系

#mermaid-svg-OpO5c1Px9nCsDMrU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OpO5c1Px9nCsDMrU .error-icon{fill:#552222;}#mermaid-svg-OpO5c1Px9nCsDMrU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OpO5c1Px9nCsDMrU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OpO5c1Px9nCsDMrU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OpO5c1Px9nCsDMrU .marker.cross{stroke:#333333;}#mermaid-svg-OpO5c1Px9nCsDMrU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OpO5c1Px9nCsDMrU p{margin:0;}#mermaid-svg-OpO5c1Px9nCsDMrU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster-label text{fill:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster-label span{color:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster-label span p{background-color:transparent;}#mermaid-svg-OpO5c1Px9nCsDMrU .label text,#mermaid-svg-OpO5c1Px9nCsDMrU span{fill:#333;color:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU .node rect,#mermaid-svg-OpO5c1Px9nCsDMrU .node circle,#mermaid-svg-OpO5c1Px9nCsDMrU .node ellipse,#mermaid-svg-OpO5c1Px9nCsDMrU .node polygon,#mermaid-svg-OpO5c1Px9nCsDMrU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OpO5c1Px9nCsDMrU .rough-node .label text,#mermaid-svg-OpO5c1Px9nCsDMrU .node .label text,#mermaid-svg-OpO5c1Px9nCsDMrU .image-shape .label,#mermaid-svg-OpO5c1Px9nCsDMrU .icon-shape .label{text-anchor:middle;}#mermaid-svg-OpO5c1Px9nCsDMrU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OpO5c1Px9nCsDMrU .rough-node .label,#mermaid-svg-OpO5c1Px9nCsDMrU .node .label,#mermaid-svg-OpO5c1Px9nCsDMrU .image-shape .label,#mermaid-svg-OpO5c1Px9nCsDMrU .icon-shape .label{text-align:center;}#mermaid-svg-OpO5c1Px9nCsDMrU .node.clickable{cursor:pointer;}#mermaid-svg-OpO5c1Px9nCsDMrU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OpO5c1Px9nCsDMrU .arrowheadPath{fill:#333333;}#mermaid-svg-OpO5c1Px9nCsDMrU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OpO5c1Px9nCsDMrU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OpO5c1Px9nCsDMrU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OpO5c1Px9nCsDMrU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OpO5c1Px9nCsDMrU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OpO5c1Px9nCsDMrU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster text{fill:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU .cluster span{color:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OpO5c1Px9nCsDMrU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OpO5c1Px9nCsDMrU rect.text{fill:none;stroke-width:0;}#mermaid-svg-OpO5c1Px9nCsDMrU .icon-shape,#mermaid-svg-OpO5c1Px9nCsDMrU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OpO5c1Px9nCsDMrU .icon-shape p,#mermaid-svg-OpO5c1Px9nCsDMrU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OpO5c1Px9nCsDMrU .icon-shape .label rect,#mermaid-svg-OpO5c1Px9nCsDMrU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OpO5c1Px9nCsDMrU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OpO5c1Px9nCsDMrU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OpO5c1Px9nCsDMrU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 预留
由后续 Transformer 使用
SWC 结构体
RTE 输入缓冲
ComXf 序列化区域
E2E / 其他 Transformer 区域
RTE 输出 uint8 缓冲
COM Signal Group Array
COM I-PDU Buffer
PduR / Lower Layer
headerLength
trailer / CRC / Counter

当 BufferProperties.inPlace = true 时,Transformer 可以使用输入缓冲作为输出缓冲;否则必须由 RTE 提供独立缓冲。工程中如果出现数据被覆盖或后续 Transformer 读取到错误数据,首先检查 inPlace、缓冲起始偏移和长度计算。


6. 状态、错误与配置约束

6.1 模块状态

#mermaid-svg-POzhiL39gCaxMzlm{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-POzhiL39gCaxMzlm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-POzhiL39gCaxMzlm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-POzhiL39gCaxMzlm .error-icon{fill:#552222;}#mermaid-svg-POzhiL39gCaxMzlm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-POzhiL39gCaxMzlm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-POzhiL39gCaxMzlm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-POzhiL39gCaxMzlm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-POzhiL39gCaxMzlm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-POzhiL39gCaxMzlm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-POzhiL39gCaxMzlm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-POzhiL39gCaxMzlm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-POzhiL39gCaxMzlm .marker.cross{stroke:#333333;}#mermaid-svg-POzhiL39gCaxMzlm svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-POzhiL39gCaxMzlm p{margin:0;}#mermaid-svg-POzhiL39gCaxMzlm defs #statediagram-barbEnd{fill:#333333;stroke:#333333;}#mermaid-svg-POzhiL39gCaxMzlm g.stateGroup text{fill:#9370DB;stroke:none;font-size:10px;}#mermaid-svg-POzhiL39gCaxMzlm g.stateGroup text{fill:#333;stroke:none;font-size:10px;}#mermaid-svg-POzhiL39gCaxMzlm g.stateGroup .state-title{font-weight:bolder;fill:#131300;}#mermaid-svg-POzhiL39gCaxMzlm g.stateGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-POzhiL39gCaxMzlm g.stateGroup line{stroke:#333333;stroke-width:1;}#mermaid-svg-POzhiL39gCaxMzlm .transition{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-POzhiL39gCaxMzlm .stateGroup .composit{fill:white;border-bottom:1px;}#mermaid-svg-POzhiL39gCaxMzlm .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px;}#mermaid-svg-POzhiL39gCaxMzlm .state-note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-POzhiL39gCaxMzlm .state-note text{fill:black;stroke:none;font-size:10px;}#mermaid-svg-POzhiL39gCaxMzlm .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-POzhiL39gCaxMzlm .edgeLabel .label rect{fill:#ECECFF;opacity:0.5;}#mermaid-svg-POzhiL39gCaxMzlm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-POzhiL39gCaxMzlm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-POzhiL39gCaxMzlm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-POzhiL39gCaxMzlm .edgeLabel .label text{fill:#333;}#mermaid-svg-POzhiL39gCaxMzlm .label div .edgeLabel{color:#333;}#mermaid-svg-POzhiL39gCaxMzlm .stateLabel text{fill:#131300;font-size:10px;font-weight:bold;}#mermaid-svg-POzhiL39gCaxMzlm .node circle.state-start{fill:#333333;stroke:#333333;}#mermaid-svg-POzhiL39gCaxMzlm .node .fork-join{fill:#333333;stroke:#333333;}#mermaid-svg-POzhiL39gCaxMzlm .node circle.state-end{fill:#9370DB;stroke:white;stroke-width:1.5;}#mermaid-svg-POzhiL39gCaxMzlm .end-state-inner{fill:white;stroke-width:1.5;}#mermaid-svg-POzhiL39gCaxMzlm .node rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-POzhiL39gCaxMzlm .node polygon{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-POzhiL39gCaxMzlm #statediagram-barbEnd{fill:#333333;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-cluster rect{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-POzhiL39gCaxMzlm .cluster-label,#mermaid-svg-POzhiL39gCaxMzlm .nodeLabel{color:#131300;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-cluster rect.outer{rx:5px;ry:5px;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-state .divider{stroke:#9370DB;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-state .title-state{rx:5px;ry:5px;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-cluster.statediagram-cluster .inner{fill:white;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-cluster.statediagram-cluster-alt .inner{fill:#f0f0f0;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-cluster .inner{rx:0;ry:0;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-state rect.basic{rx:5px;ry:5px;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#f0f0f0;}#mermaid-svg-POzhiL39gCaxMzlm .note-edge{stroke-dasharray:5;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-note rect{fill:#fff5ad;stroke:#aaaa33;stroke-width:1px;rx:0;ry:0;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-note text{fill:black;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram-note .nodeLabel{color:black;}#mermaid-svg-POzhiL39gCaxMzlm .statediagram .edgeLabel{color:red;}#mermaid-svg-POzhiL39gCaxMzlm #dependencyStart,#mermaid-svg-POzhiL39gCaxMzlm #dependencyEnd{fill:#333333;stroke:#333333;stroke-width:1;}#mermaid-svg-POzhiL39gCaxMzlm .statediagramTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-POzhiL39gCaxMzlm :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ComXf_Init(config)
ComXf_ / ComXf_Inv_
ComXf_DeInit()
在未初始化状态调用转换 API
错误处理或重新初始化
UNINIT
INITIALIZED
ERROR

在未初始化或已去初始化状态调用转换 API,应报告开发错误 <MIP>_E_UNINIT。规范列出的开发错误还包括:

错误 值 典型原因
<MIP>_E_UNINIT 0x01 Init 前或 DeInit 后调用业务 API
<MIP>_E_INIT_FAILED 0x02 选择了无效配置集
<MIP>_E_PARAM 0x03 参数值非法
<MIP>_E_PARAM_POINTER 0x04 指针为空或无效

COM Based Transformer 规范明确没有额外的 Runtime Error、Production Error 或 Extended Production Error。工程中的 Transformer 数据错误通常应通过返回值、RTE Transformer Error 或上层 E2E/诊断机制处理。

6.2 RTE 工程错误模型

当前工程的 Rte.h 定义了:

c 复制代码
#define RTE_E_HARD_TRANSFORMER_ERROR ((Std_ReturnType)138u)
#define RTE_E_SOFT_TRANSFORMER_ERROR ((Std_ReturnType)140u)

#define RTE_TRANSFORMER_SERIALIZER ((Rte_TransformerClass)1u)
#define RTE_TRANSFORMER_SAFETY     ((Rte_TransformerClass)2u)
#define RTE_TRANSFORMER_SECURITY   ((Rte_TransformerClass)3u)

同时定义了:

c 复制代码
typedef struct Rte_TransformerError {
    Rte_TransformerErrorCode errorCode;
    Rte_TransformerClass transformerClass;
} Rte_TransformerError;

这说明 RTE 能表达 Transformer 类别和硬/软 Transformer 错误,但当前工程扫描没有发现具体 ComXf_<transformerId> 实例。实际项目集成时,需要同时检查 RTE 生成接口和实现文件,而不能只看到通用类型定义就认定 ComXf 已启用。

6.3 配置限制总结

检查项 规范要求
通信类型 Sender/Receiver,不支持 Client-Server
数据类型 复合、固定长度、字节对齐
Transformer 链位置 发送侧第一个,接收侧最后一个反序列化环节
COM 配置 必须存在对应 Signal Group 和 I-PDU 配置
数组接口 必须启用 COM Signal Group Array Access
I-PDU 长度 覆盖 Signal Group 起始位置、长度和其他 Transformer 数据
空洞处理 使用 ComTxIPduUnusedAreasDefault
Post-Build COM 对应配置为 Post-Build 时,ComXf 也必须为 Post-Build
调度 ComXf 本身没有周期性 MainFunction
回调 ComXf 本身没有 Callback notification

7. 问题排查流程

7.1 总体排查流程

#mermaid-svg-ib5337lTqA1iBGrt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ib5337lTqA1iBGrt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ib5337lTqA1iBGrt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ib5337lTqA1iBGrt .error-icon{fill:#552222;}#mermaid-svg-ib5337lTqA1iBGrt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ib5337lTqA1iBGrt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ib5337lTqA1iBGrt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ib5337lTqA1iBGrt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ib5337lTqA1iBGrt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ib5337lTqA1iBGrt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ib5337lTqA1iBGrt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ib5337lTqA1iBGrt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ib5337lTqA1iBGrt .marker.cross{stroke:#333333;}#mermaid-svg-ib5337lTqA1iBGrt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ib5337lTqA1iBGrt p{margin:0;}#mermaid-svg-ib5337lTqA1iBGrt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ib5337lTqA1iBGrt .cluster-label text{fill:#333;}#mermaid-svg-ib5337lTqA1iBGrt .cluster-label span{color:#333;}#mermaid-svg-ib5337lTqA1iBGrt .cluster-label span p{background-color:transparent;}#mermaid-svg-ib5337lTqA1iBGrt .label text,#mermaid-svg-ib5337lTqA1iBGrt span{fill:#333;color:#333;}#mermaid-svg-ib5337lTqA1iBGrt .node rect,#mermaid-svg-ib5337lTqA1iBGrt .node circle,#mermaid-svg-ib5337lTqA1iBGrt .node ellipse,#mermaid-svg-ib5337lTqA1iBGrt .node polygon,#mermaid-svg-ib5337lTqA1iBGrt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ib5337lTqA1iBGrt .rough-node .label text,#mermaid-svg-ib5337lTqA1iBGrt .node .label text,#mermaid-svg-ib5337lTqA1iBGrt .image-shape .label,#mermaid-svg-ib5337lTqA1iBGrt .icon-shape .label{text-anchor:middle;}#mermaid-svg-ib5337lTqA1iBGrt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ib5337lTqA1iBGrt .rough-node .label,#mermaid-svg-ib5337lTqA1iBGrt .node .label,#mermaid-svg-ib5337lTqA1iBGrt .image-shape .label,#mermaid-svg-ib5337lTqA1iBGrt .icon-shape .label{text-align:center;}#mermaid-svg-ib5337lTqA1iBGrt .node.clickable{cursor:pointer;}#mermaid-svg-ib5337lTqA1iBGrt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ib5337lTqA1iBGrt .arrowheadPath{fill:#333333;}#mermaid-svg-ib5337lTqA1iBGrt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ib5337lTqA1iBGrt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ib5337lTqA1iBGrt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ib5337lTqA1iBGrt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ib5337lTqA1iBGrt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ib5337lTqA1iBGrt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ib5337lTqA1iBGrt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ib5337lTqA1iBGrt .cluster text{fill:#333;}#mermaid-svg-ib5337lTqA1iBGrt .cluster span{color:#333;}#mermaid-svg-ib5337lTqA1iBGrt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ib5337lTqA1iBGrt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ib5337lTqA1iBGrt rect.text{fill:none;stroke-width:0;}#mermaid-svg-ib5337lTqA1iBGrt .icon-shape,#mermaid-svg-ib5337lTqA1iBGrt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ib5337lTqA1iBGrt .icon-shape p,#mermaid-svg-ib5337lTqA1iBGrt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ib5337lTqA1iBGrt .icon-shape .label rect,#mermaid-svg-ib5337lTqA1iBGrt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ib5337lTqA1iBGrt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ib5337lTqA1iBGrt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ib5337lTqA1iBGrt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-ib5337lTqA1iBGrt .start>*{fill:#e8f1ff!important;stroke:#4b78b8!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .start span{fill:#e8f1ff!important;stroke:#4b78b8!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .decision>*{fill:#fff7df!important;stroke:#c58a00!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .decision span{fill:#fff7df!important;stroke:#c58a00!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .action>*{fill:#f4f4f4!important;stroke:#777!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .action span{fill:#f4f4f4!important;stroke:#777!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .result>*{fill:#e8f7ed!important;stroke:#398557!important;stroke-width:1px!important;}#mermaid-svg-ib5337lTqA1iBGrt .result span{fill:#e8f7ed!important;stroke:#398557!important;stroke-width:1px!important;} 没有 ComXf 符号 / 链接失败
发送数据错误
接收数据错误
返回 E_NO_DATA
数据错位 / 长度异常
否
是
否
是
否
是
否
是
否
是
否
是
否
是
否
是
否
是
否
是
否
是
否
是
是
否
否
是
发现 Transformer 或 Signal Group 通信异常
异常表现?
检查 ComXf 生成文件、源文件、头文件和编译清单
确认 Rte_Write 是否触发发送 Transformer 链
确认 COM 是否收到并更新 I-PDU
检查反序列化 buffer 和 bufferLength
核对 Signal Group 和 I-PDU 布局
存在 ComXf_?
当前配置可能未启用 COM Based Transformer
ComXf.h 和实现是否加入构建?
修复生成输出、include 路径或工程源文件清单
ComXf_Init 是否执行?
检查启动顺序和 ComXf_Init 配置指针
重新执行链路测试
Transformer 链配置正确?
检查 DataTransformation.transformerChain 顺序
ComXf 序列化是否返回 E_OK?
检查输入类型、固定长度、字节对齐和 bufferLength
Com_SendSignalGroupArray 是否可用?
检查 COM_TX_SIGNALGROUP_ARRAY、ArrayAccess 和 SignalGroup ID
COM 是否把数组复制到 I-PDU?
检查 COM 初始化、I-PDU Group 状态、COM_BUSY 和 firstByte/length
PduR / 下层是否成功发送?
按 PDU ID 映射、路由组、CanIf/CanTp 返回值继续排查
发送 Transformer 链基本正常
PduR 到 COM 的 RxIndication 是否到达?
Com_ReceiveSignalGroupArray 是否可用?
数组长度和起始位置正确?
ComXf_Inv 是否返回 E_OK?
检查输入长度、字节序、结构体类型和逆向链顺序
接收 Transformer 链基本正常
buffer == NULL_PTR 且 length == 0?
按规范返回 E_NO_DATA 且不修改输出
核对 COM Signal Group Array 配置
核对 firstByte、length、startPosition、packingByteOrder
核对 I-PDU 长度、UnusedAreasDefault 和后续 Transformer 头尾
RTE buffer 是否足够?
修正 BufferProperties、headerLength 或 RTE 缓冲长度
核对系统描述、COM ECUC、Xfrm ECUC 和 RTE 生成输入

7.2 发送问题检查顺序

  1. 是否生成并链接了 ComXf_<transformerId>。
  2. ComXf_Init 是否在 RTE/COM 业务调用前执行。
  3. Transformer 链中 COM Based Transformer 是否位于第一位。
  4. 输入结构体类型和生成函数参数类型是否一致。
  5. bufferLength 是否足够,是否包含后续 Transformer 的保留空间。
  6. 序列化数组是否传给了正确的 Signal Group ID。
  7. COM_TX_SIGNALGROUP_ARRAY 和 Signal Group ArrayAccess 是否有效。
  8. COM I-PDU Group 是否已启动,是否出现 COM_BUSY。
  9. firstByteNo 和数组 length 是否正确。
  10. PduR、CanIf/CanTp 的 PDU ID 和路由路径是否正确。

7.3 接收问题检查顺序

  1. 下层是否到达 PduR 和 COM 的 RxIndication。
  2. COM 是否更新了对应 I-PDU 和 Signal Group Array 缓存。
  3. COM_RX_SIGNALGROUP_ARRAY 和 ArrayAccess 是否有效。
  4. RTE 请求的 Signal Group ID 是否正确。
  5. 数组长度是否覆盖所有业务字段和 Transformer 头尾。
  6. 逆向 Transformer 顺序是否与发送链相反。
  7. 是否因长度不足、字节序或类型不匹配导致反序列化错误。
  8. ComXf_Inv 返回 E_NO_DATA 时,是否确实属于 NULL/0 长度无数据场景。
  9. 最终 RTE 输出数据是否被正确写回 SWC。

7.4 当前工程优先检查点

结合当前工程,建议优先检查:

  • BSWL\_gen\BSW\Com\Com_Cfg.h 中 Signal Group Array 相关宏的有效定义,而不是只看 Com.h 的 API 声明;
  • COM_TX_SIGNALGROUP_ARRAY / COM_RX_SIGNALGROUP_ARRAY 是否由其他生成头间接定义;
  • 构建依赖中是否存在 ComXf.h、ComXf 源文件和具体 ComXf_<transformerId> 符号;
  • RTE 生成代码是否有实际的 Transformer Chain 调用,而不是只有 Rte_TransformerError 类型;
  • COM 生成数据中是否存在 Com_TxSigGrpArrayCfg_t / Com_RxSigGrpArrayCfg_t 实例;
  • firstByteNo_uo、length_uo 与 I-PDU 长度是否满足边界;
  • COM ArrayAccess 对应 Signal Group 是否归属于正确的 I-PDU Group;
  • 若链路经过 PduR,核对 PduR_ComTransmit 使用的 Tx PDU ID 与 COM 配置映射。

8. 总结与工程检查清单

8.1 一句话模型

COM Based Transformer 负责把 RTE 侧固定长度的复合数据序列化为符合 COM Signal Group 布局的线性字节数组;COM 负责把数组放入或取出 I-PDU;PduR 负责继续路由,不负责理解 Transformer 的结构体语义。

8.2 规范与当前工程的差异

  • 规范定义了完整的 ComXf_<transformerId>、ComXf_Inv_<transformerId> 和 ComXf 生命周期 API。
  • 当前工程中发现了 RTE 通用 Transformer 错误类型和 COM Signal Group Array API 实现。
  • 当前工程扫描未发现具体 ComXf 生成函数或独立 ComXf 模块实现。
  • 当前 Com_Cfg.h 中 Signal Group 普通宏为注释状态,数组功能是否由其他生成头启用仍需结合最终编译预处理结果确认。
  • 因此,当前不能仅凭 COM 数组 API 源文件断定 COM Based Transformer 已经在 ECU 配置中启用。

8.3 配置检查清单

  • SWC Sender/Receiver 数据元素为复合类型。
  • 数据元素已映射到 SystemSignalGroup。
  • ISignalGroup 引用了 COM Based DataTransformation。
  • TransformationTechnology.protocol = COM-Based。
  • TransformationTechnology.version = 1.0.0。
  • transformerClass = serializer。
  • COM Based Transformer 位于发送 Transformer 链第一位。
  • Signal Group 为固定长度并满足字节对齐。
  • COM Signal Group ArrayAccess 已启用。
  • firstByte、length、startPosition 和 I-PDU 长度一致。
  • gaps 使用 ComTxIPduUnusedAreasDefault 填充。
  • 后续 Transformer 的 header/trailer 空间已预留。
  • RTE buffer 长度和 bufferLength 计算正确。
  • COM 与 ComXf 的 Pre-Compile/Post-Build 变体一致。
  • ComXf_Init 的配置指针和初始化顺序正确。
  • PduR 的 COM Tx PDU ID 映射正确。
  • 已检查 E_NO_DATA、E_SER_GENERIC_ERROR 和 RTE Transformer Error 的处理。

8.4 规范章节对照

本文内容 原规范章节
模块定位和限制 第 1 章、第 4 章
依赖关系 第 5 章
核心序列化规则 第 7.1 章
错误分类 第 7.2 章
API 定义 第 8 章
Transformer 规范配置 第 10 章
关联元模型 附录 B

规范版本 :AUTOSAR CP R25-11

模块:COM Based Transformer(ComXf)

相关推荐
七夜zippoe2 小时前
第一季·阶段总结:Agent 核心技能栈检查清单与实战自测
网络·ai·agent·核心技能·实战自测
剑胆凌锋10 小时前
等级保护测评工程师的困境
网络·安全·web安全·网络安全·职场和发展
2601_9672127211 小时前
专利型电源轨道系统技术路线对比与选型框架
大数据·运维·网络·经验分享
XiaoMaqqqq11 小时前
知名的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
ysu_031413 小时前
Postman接口调试实战指南-从HTTP请求到环境变量-Collection与自动化测试
网络·网络协议·测试工具·http·api·postman·可用性测试
小此方13 小时前
Linux网络(十九):TCP流量控制与滑动窗口详解,超时重传和快重传到底有什么区别
linux·运维·服务器·网络·网络协议·tcp/ip
通信瓦工15 小时前
利用浊度和电导率测量确定乙二醇基流体的质量
网络·数据库·ai
阿钱真强道15 小时前
33 嵌入式操作系统 | 模块七验收:端到端一键验收 + 项目答辩
网络·网络协议·粘包·回归测试·uloop
ggaofeng15 小时前
Ctrl+C结束进程是如何实现的
服务器·c语言·网络