[求助]If (CH341MemReadAddr0(mIndex, buffer, mLen)) Then ???

  在《\CH341EVT\CH341VB》窗體“CH341PAR”的代碼頁中:

  關(guān)于“Private Sub memRead0_Click()”,有如下程序代碼:

  [u]If (CH341MemReadAddr0(mIndex, buffer, mLen)) Then[/u]

  理解為:如果讀取數(shù)據(jù)塊成功,則進行以下的操作(把取回數(shù)組“buffer”中的數(shù)值全部轉(zhuǎn)化為十六進值字符值納入字符變量“buff”中,然后顯示于“memData0”中。

  現(xiàn)在的問題是:由于在前并未啟動“CH341MemReadAddr0(mIndex, buffer, mLen)”指令(或者按貴公司的說法為函數(shù)),所以在“If”之后才開始讀取數(shù)值,例如要讀取1024字節(jié)需要等待1mS甚至更長的時間,然后執(zhí)行后續(xù)的命令。這樣以來,如果需要連續(xù)讀取數(shù)據(jù),就有難以忍受的等待周期,丟失該時間采集數(shù)據(jù)的機會。


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

  假定改為如下程序如何?

  CH341MemReadAddr0(mIndex, buffer0, 0Len)  ?。ㄑ訒r例如1mS):X = 1   DO WHILE X < 10     CH341MemReadAddr1(mIndex, buffer1, 1Len)    buff(X) = ""    For i = 0 To 0Len - 1 Step 1    DoEvents    buff(X) = buff(X) & Hex2bit(buffer0.buf(i)) + " "   Next i     X = X + 1     CH341MemReadAddr0(mIndex, buffer0, 0Len)   buff(X) = ""   For i = 0 To 1Len - 1 Step 1   DoEvents    buff(X) = buff(X) & Hex2bit(buffer1.buf(i)) + " "   Next i     X = X + 1   LOOP     


呵呵,我知道這個異想天開的程序段漏洞百出:

  首先這個想法是基于調(diào)用API讀取數(shù)組是在后臺進行的,在這個程序過程中不受其運行時間的限制(并行機制);

  然后,本程序沒有能力考慮與“后臺”讀數(shù)組“函數(shù)”的同步運行,只假定其速度大于后者,卻又不知道如何去等待或者得到可以繼續(xù)進行的信息。

  程序的總體構(gòu)思為連續(xù)讀?。保按螖?shù)據(jù),并未提出最終形成的10個字符串如何處理的問題(實際上會自行解決)。

  說白了,我甚至根本就不知道那“DoEvents”做何用途,不過照搬過來就是……

  正因為不成熟或者說是漏洞百出,才期望得到指正形成真正實用的程序,感覺總比一點想法也沒有,直接要求幫助要好那么一點


補充說明一下:

  在這里的現(xiàn)象是兩次分別讀取地址0和1的數(shù)據(jù),事實上不過借用來區(qū)別兩次不同的調(diào)用而已,現(xiàn)實使用中完全排除了A0引腳的作用。簡單的說法,就是在讀地址1命令發(fā)出后,直接處理已經(jīng)讀取充足的地址0數(shù)組,然后改為發(fā)出讀地址0的命令,而直接處理已經(jīng)讀取充足的地址1數(shù)組,如此循環(huán)進行。


??????


我們提供的例子代碼就是給客戶提供一個好的開發(fā)環(huán)境和驗證API,可能在編寫代碼時沒有考慮到一些實際應用過程中的問題


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

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