基於官方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:
CanIf:
CanTp:
CanTp中最為明顯,各種ID齊上場,眼花繚亂,很難理清楚各個ID之間的關系。這些ID又被當做參數傳遞給上層或者下層,或者被當做數組索引號來索引數組,配置時很難一一對應起來。
有沒有什么辦法簡化呢?
Communication各層次交互圖如下:
跟蹤代碼可以發現,除了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類型。