OSStart()用以啓動OS,將CPU控制權交給OS,並選擇當前系統中最高優先級的就緒任務執行(OS第一次執行任務);OSStartHighRdy()用以「恢復」第一個被執行的任務的上下文。ide
問:在任務第一次被調度執行前,任務棧中存有任務的上下文信息嗎?函數
在OSTaskCreate()建立任務的過程當中,調用了OSTaskStkInit()對任務堆棧進行初始化,可此函數源碼中沒有涉及任務的上下文呀?如此,先後矛盾…spa
二、關於OS_ENTER_CRITICAL()的疑問:blog
OS_ENTER_CRITICAL()表示系統進入臨界狀態,程序處於不可中斷狀態。關中斷使得uC/OS-II可以避免同時有其它任務或中斷服務進入臨界段代碼。圖片
問:OS_ENTER_CRITICAL()在禁止中斷的同時也禁止了任務調度?仍是,僅僅禁止了中斷,仍然能夠進行任務調度呢?源碼
三、關於OS_TASK_SW()和OSIntExit()的疑問:it
見下面的圖片及圖片中的說明:class
4. uC/OS-II解決「哲學家就餐」問題程序
(1) 哲學家就餐問題,如何定義uC/OS-II的信號量?im
(2) I. OSSemPost(sMutex); //釋放信號量
II. OSTimeDlyHMSM(0, 0, 1, 0); //延時1S
問題:I執行後,內核當即進行任務調度,切換至高優先級人物,沒有執行II?
仍是I執行後,在判斷/尋找/解掛高優先級任務時,II已經執行了?