2013-01-11 68 views
1

我以460800波特率運行串口。數據連續發送。串行驅動程序數據被傳遞給使用套接字將數據發送到網絡應用程序的用戶空間應用程序有時候,我得到串口驅動程序HW Fifo溢出,因爲它運行ISR或其他中斷(我只有以太網,串行和gp_timer中斷)需要太長的時間。另外,我認爲有些情況下以太網和串行中斷都處於中斷隊列(我的假設),並且以太網驅動程序中斷優先於串行驅動程序中斷,同時串行驅動程序HWFIFO溢出。如何更改串行驅動程序的中斷優先級,使其優先級高於以太網中斷?

當我禁用數據傳輸到網絡應用程序的時候,用戶空間的所有數據都收到了罰款。這讓我相信它可能是導致問題的以太網驅動程序。

我想改變串行中斷的優先級,以使它在以太網驅動中斷之前得到服務。你認爲改變優先次序可以解決問題嗎?

我在Linux 2.6.32 ARMV7上。

+0

你有一個實時問題,但你沒有使用實時系統來解決它。既可以查看適用於Linux的實時補丁,也可以使用實時操作系統或專用的裸機處理器來處理串行端口併爲您提供額外的緩衝。 –

+0

@Chris我檢查了實時補丁選項,但不適用於2.6.32,我仍然可以應用2.6.33或2.6.31中的補丁嗎?哪一個會是更好的選擇? [link](http://www.kernel.org/pub/linux/kernel/projects/rt/2.6.33/)另外,應用RT補丁有什麼不足嗎?你對所涉及的努力水平有何看法?其他問題,我有我們能夠讀取數據沒有問題在Windows機器上?這讓我相信我們不需要RT補丁。但是,我可能是錯的,你能否也請說明一下? – user1867459

回答

1

我不確定哪個版本的補丁會更好地嘗試,我會說先應用版本2.6.33,如果補丁沒有問題的應用,那麼就使用它,如果他們不適用,然後嘗試2.6.31補丁。

這些補丁的缺點是它使得linux可搶佔,所以你必須小心,因爲你永遠不知道什麼時候你會被換出。這意味着使用互斥鎖來保護線程之間共享的數據以及類似的東西。如果你明白自己在做什麼,這不是一個大問題。

它在Windows上工作的原因是運氣,如果你在Windows上運行測試,然後重載系統它仍然工作?我對此表示懷疑。在正確設計的實時系統中,無論系統負載如何,它都將始終工作。