基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5
 
ArcCore中Communication Service中各层都有许多ID的配置,如Can driver中有CanObjectId,
CanIf中有CANIF_ID,CanTp中又有CANTP_ID,其他的PDUR_ID, COM_ID等等,纷繁复杂。
 
先来看看各层的配置:
Can Driver:
ArcCore重构-打通Can各层ID配置-LMLPHP
 
CanIf:
ArcCore重构-打通Can各层ID配置-LMLPHP
CanTp:
ArcCore重构-打通Can各层ID配置-LMLPHP
CanTp中最为明显,各种ID齐上场,眼花缭乱,很难理清楚各个ID之间的关系。这些ID又被当做参数传递给上层或者下层,或者被当做数组索引号来索引数组,配置时很难一一对应起来。
有没有什么办法简化呢?
 
Communication各层次交互图如下:
ArcCore重构-打通Can各层ID配置-LMLPHP
 
跟踪代码可以发现,除了Can driver之外,其他各层之间的API,都是用PduId为参数指代要操作的PDU。虽然这些PduId在每一层都有自己的对应关系,但在各层之间指代的是同一个PDU类型,如COM -> PDUR -> CANTP -> CANIF -> CAN DRV,每一层有自己的ID,但是指代其实是同一个Pdu类型。
 
所以可以打通各层的PduId,统一使用,各层的配置数组索引号根据统一的PduId编号进行映射,在内部使用该映射即可。
CanIf: PduId_to_CanIfPduConfig_Index_Map;
CanTp: PduId_to_CanTpNSdu_Index_Map;
PduR: PduId_to_RoutingPath_Index_Map;
这些里面的PduId都是统一定义的,各层对应到各自的配置索引号,以供使用。
如:
ArcCore重构-打通Can各层ID配置-LMLPHP
 
 
CanId & PduId
另外一个需要注意的是,要区分Can Id和 PduId。
CanId: 实际发送接收时使用的ID;编号为某PduId的Pdu最终通过Can发送时使用的CanId。
PduId: Pdu类型的编号,用以指代一个Pdu类型。
05-11 12:50