我們公司目前用ch372芯片進(jìn)行實(shí)時(shí)數(shù)據(jù)采集,就是把外界的一些信號(hào),比如電壓,溫度等物理量轉(zhuǎn)化為數(shù)字信號(hào),再通過ch372芯片實(shí)時(shí)發(fā)送到電腦,進(jìn)行顯示并處理,我負(fù)責(zé)的就是上位機(jī)的軟件的編寫,該軟件的功能是邊從usb口讀取數(shù)據(jù),邊顯示并處理數(shù)據(jù),可是現(xiàn)在發(fā)現(xiàn)一個(gè)問題如下:當(dāng)我僅僅把設(shè)備連接到電腦上的USB口而不開啟軟件讀寫數(shù)據(jù)時(shí),電腦一切正常,絕不會(huì)有任何異常,當(dāng)我打開軟件對(duì)設(shè)備讀寫數(shù)據(jù)時(shí),在絕大部分時(shí)間內(nèi)電腦也不會(huì)有異常,但有時(shí)候會(huì)突然出現(xiàn)鼠標(biāo)失靈或鍵盤失靈,或一起失靈,而此時(shí)電腦上的數(shù)據(jù)處理軟件仍然可以正常讀寫顯示數(shù)據(jù),數(shù)據(jù)仍然在源源不斷地發(fā)送到電腦上來,就是鼠標(biāo)和鍵盤不管用了,如果用的是usb鼠標(biāo)鍵盤的話,把usb鼠標(biāo)鍵盤重新插拔下,鼠標(biāo)鍵盤就好了,如果是ps/2鼠標(biāo)鍵盤的話就只有重啟電腦了.請(qǐng)問大家有誰知道這是怎么回事呢?還有就是我的上位機(jī)軟件的采樣頻率是20ms,就是每隔20ms向usb口讀寫一次數(shù)據(jù),先寫后讀,這會(huì)有關(guān)系嗎?請(qǐng)多指教了,在此先謝過了.
你說的這種現(xiàn)象是普片現(xiàn)象還是只在一臺(tái)電腦上出現(xiàn)?和計(jì)算機(jī)通信是用我們的驅(qū)動(dòng)還是用HID通信的?
是普遍現(xiàn)象,在多臺(tái)電腦上都有這個(gè)現(xiàn)象,包括臺(tái)式機(jī)和筆記本,也包括品牌機(jī)和組裝機(jī),不過有的電腦這種現(xiàn)象頻繁些,有的不是很頻繁,我用的是隨產(chǎn)品附帶的驅(qū)動(dòng),不知道是怎么回事啊.
出現(xiàn)這種現(xiàn)象比較頻繁的通常都是一些老電腦,新電腦通常不是很常見,但確實(shí)都有這種現(xiàn)象.
首先你可以用我們的TEST測(cè)試程序測(cè)試一下,看你說的這種現(xiàn)象是硬件造成的還是軟件造成的. 你在讀數(shù)據(jù)的時(shí)候是不是用的查詢的方式?但是沒有在多線程里查詢,在沒有數(shù)據(jù)來的時(shí)候,CH375ReadData那個(gè)函數(shù)會(huì)一直等待,這會(huì)導(dǎo)致鍵盤和鼠標(biāo)的消息不能及時(shí)響應(yīng),造成程序假死的現(xiàn)象,如果是用多線程的話就不會(huì)出現(xiàn)這種假死情況.
應(yīng)該不是CH375ReadData這個(gè)函數(shù)造成的,因?yàn)槲乙呀?jīng)把讀寫超時(shí)設(shè)置成了100ms,沒有數(shù)據(jù)的時(shí)候它不會(huì)一直等待的,并且當(dāng)鼠標(biāo)失靈的時(shí)候,我的這個(gè)數(shù)據(jù)采集程序是正常運(yùn)行的,沒有死,它仍然在不斷地讀取數(shù)據(jù)并在窗口上以曲線的形式描繪數(shù)據(jù),并沒有讀不到數(shù)據(jù),采樣速度也沒有變慢,也就是說,整個(gè)電腦從表面看起來失靈的只是鼠標(biāo)或鍵盤,其它的一切正常;另外有的時(shí)候只有鼠標(biāo)失靈而鍵盤未失靈,這時(shí)候我可以通過鍵盤控制將數(shù)據(jù)采集程序關(guān)掉,而這時(shí)鼠標(biāo)并不會(huì)恢復(fù)正常,仍然需要重新啟動(dòng)電腦才行;還有就是我獲得數(shù)據(jù)是采用寫-讀的方式讀取數(shù)據(jù)的,就是說每次我要采集一個(gè)數(shù)據(jù)的時(shí)候我會(huì)先用CH375WriteData向設(shè)備寫一個(gè)命令,設(shè)備接收到這個(gè)命令后才會(huì)向上位機(jī)發(fā)送一組數(shù)據(jù),這個(gè)時(shí)候我再調(diào)用CH375ReadData來讀取數(shù)據(jù),屬于問答式的數(shù)據(jù)傳輸方式.
我覺得你應(yīng)該先找到問題出在哪.首先你可以用我們的TEST測(cè)試程序測(cè)試一下,看你說的這種現(xiàn)象是硬件造成的還是軟件造成的,如果TEST測(cè)試通過的話那就是軟件造成的,這可能是使用我們的庫函數(shù)不當(dāng),也可能是你使用的其他API函數(shù)不當(dāng)造成的,你可以寫個(gè)簡(jiǎn)單的測(cè)試程序,任務(wù)只是收發(fā)數(shù)據(jù),看這樣會(huì)不會(huì)出現(xiàn)那種現(xiàn)象,這樣逐步縮小范圍
好的,我先逐漸排查一下