目录
简述
CanIf_Transmit()是AUTOSAR标准文档定义的服务函数,该函数服务是基于L-PDU。对L-SDU特定数据的访问是根据如下参数组织的:
- 发送L-PDU -> L-SDU ID。
- 数据结构指针,该数据结构包含L-SDU相关的数据,即指向L-SDU的指针,指向MetaData的指针和L-SDU的长度。
函数定义:
Std_ReturnType CanIf_Transmit (PduIdType TxPduId,const PduInfoType* PduInfoPtr ) |
第一个传参TxPduId是要发送的PDU buffer的identifier,即CanIfTxPdu的handle Id,
第二个传参PduInfoPrt指针是指向一个数据结构的指针,该数据结构包括两个元素:Pdu的数据和Pdu的长度,一般定义方式如下:
typedef struct
{
SduDataPtrType SduDataPtr;
PduLengthType SduLength;
} PduInfoType;
接下来,详细分析下CanIf_Transmit的静态代码,从代码上去理解如何实现报文的发送。
代码分析
定义local变量
Std_ReturnType retval = E_NOT_OK;
uint8 errorId = CANIF_E_NO_ERROR;
#if (CANIF_DATA_CHECKSUM_TX_SUPPORT == STD_ON)
uint8 txPduDataWithChecksum[CANIF_CFG_MAXTXDLC_PLUS_DATACHECKSUM];
#endif
Can_PduType localPdu;
#if CANIF_SETDYNAMICTXID_API == STD_ON
PduIdType DynamicPduId;
#endif
uint8 controllerId;
reteval为函数返回值,默认为E_NOT_OK;
errorId为故障码,默认为CANIF_E_NO_ERROR;