ArcCore重构-打通Can各层ID配置

基于官方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配置

CanIf:

ArcCore重构-打通Can各层ID配置

CanTp:

ArcCore重构-打通Can各层ID配置

CanTp中最为明显,各种ID齐上场,眼花缭乱,很难理清楚各个ID之间的关系。这些ID又被当做参数传递给上层或者下层,或者被当做数组索引号来索引数组,配置时很难一一对应起来。

有没有什么办法简化呢?

Communication各层次交互图如下:

ArcCore重构-打通Can各层ID配置

跟踪代码可以发现,除了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都是统一定义的,各层对应到各自的配置索引号,以供使用。

CanId & PduId

另外一个需要注意的是,要区分Can Id和 PduId。

CanId: 实际发送接收时使用的ID;编号为某PduId的Pdu最终通过Can发送时使用的CanId。

PduId: Pdu类型的编号,用以指代一个Pdu类型。

相关推荐