[求助]有個奇怪的問題幫忙解決一下!

我在你們的DEMO程序的基礎(chǔ)上更改成一個簡單的數(shù)據(jù)發(fā)送和接收做產(chǎn)品開發(fā)前期試驗,遇到一個奇怪的問題:我從PC發(fā)送一組8個字節(jié)的數(shù)據(jù)包到MCU,MCU收到后將數(shù)據(jù)返回到PC用文本框顯示出來,我用VB在應(yīng)用程序處設(shè)置一個數(shù)據(jù)發(fā)送按鈕,一個接收按鈕,用8個文本框顯示8個字節(jié)的數(shù)據(jù),我發(fā)送0-7這樣一組數(shù),如果在發(fā)送按鈕中發(fā)完后立即讀回來顯示數(shù)據(jù)是正確的,但如果設(shè)置成按接收按鈕再讀回來顯示卻是錯的,如下圖如示: 錯誤.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; /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus = CH375_DAT_PORT; /* 獲取中斷狀態(tài) */ IE0 = 0; /* 清中斷標(biāo)志,對應(yīng)于INT0中斷 */ if ( InterruptStatus == USB_INT_EP2_OUT ) { /* 批量端點下傳成功 */ CH375_CMD_PORT = CMD_RD_USB_DATA; /* 從當(dāng)前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ length = CH375_DAT_PORT; /* 首先讀取后續(xù)數(shù)據(jù)長度 */ 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 ) { /* 批量數(shù)據(jù)發(fā)送成功 */ CH375_CMD_PORT = CMD_UNLOCK_USB; /* 釋放當(dāng)前USB緩沖區(qū) */ } else if ( InterruptStatus == USB_INT_EP1_IN ) { /* 中斷數(shù)據(jù)發(fā)送成功 */ CH375_CMD_PORT = CMD_UNLOCK_USB; /* 釋放當(dāng)前USB緩沖區(qū) */ FLAG_INT_WAIT = 0; /* 清發(fā)送中斷等待標(biāo)志,通知應(yīng)用程序可以繼續(xù)發(fā)送中斷數(shù)據(jù) */ } else { /* 內(nèi)置固件的USB方式下不應(yīng)該出現(xiàn)其它中斷狀態(tài) */ } } 我試過改成用中斷端點1上傳數(shù)據(jù),一點發(fā)送,PC馬上接收到數(shù)據(jù)而且顯示出來也是對的,但馬上自動又變成上圖所示數(shù)據(jù)了,而且Data3和Data4在不停的變,Data3由0變到9,Data4由0變到15,不停的循環(huán),請問這是怎么會事???

更正一下,上面test_data是test_data[i];奇怪后面的字體怎么變了,發(fā)的時候都是正的。


test_data指針在存取接收到的數(shù)據(jù)時,指針好像一直指的是test_data[0]吧.


hcn大哥,幫忙看看啊,很急??!


你如果是用批量端點的話,那你可以直接用我們的TEST。C的程序來調(diào)試你上位機的程序,因為這個程序也是先將上位機的數(shù)據(jù)先讀出來,在通過端點2發(fā)送到上位機,或者你上位機用CH372DEBUG來調(diào)試你的下位機,下位機調(diào)試成功之后在用你的下位機來調(diào)試你的上位機,還有你上面的程序定義的:test_data[ 7 ];應(yīng)該為 test_data[ 8 ];你少定了一個緩沖區(qū)就可能會丟數(shù)據(jù),test_data[ i ] = CH375_DAT_PORT [ i ];


問題還是沒有解決,為什么下位機沒有發(fā)數(shù)據(jù),上位機中的中斷程序也不斷的讀數(shù)據(jù)并顯示啊? Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中斷服務(wù)程序 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


那就是你的上位機有問題,仔細(xì)查你自己的上位機


我的上位機是在DEMO的基礎(chǔ)上改的,中斷這一塊就改成了上面我發(fā)的那樣,其它的都沒動過啊


我用《CH372/CH375的簡單調(diào)試工具》測試過接收數(shù)據(jù)是沒問題的,有沒有這個程序的VB例程啊?


各位大蝦們能不能幫忙解決一下啊,為什么上位機的中斷程序不斷的讀出數(shù)據(jù)啊,我是在DEMO程序的基礎(chǔ)上改的,確定沒問題啊


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频