啟動ucosii之五OSStart

2021-06-14 12:36:59 字數 1169 閱讀 5316

函式原型來自os_core.c

//該函式由sstart()函式呼叫,功能是執行優先順序最高的就緒任務,在呼叫osstart()之前,使用者必須先呼叫osinit(),並且已經至少建立了乙個任務.

//osstarthighrdy()預設指標ostcbhighrdy指向優先順序最高就緒任務的任務控制塊(os_tcb)(在這之前ostcbhighrdy已由osstart()設定好了).

void  osstart (void)//通過這個函式,開始多工

}函式原型來自os_cpu_a.asm

為了啟動任務,osstarthighrdy()從任務控制塊(os_tcb)中找到指向堆疊的指標,然後執行pop ds/ pop es/ popa  和 iret

_osstarthighrdy  proc far

mov    ax, seg _ostcbhighrdy          ; reload ds

mov    ds, ax                         ;

;call   far ptr _ostaskswhook          ; call user defined task switch hook

;mov    al, 1                          ; osrunning = true;

mov    byte ptr ds:_osrunning, al     ;   (indicates that multitasking has started)

;les    bx, dword ptr ds:_ostcbhighrdy ; ss:sp = ostcbhighrdy->ostcbstkptr

mov    ss, es:[bx+2]                  ;

mov    sp, es:[bx+0]                  ;

;pop    ds                             ; load task's context

pop    es                             ;

popa                                  ;

;iret                                  ; run task

_osstarthighrdy  endp

uCOS II 上電啟動流程

上電啟動,一般分為兩個階段 第一階段 主要是cpu核心的初始化,執行固化的啟動 1 初始化堆疊 2 初始化 規劃中斷向量表,跳轉到reset handler中,執行復位後的中斷 3 在reset handler中,呼叫c函式systeminit來進行系統初始化 4 呼叫c函式 main 將會跳轉到主...

uC OS II原始碼分析(五)

每個任務被賦予不同的優先順序等級,從0 級到最低優先順序os lowest pr1o,包括0 和 os lowest pr1o 在內。當 c os 初始化的時候,最低優先順序os lowest pr1o 總是被賦給空閒任務idle task 注意,最多工數目os max tasks 和最低優先順序數...

uC OS II原始碼分析(五)

每個任務被賦予不同的優先順序等級,從0 級到最低優先順序os lowest pr1o,包括0 和 os lowest pr1o 在內。當 c os 初始化的時候,最低優先順序os lowest pr1o 總是被賦給空閒任務idle task 注意,最多工數目os max tasks 和最低優先順序數...