1. 程式人生 > >關於UCOSIII 系統函式和系統排程

關於UCOSIII 系統函式和系統排程

對於UCOSIII系統,稍微做一下講解。

中斷管理。 UCOSIII中 ,中斷主要是向CPU 通知一個非同步事件發生了,這是 CPU 就會將當前CPU儲存器值入棧,然後執行中斷服務程式,在CPU執行中斷服務程式 的時候,有可能 觸發優先順序高的任務,這時當推出中斷的時候,就會去執行優先順序高的任務。 中斷巢狀。 UCOSIII中支援中斷巢狀,優先順序高的可以打斷優先順序低的中斷,在UCOSIII中使用OSIntNestingCtr來記錄中斷巢狀次數,進一次,該值加1,退出一次中斷,該值減1。 中斷服務程式的編寫。
  • XXX中斷源的函式名。
  • 首先呼叫OSIntEnter() 函式標記 進入中斷服務,記錄中斷巢狀次數。
  • 中間為編寫程式碼
  • 退出中斷,OSIntExit()
延時函式 OSTimeDly()  當我們需要對一個任務進行延時操作的時候就可以使用這個函式 OSTimeDlyHMSM() OSTimeDlyResume()一個任務可以通過呼叫這函式來“解救”那些因為呼叫了OSTimeDly () 或者 OSTimeDlyHMSM()而進入等待態的任務 排程問題 任務排程的情況:
  • 任務 提交服務函式Post,傳送訊號量給其他任務,排程在Post結束時發生。
  • 任務呼叫OSTimeDly()或OSTimeDlyHMSM(),如果引數不為0,排程會被放入掛起佇列然後執行。
  • 當任務等待時間超時,當Pend() 呼叫的時候,該事件會被移除等待佇列。
  • 通過呼叫OSSchedUnlock排程器被解鎖
關於OSTimeDly  OSTimeDlyHMSM 函式的區別 OSTimeDly的延時時間是以節拍數來衡量的 OSTimeDlyHMSM的延遲時間則使以具體時間大小來很亮的。 就是當你呼叫這兩個函式的時候,ucos會進行一次任務排程,所以CPU能在各任務間進行切換,很有大功勞得以這兩個函式。  呼叫這兩個函式都會掛起本任務,CPU就會執行就緒表優先順序最高的任務。 有一點要注意的是任務呼叫OSTimeDly()後,一旦規定的時間期滿或者有其它的任務通過OSTimeDlyResume()取消了延遲,它就會馬上進入就緒態, 而不是執行狀態,也就是說延時結束後本任務一定不會被立刻執行。
OSTimeDly 函式詳解 OSTimeDly 將一個任務延時若干個節拍,如果延時時間大於0,系統將立即進入系統排程,延時時間的長度 可從0到65535個時鐘節拍。延時時間0表示不進行延時,函式將立即返回呼叫者 呼叫該函式會使uCOS-II進行一次任務排程,並且執行下一個優先順序最高的就緒態任務。呼叫之後,一旦規定時間期滿或者其他任務呼叫OSTimeDlyResume()函式取消了延時,它就會馬上進入就緒態。只有當該任務在所有就緒任務中 具有最高的優先順序時,它才會立即執行 。