2010-01-30 96 views
1

我有以下卡,無法使用interupts工作。我可能不會理解他們應該如何正確工作......我不經常進行這種類型的編程。如何使用此硬件IO卡啓用和檢測中斷?

從外觀上來看,雖然,它應該能夠在東西進來的IO端口中的一個產生一箇中斷,對不對?我們已經將它連接到一堆用於機器操作的開關上。

http://accesio.com/go.cgi?p=../pci/pci_dio_24d.html

我會盡快,我可以張貼一些我的工作的代碼。我試圖寫一些東西到基地址(我有)+ 0xE,但這沒有幫助... AIOWDM WaitForIRQ方法每次我調用它時返回一個0 ......沒有任何反應。

任何幫助,將不勝感激......我知道這是怎樣的一個通用的問題。

更新:即使他們提供的示例應用程序也沒有檢測到任何中斷,並且我知道我的跳線安裝正確,所以我猜測它不會觸發所有事件的中斷...我猜測我必須將每個開關連接到一個特定的IO引腳,並且一個引腳負責中斷...

+0

你想在C#中處理硬件中斷? – 2010-01-30 19:07:10

+0

提供的AIOWDM組件有一個WaitForIRQ方法,我是P/Invoking – 2010-01-30 19:09:45

+1

您是否已經爲此硬件安裝了驅動程序?我問的原因是,由於沒有中斷觸發,所以驅動程序可能沒有與硬件進行通信。你怎麼看? – t0mm13b 2010-01-30 19:10:58

回答

0

簡而言之,C#不是這類任務的合適語言,因爲這是低級別的非託管代碼。你理論上可以做到這一點,但是這會更加痛苦,因爲你必須經常前往非託管世界處理中斷。我會建議從C/C++本機代碼看這個,它可以更好地執行並處理這種低級別的東西。

自從C#擁有自己的垃圾回收以來,最不希望發生的事情就是中斷處理機制被丟棄在垃圾回收系統中,與用於中斷處理的寶貴數據結構一起,這會在代碼中增加相當大的開銷。就個人而言,我從來沒有聽說過C#處理這類事情,但是一些更聰明的讀者會說:「等等,用C#編寫的新奇妙的操作系統叫做奇點(Singularity)怎麼樣?」,在一天結束時,使用.NET運行時來管理這個硬件任務是一個禁忌。

編輯: 後,我意識到,從看參考手冊,它是用outp C代碼樣本中的一個,那麼我仔細傾聽,你需要做的直接端口輸入輸出的想法,我想this可能有幫助,它是一個dll,可以讓你做到這一點,輸入輸出,你需要找到適當的p/invoke簽名來做到這一點。還有另一個DLL可以做同樣的事情here。另外,檢查thisWinRing0的代碼。

同樣,你需要挖着,找適合pinvoking適當的方法簽名......

祝您好運與this..feel自由發表任何更多的,我會盡力幫忙...... :)

希望這有助於 最好的問候, 湯姆。

+0

不是一個選項。我必須在C#中做到這一點,我敢肯定它可以以一種乾淨的方式完成 – 2010-01-30 19:21:30

+0

@Max:祝你好運......你安裝了驅動程序嗎? – t0mm13b 2010-01-30 19:26:07

+0

從文檔中,我使用的AOIWDM.dll組件是驅動程序...我能夠使用此dll查詢卡信息,但有什麼我需要使用它來使它能夠使用中斷? – 2010-01-30 19:33:22