l. DLL文件存放路徑的問題: 板卡廠商提供DLL庫的存放路徑可以有以下幾種: 與調(diào)用DLL庫的程序文件同一路徑,如MCGS要調(diào)用某個(gè)DLL庫,就應(yīng)該把這個(gè)DLL庫存放到X:\MCGS\Program中,而不是和設(shè)備驅(qū)動(dòng)放在同一路徑; 2. X:\windows\system下; 3. X:\windows\system32下。 三. 板卡驅(qū)動(dòng)開發(fā)過程中的問題 a. 通常,如果一塊板卡占用多個(gè)IO地址,這些地址都是連續(xù)的,一塊板卡會(huì)有一個(gè)基地址,所有的IO地址都是在這個(gè)基地址的基礎(chǔ)上加上一個(gè)偏移量構(gòu)成。 b. 要使驅(qū)動(dòng)操作端口要把下面四個(gè)DLL庫函數(shù)聲明加入到代碼的頭部。這四個(gè)函數(shù)包括端口讀寫和打開/關(guān)閉端口的功能。 Public Declare Function Inp Lib "mcgsext.dll" (ByVal Handle As Long, ByVal PortAddress As Long) As Long Public Declare Function Outp Lib "mcgsext.dll" (ByVal Handle As Long, ByVal PortAddress As Long, ByVal Value As Long) As Long Public Declare Function OpenPort Lib "mcgsext.dll" (Handle As Long) As Long Public Declare Function ClosePort Lib "mcgsext.dll" (ByVal Handle As Long) As Long c. 端口打開后要及時(shí)關(guān)閉。如未關(guān)閉就退出進(jìn)程,可能再次運(yùn)行時(shí)不能正確打開端口,需要重新啟動(dòng)計(jì)算機(jī)才能恢復(fù)。 d. 在WINDOWS2000下編寫通用版板卡類設(shè)備構(gòu)件需要讀寫端口時(shí),要使用MCGS軟件運(yùn)行環(huán)境下聯(lián)調(diào)的方式調(diào)試程序,而不是使用驅(qū)動(dòng)開發(fā)工程里的調(diào)試工程(TestDev)。因?yàn)門estDev和MCGS運(yùn)行環(huán)境不在同一個(gè)進(jìn)程中,在不同的進(jìn)程中創(chuàng)建的MCGSPORT句柄是不能互用的。 四.windows2000下有關(guān)MCGSPORT不能打開問題 設(shè)備屬性頁中的板卡基地址對(duì)應(yīng)的變量名必須聲明為如下形式 Public DevBaseIO As Long 否則將無法由設(shè)備構(gòu)件主動(dòng)打開和關(guān)閉MCGSPORT端口,其結(jié)果是無法正確的操作端口讀寫數(shù)據(jù)。另外,使用此變量名在屬性頁中輸入的地址值在屬性頁初始化代碼中自動(dòng)轉(zhuǎn)換為16進(jìn)制數(shù)。(注意:在某些情況下,例如由其他設(shè)備構(gòu)件打開了MCGSPORT并且打開了與實(shí)際存在的板卡一致的端口地址并且端口地址范圍也滿足實(shí)際板卡的要求,則有可能在板卡基地址對(duì)應(yīng)的變量名不符的情況仍能正確的操作端口,但仍不能正確的打開和關(guān)閉端口。)(上述問題原因尚不清楚) 在某些情況下,雖然安裝了MCGS,但是在設(shè)備管理器中仍找不到MCGSPORT,甚至重新安裝MCGS也不能解決問題,這時(shí)可以用如下步驟打開MCGSPORT。 1) mcgsport.sys安裝成功后,應(yīng)能在\winnt\system32\drivers\mcgsport.sys找到,如果沒有說明安裝不成功,需要重新安裝MCGS。 2) 機(jī)器啟動(dòng)后,系統(tǒng)自動(dòng)啟動(dòng)該內(nèi)核對(duì)象服務(wù),可用WIN2000提供的程序->管理工具->計(jì)算機(jī)管理->系統(tǒng)信息->軟件環(huán)境->驅(qū)動(dòng)程序->mcgsport.sys。 3) 正常情況下,該內(nèi)核對(duì)象服務(wù)應(yīng)該是啟動(dòng)狀態(tài)。如果停止,可在開始菜單->運(yùn)行 下輸入:net start mcgsport,確定,然后刷新軟件環(huán)境,可以看到內(nèi)核對(duì)象服務(wù)啟動(dòng)。 板卡通常都提供測(cè)試軟件,而測(cè)試軟件有時(shí)可能占用板卡設(shè)定的I/O端口。在WINDOWS 2000下嘗試以上兩步仍不能正確讀寫端口,可以檢查一下板卡的端口是否被測(cè)試軟件的虛擬設(shè)備驅(qū)動(dòng)占用,如占用則禁用之。 當(dāng)MCGSPORT的端口地址與其他設(shè)備端口沖突可能導(dǎo)致MCGSPORT失效,在設(shè)備管理器的設(shè)備屬性頁中顯示“驅(qū)動(dòng)程序不存在或工作不正!,在管理工具中查看內(nèi)核對(duì)象服務(wù)處于停止?fàn)顟B(tài),但此時(shí)使用net start命令(如前所示)也不能啟動(dòng),此時(shí)只能用重裝MCGS的方法才能解決。不知道是否有更好的方法。