以前也看到過嵌入式系統優先順序倒置的問題,但由於沒有實際的程式,理解的不夠透徹。今天終於有機會來看清廬山真面目了。
我們的dsp
上有兩個
task
:spa
和txp,
什麼意思,我就不說了。這兩個程序都會用到乙太網模組。
txp的優先順序比
spa要高。
spa作為乙個低優先順序的任務,執行時間比較長。現在的問題是:
spa有乙個包需要傳送,因此它需要獲得網絡卡這個資源:
lck_pend( xio_data[pa_id].lock_hdl, 0xffffffff )
在獲取資源後,
txp準備就緒,由於其優先順序高,系統會切換到
txp任務。在
txp中,我們也需要傳送乙個包,這時候,
lck_pend( xio_data[pa_id].lock_hdl, 0xffffffff )
會永遠獲得不了資源。
這就造成了死鎖,本質上還是優先順序倒置的問題。
我們的做法是在
spa獲取網路資源後,遮蔽掉中斷,直到釋放該資源。
txp會在資源釋放後啟動。
嵌入式開發 中斷優先順序的重要性
ti的lm3s1607,一開始中斷優先順序沒有設定,採用預設值 所有優先順序相同 則就是中斷不可巢狀。出現了uart通訊有時會丟失資料的問題,一開始以為是硬體干擾導致的。uart的接收緩衝佇列fifo長度設定為1,即接收到字元後就觸發中斷。因為外部通訊命令一般為多個位元組連續發,所以如果uart中斷...
嵌入式作業系統核心原理和開發(通用優先順序排程)
相比較其他排程演算法而言,時間片的輪轉更多的注重公平性。但是,任務與任務之間也是有先後之分的,有的任務我們希望多安排一些時間片,而有的任務我們則希望少安排一些時間片。比較說,如果我們在上網的話,我們就希望上網的操作響應的更快一些 如果我們在進行gui操作,我們當然就希望圖形響應更快一些。這些都是可以...
嵌入式 LINUX 大作業 帶優先順序 計算器
在前段時間搞定了溫控系統後,嵌入式大作業要開始搞了 選定了計算器,一開始的想法是不能多不運算 但是前兩天找了點資料,然後看了相關的堆疊計算方法,於是決定好好搞一下表示式運算 因為lineedit settext qstring str 而計算則需要double型,所以需要格式的多次轉換,自己寫了個a...