uC OS II的中斷和時鐘

2021-09-29 20:33:39 字數 1509 閱讀 1132

前提:uc/os-ii是乙個可剝奪型核心,cpu每時每刻都處理優先順序最高的任務。

主要內容:

(1)uc/os-ii的中斷管理和中斷服務程式的結構

(2)uc/os-ii的系統時鐘及實現方法

(3)uc/os-ii的時間管理服務-----延時、取消延時

中斷:停止當前的事,去處理異常要求事件。

在系統執行過程中,當系統中斷是開放的情況,系統才能響應中斷。當系統響應中斷,系統就將當前任務的所有資訊儲存下來,去執行中斷服務子程式,執行完畢之後,查詢優先順序最高的任務,若沒有優先順序最高的就去執行自己之前的任務,若有就要去執行優先順序最高的任務。

uc/os-ii系統允許中斷巢狀,因為硬體的中斷也是有優先順序的。

在uc/os-ii中,通常用乙個任務來進行非同步事件的處理,在中斷服務程式中就是去啟用這個任務。

函式為:osintctxsw()這個函式和任務級切換函式一樣類似,並且**和後者的後半部分**一樣了。在這個函式裡主要做的工作是:

在中斷服務程式中,對被中斷任務的斷點進行保護。

臨界段概念:不希望被中斷的**段。

程式表示如下:

os_enter_critical()

;//關中斷

······ //使用者**,也即臨界段

os_exit_critical()

;//開中斷

上面的關中斷和開中斷為巨集,在系統移植時需要考慮修改,這部分與硬體有關。

硬體定時器以時鐘節拍為週期定時的產生中斷,該中斷的中斷服務程式叫做ostickisr()。中斷服務程式通過呼叫時鐘節拍服務函式ostimetick()來完成系統在每個時鐘節拍時需要做的工作。

ostimetick()函式中主要做以下兩件事:

(1)計數器的ostime加一

(2)遍歷任務控制塊鍊錶中的所有任務控制塊,把各個任務控制塊中用來存放任務延時時限的ostcbdly變數減一,病史該項為0,同時又不是被掛起的任務進入就緒狀態。簡單點說就是,每個時鐘節拍都要去了解每個任務的延時狀態,使其中已經到了延時時限的非掛起任務進去就緒狀態。

嵌入式系統的任務是乙個無限迴圈,uc/os-ii是乙個搶占式的核心,為了不至於使最高優先順序的任務獨佔cpu,給別的任務分配一點時間,uc/os-ii規定:除了空閒任務之外,任何任務必須在合適的地方呼叫ostimedly()或者ostimedlyhmsm()函式,使當前任務的執行延時(暫停一段時間)並進行一次任務排程,以讓出cpu的使用權。

當呼叫上面函式的任務在規定的延時時間期滿,或者有其他任務把延時取消了,那這個任務就進去到了就緒狀態。

函式:int8u ostimedlyresume(int8u prio),這個函式可以取消某個優先順序任務中的延時。

系統的時間節拍使可以修改的。任務都是按照節拍在執行的。

UC OS II的中斷和時鐘

3.1.1 uc os ii 的中斷過程 為了記錄中斷巢狀的層數,uc os ii 定義了乙個全域性變數 osintnesting 兩個重要函式 osintenter 和osintexit 函式osintenter 的作用就是把全域性變數 osintnesting加1 被用於記錄中斷巢狀層數。voi...

uCOS II的任務排程和時鐘

在ucos ii中,任務切換只是簡單的將處理器暫存器儲存到將被掛起的任務的堆疊中,並且將更高優先順序的任務從堆疊中恢復出來,或者叫copy複製出來,處於就緒狀態的任務的堆疊結構看起來就像剛發生過中斷並將所有的暫存器儲存到堆疊中的情形一樣。換句話說,ucos ii要執行處於就緒狀態的任務必須要做的事情...

C OS 的中斷和時鐘(二)

3.2 c os 的時鐘 週期性訊號 用硬體定時器產生乙個週期為毫秒級的週期性中斷來實現系統時鐘。產生的中斷的中斷服務程式為 ostickisr 組合語言 通過呼叫 時鐘節拍服務函式 ostimetick 來完成系統在每個時鐘節拍需要的工作。最小的時鐘單位 是兩次中斷之間相間隔的時間,稱之為 時鐘節...