This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:无法检查 CAN 消息是否丢失

Guru**** 2478775 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/937154/tms570lc4357-unable-to-check-if-a-can-message-was-lost

器件型号:TMS570LC4357

大家好、

我正在寻找一种可能的方法来检查在通信期间是否有 CAN.message 丢失。 为了测试这种情况、

我发送4条具有相同消息 ID 的消息、并且我只配置一个与四个 TX-messagebox 具有相同消息 ID 的 MessageBox。

我配置了消息框、如下所示:

-messagebox[1-4]是具有相同 messageID 1的 Tx-messagebox

-messagebox[33-36]是包含相应 messageID 1 - 4的 rx-messagebox

我观察  到 IF2MCTL 寄存器中的 MsgLst 位来检查是否发生了任何变化。 但没有任何变化。 它始终保持为0。

有人知道、我如何才能发现丢失的消息。

低于我的代码

字符数据[8]="Hello";
char Data2[8]="世界!";
uint8 msgid = 1、a = 0;
uint8数据阵列[4][8];


uint32 i;
canInit();
canEnabableeloopback (canREG1、Internal_LBK);
memcpy (&DataArray[0]、Data、8);
memcpy (&DataArray[1][0]、Data2、8);
memcpy (&DataArray[2][0]、Data、8);
memcpy (&DataArray[3][0]、Data2、8);

对于(i = 1;i<= 4;i++){
canUpdateID (canREG1、I、0x40000000U | 0x20000000U |(msgid & 0x1FFFFFFFU));
ResultOfTransmission = canTransmit (canREG1、I、DataArray[I-1]);
canUpdateID (canREG1、I + 32、0x40000000U |(I & 0x1FFFFFFFU));
}

while (1){
静态 uint32 j = 33;
uint8 i;
uint32 ValueOfMsgLst=0、ValueOfNewdata=0;

printf("****圆 nr %d***** ",j);
ValueOfMsgLst=(uint32)(canREG1->IF2MCTL &(1 << 14));

ValueOfNewdata =(uint32)(canREG1->IF2MCTL &(1 << 15));
如果(A < 4){
ResultOfTransmission = canGetData (canREG1、j、&data[a][0]);
}
A++;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    CAN 报文处理器将来自 CAN 内核移位寄存器的报文存储到报文 RAM 中的报文对象中。 NewData 位置位表示接收到新数据。 当 CPU 通过 IFx 读取报文对象时、应将 NewDat 位复位。 如果在接收时 NewDat 位已经被置位、MsgLst 被置位来表示之前的数据丢失。

    您能否在收到新消息后检查消息对象33的 NewData 位是否已设置?