以前很少接觸過嵌入式作業系統,這次因為要嘗試研究ucosii這個嵌入式作業系統,看看自己能不能盡快的會使用它,查詢了不少資料。ucosii學習筆記。以下是nathan.yu的「ucosii學習筆記「,整理的不錯,自己先借鑑。
ucosii學習筆記
(by nathan.yu)
ucos-ii特性:
l 可剝奪核心
l 不支援同優先順序的任務時間片輪轉排程演算法
l 可避免優先順序反轉
l 支援優先順序繼承
l 允許建立63個使用者任務
l 僅支援優先順序法啟動等待訊號量的任務
l 僅支援優先順序法啟動等待訊息郵箱的任務
l 支援事件標誌,提供事件標誌置位、清0和等待事件標誌服務
l 支援先進先出(fifo)和後進先出(lifo)的訊息佇列
l 允許中斷巢狀,中斷巢狀層次可達255層
實現互斥的方法:
l 關中斷
l 使用測試並置位指令
l 禁止任務切換
l 使用訊號量(訊號量初始化為1)
訊號量的作用
l 控制共享資源的使用權
l 標誌某事件的發生
l 同步2個任務(訊號量初始化為0)
可剝奪的核心ucos任務切換的時機:
(任務切換的時機:當前任務被掛起、或有更高優先順序的任務就緒)
l 中斷處理程式啟用了優先順序更高的任務,則當中斷返回時發生任務切換
l 等待訊號量、郵箱、訊息佇列的任務被啟用(該任務優先順序比原任務優先順序高)
l 當前任務請求訊號量、事件、訊息等,然無可用事件時,則當前任務掛起
l 當前任務呼叫延時函式,將自身延時一段時間。
l 用同樣的順序申請多個資源。
l 釋放資源時,使用相反的順序。
l 設定等待超時
中斷及中斷處理時間
在大多數情況下,中斷服務子程式應識別中斷**,從叫中斷的裝置取得資料或狀態,並通知真正做該事件處理的那個任務。當然應該考慮到是否通知乙個任務去做事件處理所花的時間比處理這個事件所花的時間還多。在中斷服務中通知乙個任務做時間處理(通過訊號量、郵箱或訊息佇列)是需要一定時間的,如果事件處理需花的時間短於給乙個任務發通知的時間,就應該考慮在中斷服務子程式中做事件處理並在中斷服務子程式中開中斷,以允許優先順序更高的中斷打入並優先得到服務。
非遮蔽中斷
在非遮蔽中斷的中斷服務子程式中,不能使用核心提供的服務,因為非遮蔽中斷是關不掉的,故不能在非遮蔽中斷處理中處理臨界區**。然而向非遮蔽中斷傳送引數或從非遮蔽中斷獲取引數還是可以進行的。引數的傳遞必須使用全程變數,全程變數的位數必須是一次讀或寫能完成的,即不應該是兩個分離的位元組,要兩次讀或寫才能完成。
非遮蔽中斷服務通常具有最高的優先順序,在非遮蔽中斷服務過程中不允許中斷巢狀,普通中斷一直要等到非遮蔽中斷服務子程式執行結束後才能被識別。
時鐘節拍——抖動解決方案:
l 增加微處理器的時鐘頻率
l 增加時鐘節拍的頻率
l 重新安排任務的優先順序
l 避免使用浮點運算(如果非使用不可,盡量用單精度數)
l 使用能較好地優化程式**的編譯器
l 時間要求苛刻的**用組合語言寫
l 如果可能,用同一家族的更快的微處理器做系統公升級。如從8086向80186公升級,從68000向68020公升級等
l
不管怎麼樣,抖動總是存在的。
使用rtos的額外需求是
l 核心的**
l 額外的rom/ram開銷
l 2到4百分點的cpu額外負荷。
UCOS II學習筆記
1.標頭檔案的配置 include stm32f10x.h include stm32f10x conf.h include ucos ii.h 2.任務堆疊配置 os stk led0 task stk 64 os stk led1 task stk 64 定義兩個任務的堆疊陣列 3.對硬體的配置...
ucosII學習筆記 1
核心結構學習 一.臨界段 critical sections 的臨界段也稱為臨界區。程式執行到臨界區時,不允許有中斷進入,因此在進入臨界區前要關中斷,執行完臨界區馬上開中斷。c os 中的這兩個巨集呼叫分別是 os enter critical 和os exit critical 因為這兩個巨集的定...
uCOS II學習筆記(一)
對於系統的學習,一直也來是我非常嚮往的地方。但是由於各種原因一直沒有實現,而且進展也非常緩慢。不管怎麼說,自己一定會努力朝這個方面發展,希望以後能在自己的專案中使用os,從而走上更高的台階。不積跬步,無以至千里。下面將留下我的腳印。1.在呼叫ucos ii功能函式時,中斷總應當是開著的。原因是 任務...