2013-03-03 44 views
4

我有一個運行Ubuntu的Beaglebone。我們希望以100KS/s的速率連續從3個板載ATD轉換器採樣,並且每個採樣窗口都將運行互相關DSP算法。一旦我們發現相關值超過閾值,我們會將該值發送給PC。Beaglebone上的DSP

我擔心的是Ubuntu中的進程調度問題。如果我們的流程被換出並且ATD樣本在此期間變得可用,則該流程將錯過樣本。我們需要確保我們的流程捕獲每個樣本並將其保存在內存中。

說到這裏,有沒有辦法觸發Beaglebone上的中斷,這樣如果ATD樣本準備好了,即使程序中沒有處理器,樣本也會保存在我們的程序的內存中時間

謝謝!

回答

0

您可能能夠觸發EDMA或使用PRUSS。可能最好在[email protected]ooglegroups.com上提問。 BeagleBone上沒有DSP。

0

這不完全是您的問題的答案,但希望它解釋了過程如何工作。由於您沒有提到您正在運行AD轉換的硬件,所以也許這是最好的做法:

由於音頻硬件面臨同樣的問題,因此解決方案來自硬件和驅動程序一起工作:每當硬件裝滿足夠的緩衝區時,它就會通知驅動程序(通過中斷或類似的機制)。在某些情況下,驅動程序也可能輪詢硬件或類似的東西,但這是一個效率較低的解決方案,我不確定有人會這樣做(也許在便宜的硬件上?)。從那裏,驅動程序進程可以直接調用到最終用戶進程中,或者可以簡單地將相關最終用戶進程標記爲「可運行」。無論哪種方式,都需要將控制權轉移給最終用戶流程。

要發生這種情況,最終用戶進程必須以比當時佔用CPU的任何其他優先級更高的優先級運行。爲了保證您的流程始終處於隊列中的第一位,您可以使用適當的權限以高優先級運行它,甚至可以以非常高的優先級運行它。

最高優先級進程從runnable運行到運行所需的時間有時稱爲操作系統的「延遲」,儘管我確信有更具體的技術術語。 Linux的延遲大約爲1毫秒,但由於它不是一個「硬」實時操作系統,這不是保證。如果這太長以至於無法處理您的數據塊,您可能需要在驅動程序中緩衝一些數據。