我正在为串行端做一个循环缓冲区。以下是部分编码:
void YourHighPriorityISRCode()
{
if(INTCON3bits.INT2IF == 1)
{
INTCON3bits.INT2IF = 0;
}
if(PIR1bits.RCIF!=1)
return;
rxbuf = RCREG;
if (rxbuf==TOKEN)
{
b485RxToken = 1;
return;
}
if (!b485SOH)
{
if (rxbuf!=SOH)
{
return;
}
b485SOH=1;
return;
}
if (n485RxDataPos>=RS485RXSIZE)
n485RxDataPos = 0;
RS485RXDATA[n485RxDataPos++] = rxbuf;
if (rxbuf == EOT)
b485SOH = 0;
}
void main(void)
{
nstate = STATE_RS485_RXDATA;
while(1)
{
USBDeviceTasks();
switch (nState)
{
case STATE_RS485_RXDATA:
p485 = 0;
INTCONbits.GIE = 1;
if (nUSBReady == 0)
{
if (n485RxDataPos != n485PrDataPos)
{
j = n485PrDataPos;
for (i=0; i<RS485RXSIZE; i++)
{
if (RS485RXDATA[n485PrDataPos] == EOT)
{
byTmp = i;
n485PrDataPos++;
memset (hid_report_in, 0, sizeof(hid_report_in));
hid_report_in[0] = SOH;
if (RS485RXSIZE - j >= byTmp + 1)
memcpy ((void*)&hid_report_in[1], (void*)&RS485RXDATA[j], byTmp);
else if (RS485RXSIZE - j < byTmp + 1)
{
memcpy ((void*)&hid_report_in[1], (void*)&RS485RXDATA[j], byTmp);
memcpy ((void*)&hid_report_in[RS485RXSIZE - j + 1], (void*)&RS485RXDATA[0], (byTmp+1)-(RS485RXSIZE - j));
}
hid_report_in[byTmp+1] = EOT;
hid_report_in[byTmp+2] = 0x00;
if (RS485RXSIZE - j >= byTmp + 1)
memset (&RS485RXDATA[j], 0, byTmp+1);
else if (RS485RXSIZE - j < byTmp + 1)
{
memset (&RS485RXDATA[j], 0, byTmp+1);
memset (&RS485RXDATA[0], 0, (byTmp+1)-(RS485RXSIZE - j));
}
nState = STATE_SERVER_TXDATA;
nRS485TX = 1;
nUSBReady = 1;
break;
}
n485PrDataPos++;
if (n485PrDataPos>=RS485RXSIZE)
n485PrDataPos = 0;
}
}
}
break;
case STATE_SERVER_TXDATA:
if (nHoldTXServer>0)
{
nHoldTXServer--;
break;
}
if (HIDTxHandleBusy(USBInHandle) == 0)
{
USBInHandle = HIDTxPacket(HID_EP, (BYTE*)&hid_report_in, HID_INPUT_REPORT_BYTES);
nState = STATE_RS485_RXDATA;
nWaitTXServer = 0;
nHoldTXServer = nDefaultHoldTXServer;
if (nRS485TX == 1)
{
nRS485TX = 0;
nUSBReady = 0;
}
}
if (nWaitTXServer <= 0)
{
nWaitTXServer = 5000;
}
else
nWaitTXServer--;
break;
}
}
此处的应用程序是通过USB端口传输串行端口上收到的任何内容。 我在这里遇到的问题是从我的USB通信接收数据的设备有时会遗漏一些数据。就像我有四个协议:协议A,协议B,协议C和协议D由串口接收,我的usb端口也假设发送所有四个协议。但是接收我的usb协议的设备有时会错过一个。我想在这里检查一下是什么问题。
我已经检查过我的串口收到了所有四种协议。现在是我的一面。如何检查我的USB端是否全部发送出去?
我正在使用Picket3,因此我无法使用调试窗口并将数据打印出来。我唯一的做法是在“USBInHandle = HIDTxPacket(HID_EP,(BYTE *)&amp; hid_report_in,HID_INPUT_REPORT_BYTES);”行上设置一个断点。每当我的例程运行到该断点时它就会停止。通过在该行放置一个断点表明我的数据是由usb传输出来的吗?