CH372上位機讀取數(shù)據(jù)問題

我的上位機程序出現(xiàn)的原因是每當(dāng)執(zhí)行到 if(CH375ReadData((ULONG)pDlg->T2UHandle,&mBuf[0],&dlen))就直接跳出,斷點調(diào)試顯示dlen的值為零,請教一哈,這是什么原因啊

CH375ReadData返回值是否正確?有沒有調(diào)用CH375SetBufUpload設(shè)置緩沖上傳?CH375SetTimeout設(shè)置是多少? 如果調(diào)用CH375SetBufUpload的話會出現(xiàn)上面這種情況,CH375SetTimeout設(shè)置的讀超時在幾百微秒的話也會出現(xiàn)這種情況.


這個程序我在別的工程中,上位機可以連續(xù)收到數(shù)據(jù),用Assert測過,沒有問題。移植到當(dāng)前的進程中,就不行了!剛用Assert測試過,ch372ReadData返回值為零?,請教什么原因?。?/p>


CH375ReadData函數(shù)出錯了,調(diào)用GetLastError看返回值是多少,你的CH375OpenDevice在什么地方調(diào)用的,移植到當(dāng)前進程中的時候,要確保CH375OpenDevice在CH375ReadData之前調(diào)用.


在調(diào)用進程之前,調(diào)用CH375OpenDevice。我在CH375ReadData函數(shù)之前,T2UHandle = CreateFile( (char *)&DeviceName[0], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 可以讀出T2UHandle的值,就是走到CH375ReadData,就直接跳出去了


你的意思是在一個進程里調(diào)用CH375OpenDevice,然后把CreateFile的返回值T2UHandle傳給另一個進程? 要知道句柄在進程間(或是父進程與子進程之間)默認的是不共享的,有關(guān)句柄在進程間共享可以到網(wǎng)上搜一下.即使是CreateFile的返回值與CH375ReadData的第一個參數(shù)值相等也是不行的.


不是這樣的??! 是在一進程里調(diào)用CH375OpenDevice。CreateFile和CH375ReadData位于這個進程里。句柄一樣,其值也一樣。 下面是代碼: UINT mThreadUp2(LPVOID pParam) //數(shù)據(jù)接收線程 { UCHAR mBuf[mCH375_PACKET_LENGTH*8];

ULONG dlen;

HWND hWnd; MSG msg;

ULONG UpCount; CUSB dlg; dlg.DoModal();//調(diào)用CH375OpenDevice

CAnalyzeView *pDlg = (CAnalyzeView *)pParam; PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE); pDlg->m_TempThreadID=GetCurrentThreadId(); pDlg->m_trdup2=TRUE; if(T2UHandle == INVALID_HANDLE_VALUE) { UCHAR DeviceName[128]; memcpy(&DeviceName[0],CH375GetDeviceName(0),sizeof(DeviceName)); T2UHandle = CreateFile( (char *)&DeviceName[0], GENERIC_READ | GENERIC_WRITE, // 打開設(shè)備 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if(T2UHandle == INVALID_HANDLE_VALUE) { MessageBox(hWnd,"打開USB設(shè)備失敗!","USB通信",MB_OK|MB_ICONSTOP); return 0; } }

while(TRUE) { if(PeekMessage(&msg,NULL,WM_CLOSE,WM_CLOSE,PM_NOREMOVE)) { pDlg->m_TempThreadID=0; break; } if ( pDlg->T2UHandle != INVALID_HANDLE_VALUE ) {

if(CH375ReadData((ULONG)pDlg->T2UHandle,&mBuf[0],&dlen)) {//操作成功輸出數(shù)據(jù) CHAR buffer[mCH375_PACKET_LENGTH*8*2+1]; ULONG i,j; for(i=0,j=0;i { sprintf(&buffer[j],"%02X ",mBuf[i]); j += 3; } buffer[j] = '\0';

UCHAR *CData; CData=(UCHAR*)buffer;

EnterCriticalSection(&g_cs); pDlg->AddTempData(CData); LeaveCriticalSection(&g_cs); } } } pDlg->m_trdup2 = FALSE; //ExitThread(0); } return TRUE; }

幫忙看一哈?。?/p>


CH375ReadData函數(shù)出錯了,調(diào)用GetLastError看返回值是多少? DWORD dw; SetLastError(0); if(CH375ReadData((ULONG)pDlg->T2UHandle,&mBuf[0],&dlen))

{//操作成功輸出數(shù)據(jù) CHAR buffer[mCH375_PACKET_LENGTH*8*2+1]; ULONG i,j; for(i=0,j=0;i{ sprintf(&buffer[j],"%02X ",mBuf); j += 3; }else{ dw = GetLastError();//看一下返回值是多少 }

CH375OpenDevice 和 CreateFile 效果是一樣的,選一個


返回值為6,昨晚我將CH375ReadData中的第一個參數(shù)pDlg—>T2UHandle改為零的話,可以接收一兩次數(shù)據(jù)之后,就又收不到了!


6表示句柄無效,不要使用CreateFile ,只調(diào)用CH375OpenDevice,CH375ReadData的第一個參數(shù)用0試試


你用我們的DEBUG372軟件試試,如果還有問題的話,就是硬件有問題了,還有用屏蔽線試試


用DEBUG測沒有問題,只是每次運行到372ReadData時,會出現(xiàn)“UnHandle exception in ***.exe”O(jiān)XCOOOOOO5:Access Violation.點擊確定后,程序可以繼續(xù)執(zhí)行,不知道怎么解決?


好像你的dlen沒有初始話,CH375ReadData的第三個參數(shù)在調(diào)用之前設(shè)置為要讀取數(shù)據(jù)的長度,而且CH375ReadData返回之后會修改dlen


dlen沒有賦初值,可以接收到數(shù)據(jù)。如果那個dlen初始化的話,要給他怎么賦值???


dlen在CH375ReadData調(diào)用之前,設(shè)置成要讀數(shù)據(jù)的大小,比如你想讀64的話,dlen = 64,dlen 我們的庫中最大只能支持4096.這個dlen會被CH375ReadData修改,如果沒讀到數(shù)據(jù)的話dlen的大小就會被修改成0了,這樣你下次讀時就讀不到數(shù)據(jù)了."dlen沒有賦初值,可以接收到數(shù)據(jù)"這可能dlen是mThreadUp2的局部變量,是在棧中分配的,有可能不為0.


好像出現(xiàn)的情況如你所說的那樣,dlen在沒有讀數(shù)據(jù)之前,是被分配了一個值,而且很大。先謝謝了,有問題再請教?。?/p>


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

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