ucos ii的中斷過程是接收到中斷請求,如果此時處理器處於中斷允許的情況下,系統中止當前執行的任務,而按照中斷向量指向的中斷服務子程式,當中斷服務子程式結束時,系統將根據當前優先順序鍊錶中的情況,返回原先的被中止的任務繼續執行,或者到另乙個優先順序更高的就緒任務上執行。
因為ucos ii是可剝奪性核心,所以中斷服務結束之前需要有一次任務排程,通過任務排程判斷最高優先順序準備的任務,目的是提高系統的實時性。
排程函式通過乙個變數osintnesting判斷, osintnesting有兩個功能:1、對中斷巢狀進行計數,表示巢狀的層數。2、為排程器加鎖和解鎖。只有當osintnesting== 0 時才進行任務的排程。
osintenter()函式主要功能是每次進入中斷子函式時將osintnesting加1,從而使排程器加鎖。
osintexit()函式主要功能是退出中斷服務,當osintnesting和oslocknesting都為0時,需要讀取osmaptbl[osrdygrp],然後切換到相應的服務函式。
在切換過程需要呼叫osintctxsw()函式,將任務控制塊進行切換,將sp指標指向執行的堆疊,用出棧命令把r1,r2…彈入處理器的通用暫存器。
臨界區概念,忽略所有中斷請求,通過2個巨集定義函式控制中斷的開啟和關閉,並且儲存程式狀態字。
#define os_enter_critical()
cpu_sr = get_processor_psw();
disable_interrupts();
#define os_exit_critical
set_processor_psw(cpu_sr);
上面兩個巨集定義函式,需要使用者使用的c編譯器具有擴充套件功能,使用者可以把該值儲存在c語言函式的區域性變數中,不必壓到堆疊中。
ucosii 學習 2 任務就緒表
任務就緒表 任務就緒表的任務就是高效的找出當前優先順序最高的就緒任務.由任務就緒表osrdytbl和任務就緒組osrdygrb組成,osrdytbl每乙個位都記錄著乙個任務的就緒狀態,0非就緒1就緒,osrdygrb是為了快速的找出當前的最高就緒任務而設定的,把就緒表中的八個任務狀態分為一組,當這個...
UCOSII學習 二 任務管理
uc os ii 中最多可以支援64 個任務,分別對應優先順序0 63,其中0 為最高優先順序。63為最低階,系統保留了4個最高優先順序的任務和4個最低優先順序的任務,所有使用者可以使用的任務數有56個。uc os ii提供了任務管理的各種函式呼叫,包括建立任務,刪除任務,改變任務的優先順序,任務掛...
ucos II 核心學習之一 任務狀態及任務控制塊
ucos ii 核心學習之一 任務狀態及任務控制塊 乙個任務被建立之後,可以處於以下五種狀態之一。這五種狀態分別是 1.睡眠狀態 2.就緒狀態 3.等待狀態 4.中斷服務狀態 5.執行狀態 下面簡單介紹下各狀態的含義及各狀態切換的方法。睡眠狀態 睡眠態 dormant 指任務駐留在程式空間之中,還沒...