[求助]關(guān)于用labVIEW調(diào)用CH341DLL問(wèn)題。

在用labVIEW調(diào)用CH341DLL.dll,使用IIC模式向EEPROM24L32讀取及寫(xiě)入數(shù)據(jù),已經(jīng)實(shí)現(xiàn)了讀取及寫(xiě)入操作,但發(fā)現(xiàn)一些問(wèn)題。 1。我使用labVIEW7.1時(shí),發(fā)現(xiàn)在調(diào)用及運(yùn)行API-CH341ReadEEPROM VI時(shí)很不穩(wěn)寫(xiě),經(jīng)常出現(xiàn)labVIEW內(nèi)存出錯(cuò),然后自動(dòng)退出。 2。讀取長(zhǎng)度很多時(shí)候不能受控,現(xiàn)象是當(dāng)設(shè)定讀100個(gè)字節(jié)時(shí),會(huì)讀出100個(gè)安節(jié)的EEprom內(nèi)容,但后面還帶有不定無(wú)用的數(shù)據(jù)。當(dāng)再設(shè)成讀取50個(gè)字節(jié)再讀取時(shí),讀出顯示的字節(jié)數(shù)還是原來(lái)的數(shù)據(jù),沒(méi)有減少。 3。我調(diào)用時(shí)順序是:CH341_OpenDevice>CH341ReadEEPROM>CH341_CloseDevice. 這樣完成讀操作,不知道是不是需要其它設(shè)置。

關(guān)于內(nèi)存出錯(cuò)這個(gè)問(wèn)題,你首先要確認(rèn)在哪個(gè)API出錯(cuò)的,API輸入?yún)?shù)是否正確,你可以參考我們的應(yīng)用例程CH341PAR.EXE,有源碼提供


我的問(wèn)題可能這個(gè)兄弟碰到過(guò):http://www.findthetime.net/bbs/View.asp?T=1&S=101&I=14650 不知道是不是要先對(duì) PUCHAR oBuffer初始化?怎么初始化?因?yàn)槲颐看巫鲎x寫(xiě)操作都有可能使LabVIEW死掉,并且讀出來(lái)的信息后會(huì)帶有l(wèi)avVIEW運(yùn)行內(nèi)存中的內(nèi)容。就是說(shuō),調(diào)用了CH341ReadEEPROM操作后會(huì)改掉labVIEW軟件內(nèi)存的內(nèi)容,懷疑操作前先要對(duì)Buffer初始化。


CH341ReadEEPROM在調(diào)用之前要把各個(gè)參數(shù)初始話啊,申明文件里有各個(gè)參數(shù)的說(shuō)明.


我用Labview調(diào)用的,我看到早明文件,但只是說(shuō)了下數(shù)據(jù)類型,沒(méi)說(shuō)怎么初始化吧?你說(shuō)的申明文件在那下?我看我們看的是不是同一份.我看的是CH341DLL.H


其實(shí)我是想問(wèn)用那個(gè)winapi能初始化"PUCHAR oBuffer",這樣就能建立一塊內(nèi)存空間存放讀出來(lái)的數(shù)據(jù).這樣不會(huì)導(dǎo)致Labview出錯(cuò).


我說(shuō)的初始化是指為各個(gè)參數(shù)建立正確的值,我說(shuō)的申明文件是指CH341DLL.H BOOL WINAPI CH341ReadEEPROM( // 從EEPROM中讀取數(shù)據(jù)塊,速度約56K字節(jié) ULONG iIndex, // 指定CH341設(shè)備序號(hào) EEPROM_TYPE iEepromID, // 指定EEPROM型號(hào) ULONG iAddr, // 指定數(shù)據(jù)單元的地址 ULONG iLength, // 準(zhǔn)備讀取的數(shù)據(jù)字節(jié)數(shù) PUCHAR oBuffer ); // 指向一個(gè)緩沖區(qū),返回后是讀入的數(shù)據(jù)

"PUCHAR oBuffer",在函數(shù)調(diào)用之前肯定要初始化,也就是要分配一塊內(nèi)存,然后再把這塊內(nèi)存的首地址傳給這個(gè)參數(shù),這個(gè)應(yīng)該是在Labview中來(lái)解決的,而不是我們的庫(kù)來(lái)分配的,從堆里分配的話c語(yǔ)言里有malloc,從棧里面分配的話,可以直接定義一個(gè)數(shù)組,然后把數(shù)組的首地址傳給這個(gè)參數(shù)


Labview 應(yīng)該做不了這個(gè)分配吧,有沒(méi)有兄弟用Labview成功調(diào)用呀??發(fā)個(gè)VI來(lái)看看.


官方有沒(méi)有驗(yàn)證過(guò)Dll在Labview調(diào)用時(shí)的兼容性? 感覺(jué)還沒(méi)有人能成功可靠地調(diào)用.


我們已有客戶在LABVIEW下有成功應(yīng)用. 如6樓所說(shuō),CH341ReadEEPROM()中參數(shù)oBuffer是一個(gè)指針,指向一塊內(nèi)存.這個(gè)內(nèi)存需要您在您的應(yīng)用程序內(nèi)指定,可以以分配內(nèi)存的方法分配一塊內(nèi)存或者用傳遞一個(gè)數(shù)組的首地址通過(guò)這個(gè)函數(shù)傳給DLL即可. 在VC和VB內(nèi)我們一般做法都是定義了一個(gè)數(shù)據(jù)變量,然后將數(shù)組首地址傳下去即可. 在VB內(nèi)也沒(méi)有指針這個(gè)說(shuō)法.所以傳地址沒(méi)法直接傳.通過(guò)查資料發(fā)現(xiàn):先將這個(gè)指針定義為any型,然后在參數(shù)位置寫(xiě)入"數(shù)據(jù)名[0]"即可.


上兩星期把這問(wèn)題解決了。原來(lái)是因?yàn)樵谡{(diào)用CH341DLL讀IICEEROM API時(shí)出現(xiàn)LabVIEW出來(lái)自動(dòng)退出,其它是因?yàn)闆](méi)有在這個(gè)輸出涵數(shù)前連接一個(gè)同類型的BUFF導(dǎo)致,三個(gè)月后才解新決了這個(gè)問(wèn)題呵呵。。特來(lái)再支持一下,現(xiàn)在很穩(wěn)定很好用,哈哈,我用來(lái)帶I/O 12位DAC /24C32都一一實(shí)現(xiàn),非常方便。關(guān)鍵是在每個(gè)讀API前連上一個(gè)跟輸出相同類型及大小的BUFF,使輸入的數(shù)據(jù)放在這個(gè)BUFF上,不然讀出的數(shù)據(jù)會(huì)放在labVIEW內(nèi),導(dǎo)致labVIEW自動(dòng)退出,現(xiàn)象是只要每讀一次數(shù)就會(huì)跳出極不穩(wěn)定。


能不能把你的VI傳給我看一下啊,我的油箱是個(gè)人信息保護(hù),已隱藏


怎么讀EPPROM呢 需要初始話那些API函數(shù)


CH341PAR.EXE的源碼提供?請(qǐng)問(wèn)在哪里下載呢?


例程見(jiàn)這個(gè)鏈接:http://wch.cn/downloads/CH341EVT_ZIP.html?


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

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