2016-07-29 15 views
-1

我目前正在使用Ubuntu使用BeagleBone Black,並試圖找到一些方向。我創建了一個c程序,用於偵聽SIGIO並運行read()以獲取該行的數據。從我在互聯網上的研究和通過一些書看,看起來這種方法效率不高,因爲使用循環監聽Signal中斷很糟糕,因爲大量的上下文切換(應該指出,這個I/O線將很忙,所以SIGIO每秒至少觸發4次,這是異步的)。建議使用硬件中斷並觸發響應,以從線路獲取數據並將其放置到寄存器中,並且可以使用直接存儲器訪問優先訪問用戶。所以問題仍然是我可以在哪裏找到更多關於如何做到這一點的信息,我在這個主題上找到了很多信息,但其中大多數只是談論如何操作系統確實中斷或使用信號,它們與忙線是相當的稅收。Linux,在I/O上使用硬件中斷,通過直接內存訪問將數據放入用戶可訪問區域

+1

投票結束爲「要求外部資源」。形式上這是正確的,但實際上你的問題太廣泛了。在你甚至不知道它有多廣泛之前,你必須做更多關於Linux如何工作的基礎研究,關於硬件,驅動程序,特權訪問,併發等等。沒有冒犯,但強烈要求先學習和自己做研究。 – Olaf

+0

我很感謝你的推動力,促使人們首先自己瞭解這個主題。但我已經研究了一下,但是我發現的一切都是理論。我找不到能夠使用硬件中斷的代碼的實際示例,然後繼續使用DMA將數據推送到其他位置。 –

+0

「我找不到代碼的實際示例...」。對不起,但那不可能! Linux是開源的,所有的資源都是免費的。你真的想告訴內核源代碼中沒有一個使用中斷和DMA的驅動程序? – Olaf

回答

0

如果你非常關心時間和延遲,你應該使用一些實時系統。

幸運的是,Beaglebone black在其SOC上實時處理核心,稱爲PRU(可編程實時單位)。 如果您對PRU的概念還不熟悉,您可能想要開始here,然後,一旦您瞭解了PRU的需求和用途,該網站就有一些入門教程。

使用最新的軟件支持,如remoteproc,rpmsg和,只要您瞭解其工作原理,就可以非常容易地使用PRU。