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-11 08:32:09 浏览: 65
C实现与 uint64_t 相同功能的类
这段代码是一个CAN总线发送消息的函数。函数的输入参数包括消息索引(idxMsg)、消息数据长度(MsgDLC)和数据指针(data)。函数的返回值是一个UInt8_T类型的变量。
函数首先定义了一些局部变量,包括returnTemp和i,以及一个常量指针TblPtr。然后,函数通过计算得到TblPtr的值,用于访问一个CANTxTbl_T类型的结构体数组CANTxCfgTbl中的元素。
接下来,函数会根据条件判断来确定是否执行CAN消息的发送操作。如果idxMsg等于某几个特定的值,说明是新增的报文,需要将数据逐个复制到CANTxBuff中,并调用Com_TriggerIPDUSend函数触发IPDU的发送。在这个过程中,returnTemp被设置为1。
如果不满足上述条件,说明是已经定义好的报文,并且在首次发送时需要将数据复制到CANTxBuff中。在这种情况下,会检查一个名为FirstFrame的标志位,如果为真,则执行数据复制操作,并将returnTemp设置为1。
最后,函数返回returnTemp的值,表示消息发送是否成功。
阅读全文