UInt8_T CAN_TransmitMsg(UInt8_T idxMsg, UInt8_T MsgDLC, UInt8_T * data) { UInt8_T returnTemp = 0; UInt8_T i = 0; const CANTxTbl_T* TblPtr = &(CANTxCfgTbl[0]); TblPtr = TblPtr + idxMsg - gmi_noCanMsgIn; if (((TblPtr->CANTxHandle) >= gmi_noCanMsgIn) && ((TblPtr->CANTxHandle) <= (gmi_noCanMsg - 1))) { if(idxMsg == gmi_idxEvbusOut_VCU_IMMO_0080 || idxMsg == gmi_idxEvbusOut_VCU_20_0117 || idxMsg == gmi_idxEvbusOut_VCU_21_0119)//新增报文后,这里要适应性调整:事件帧索引 { while (i < MsgDLC) { *((TblPtr->CANTxBuff)+i) = data[i]; i++; } if(idxMsg == gmi_idxEvbusOut_VCU_IMMO_0080) { Com_TriggerIPDUSend(ComConf_ComIPdu_VCU_IMMO_CAN1_CAN1); } if(idxMsg == gmi_idxEvbusOut_VCU_20_0117) { Com_TriggerIPDUSend(ComConf_ComIPdu_VCU_20_CAN1_CAN1); } if(idxMsg == gmi_idxEvbusOut_VCU_20_0117) { Com_TriggerIPDUSend(ComConf_ComIPdu_VCU_21_CAN1_CAN1); } returnTemp = 1; } else { if(*(TblPtr->FirstFrame))//首阵发送DBC定义的初始值 { while (i < MsgDLC) { *((TblPtr->CANTxBuff)+i) = data[i]; i++; } returnTemp = 1; } } } return returnTemp; }
时间: 2024-04-19 17:28:37 浏览: 114
C实现与 uint64_t 相同功能的类
这是一个用于发送CAN消息的函数。它的参数包括消息索引(idxMsg)、消息数据长度(MsgDLC)和消息数据(data)。函数内部会根据消息索引来选择不同的处理方式。
首先,函数会根据消息索引找到对应的消息配置表项(TblPtr)。然后,如果消息索引是特定的几个值(gmi_idxEvbusOut_VCU_IMMO_0080、gmi_idxEvbusOut_VCU_20_0117、gmi_idxEvbusOut_VCU_21_0119),则会将消息数据复制到对应的消息缓冲区中,并根据不同的消息索引触发相应的IPDU发送函数(Com_TriggerIPDUSend)。最后,函数会返回一个标志值(returnTemp)来表示消息是否发送成功。
对于其他消息索引,如果首帧标志位(FirstFrame)为真,则会将消息数据复制到对应的消息缓冲区中,并返回发送成功的标志值。否则,不进行任何操作,直接返回发送失败的标志值。
需要注意的是,在新增报文后,需要根据实际情况适应性调整事件帧索引的判断条件。另外,在代码中存在一个错误,第三个条件判断语句应该是判断idxMsg是否等于gmi_idxEvbusOut_VCU_21_0119,而不是gmi_idxEvbusOut_VCU_20_0117。
阅读全文