在打印数据过程中发现有数据错位的现象发送<br />/*打印函数*/<br />void printfMessage(struct ObjectMessage *Msg)<br />{<br /> unsigned int i=0;<br /> unsigned char DLC=0;<br /> unsigned char buf[8];<br /> memset(buf, 0, 8);<br /> DLC = Msg->RFS_TFI.Bits.DLC_BIT;<br /> //print("TFI=%#X ", Msg->RFS_TFI);<br /> print("ID=%#X: x0dx0a", Msg->ID);<br /> switch (DLC){<br /> case 8:<br /> buf[7] = Msg->CANRDB.Bits.Data4_BIT;<br /> case 7:<br /> buf[6] = Msg->CANRDB.Bits.Data3_BIT;<br /> case 6:<br /> buf[5] = Msg->CANRDB.Bits.Data2_BIT;<br /> case 5:<br /> buf[4] = Msg->CANRDB.Bits.Data1_BIT;<br /> case 4:<br /> buf[3] = Msg->CANRDA.Bits.Data4_BIT;<br /> case 3:<br /> buf[2] = Msg->CANRDA.Bits.Data3_BIT;<br /> case 2:<br /> buf[1] = Msg->CANRDA.Bits.Data2_BIT;<br /> case 1:<br /> buf[0] = Msg->CANRDA.Bits.Data1_BIT;<br /> break;<br /> default:<br /> print("DLC=%dx0dx0ax0dx0a", DLC);<br /> return;<br /> }<br /> for(i=0;i<DLC;i++){<br /> print("f%d=%#x,", i, buf);<br /> }<br /> print("x0dx0ax0dx0a");<br />}<br /><br />void SendLow2HighData2Bus(void)<br />{<br /> struct Low2High *ptr=&LowSpeed2Highbuf;<br /><br /> if (ptr->TxBusy) return;<br /> if ((ptr->start != ptr->end) || ptr->full == _FULL_) {<br /> //if (CANGSR(CAN2).Bits.TBS_BIT != 0){<br /> if (BegainSend2CANBus(CAN2, &ptr->buf[ptr->end]) != 1){<br /> //TCAN_LEDGlint();<br /> ptr->TxBusy = 1;//开始向高速CAN口发送报文<br /> //在此打印由5K总线收到并发送给20K的数据帧<br /> printfMessage(&ptr->buf[ptr->end]);<br /> <br /> if (++ptr->end >= SIZEOF_LOW_HIGH) {<br /> ptr->end = 0;<br /> }<br /> ptr->full = 0;<br /> }else {<br /> print("2:busyx0dx0a");<br /> }<br /> //}<br /> }<br />}<br /><br />/************************************************/<br />/*打印结果如下(出错即丢帧时)*/<br /><br />//事件1,2帧<br />ID=0X1C880100: <br />f0=0x5,f1=0x1,f2=0x9,f3=0xed,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC840100: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件2,2帧<br />ID=0X1C888200: <br />f0=0x5,f1=0x82,f2=0x9,f3=0xec,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC848200: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件3,2帧<br />ID=0X1C888300: <br />f0=0xb,f1=0x83,f2=0x9,f3=0xec,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC848300: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件4,2帧<br />ID=0X1C888100: <br />f0=0xb,f1=0x81,f2=0x9,f3=0xed,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC848100: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件5,2帧<br />ID=0X1C880100: <br />f0=0xb,f1=0x1,f2=0x9,f3=0xee,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC840100: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件6,2帧<br />ID=0X1C888200: <br />f0=0xb,f1=0x82,f2=0x9,f3=0xed,f4=0x2a,f5=0xb9,f6=0x49,f7=0x1,<br /><br />ID=0XC848200: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件7,2帧<br />//本帧出错,f0~f7的内容应与其它事件信息一样即<br />//f0应为0xb,貌似f0数据丢失,而后续的向前移动了一个字节,导致节点<br />//无法正确识别数据帧格式,导致事件丢失<br />ID=0X44: <br />f0=0x81,f1=0x9,f2=0xed,f3=0x2a,f4=0xb9,<br /><br />ID=0XC848100: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//事件8,2帧<br />//同上,本节点正好丢失的2个事件,就是7,8<br />ID=0XC4: <br />f0=0x83,f1=0x9,f2=0xed,f3=0x2a,f4=0xb9,<br /><br />ID=0XC848300: <br />f0=0,f1=0,f2=0x1,f3=0,f4=0,f5=0,f6=0,f7=0,<br /><br />//不知道为什么帧内数据为出错<br />还有次打印出 DLC=11;不解中,收帧函数有bug???
|