[求助]有个奇怪的问题帮忙解决一下!

我在你们的DEMO程序的基础上更改成一个简单的数据发送和接收做产品开发前期试验,遇到一个奇怪的问题:我从PC发送一组8个字节的数据包到MCU,MCU收到后将数据返回到PC用文本框显示出来,我用VB在应用程序处设置一个数据发送按钮,一个接收按钮,用8个文本框显示8个字节的数据,我发送0-7这样一组数,如果在发送按钮中发完后立即读回来显示数据是正确的,但如果设置成按接收按钮再读回来显示却是错的,如下图如示: 错误.bmp MCU中的中断程序是这样: void mCH375Interrupt( ) interrupt 0 using 1 { unsigned char InterruptStatus; unsigned char length; unsigned char test_data[7]; CH375_CMD_PORT = CMD_GET_STATUS; /* 获取中断状态并取消中断请求 */ InterruptStatus = CH375_DAT_PORT; /* 获取中断状态 */ IE0 = 0; /* 清中断标志,对应于INT0中断 */ if ( InterruptStatus == USB_INT_EP2_OUT ) { /* 批量端点下传成功 */ CH375_CMD_PORT = CMD_RD_USB_DATA; /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ length = CH375_DAT_PORT; /* 首先读取后续数据长度 */ for ( i=0; i CH375_CMD_PORT = CMD_WR_USB_DATA7; CH375_DAT_PORT = length; for ( i=0; i else if ( InterruptStatus == USB_INT_EP2_IN ) { /* 批量数据发送成功 */ CH375_CMD_PORT = CMD_UNLOCK_USB; /* 释放当前USB缓冲区 */ } else if ( InterruptStatus == USB_INT_EP1_IN ) { /* 中断数据发送成功 */ CH375_CMD_PORT = CMD_UNLOCK_USB; /* 释放当前USB缓冲区 */ FLAG_INT_WAIT = 0; /* 清发送中断等待标志,通知应用程序可以继续发送中断数据 */ } else { /* 内置固件的USB方式下不应该出现其它中断状态 */ } } 我试过改成用中断端点1上传数据,一点发送,PC马上接收到数据而且显示出来也是对的,但马上自动又变成上图所示数据了,而且Data3和Data4在不停的变,Data3由0变到9,Data4由0变到15,不停的循环,请问这是怎么会事啊?

更正一下,上面test_data是test_data[i];奇怪后面的字体怎么变了,发的时候都是正的。


test_data指针在存取接收到的数据时,指针好像一直指的是test_data[0]吧.


hcn大哥,帮忙看看啊,很急啊!


你如果是用批量端点的话,那你可以直接用我们的TEST。C的程序来调试你上位机的程序,因为这个程序也是先将上位机的数据先读出来,在通过端点2发送到上位机,或者你上位机用CH372DEBUG来调试你的下位机,下位机调试成功之后在用你的下位机来调试你的上位机,还有你上面的程序定义的:test_data[ 7 ];应该为 test_data[ 8 ];你少定了一个缓冲区就可能会丢数据,test_data[ i ] = CH375_DAT_PORT [ i ];


问题还是没有解决,为什么下位机没有发数据,上位机中的中断程序也不断的读数据并显示啊? Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中断服务程序 frmMain.Text0.Text = mBuffer.buf(0) frmMain.Text1.Text = mBuffer.buf(1) frmMain.Text2.Text = mBuffer.buf(2) frmMain.Text3.Text = mBuffer.buf(3) frmMain.Text4.Text = mBuffer.buf(4) frmMain.Text5.Text = mBuffer.buf(5) frmMain.Text6.Text = mBuffer.buf(6) frmMain.Text7.Text = mBuffer.buf(7) End Sub


那就是你的上位机有问题,仔细查你自己的上位机


我的上位机是在DEMO的基础上改的,中断这一块就改成了上面我发的那样,其它的都没动过啊


我用《CH372/CH375的简单调试工具》测试过接收数据是没问题的,有没有这个程序的VB例程啊?


各位大虾们能不能帮忙解决一下啊,为什么上位机的中断程序不断的读出数据啊,我是在DEMO程序的基础上改的,确定没问题啊


只有登录才能回复,可以选择微信账号登录