日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uCOS-II任务机制

發布時間:2023/12/15 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uCOS-II任务机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.任務是一個無返回的無窮循環。uc/os-ii總是運行進入就緒狀態的最高優先級的任務。

2. 任務是如何調度(切換)的?
因為uc/os-ii總是運行進入就緒狀態的最高優先級的任務。所以,確定哪個任務優先級最高,下面該哪個任務運行,這個工作就是由調度器(scheduler)來完成的。

任務級的調度是由函數OSSched()完成的,而中斷級的調度是由函數OSIntExt()完成。對于OSSched(),它內部調用的是 OS_TASK_SW()完成實際的調度(人為模仿一次中斷);OSIntExt()內部調用的是OSCtxSw()實現調度。參考:P92,P106

任務切換其實很簡單,由如下2步完成:(1)將被掛起任務的處理器寄存器推入自己的任務堆棧。(2)然后將進入就緒狀態的最高優先級的任務的寄存器值從堆棧中恢復到寄存器中。參見P92

???? (1)作為uc/os-ii的一條普通原則,調用uc/os-ii功能函數時,中斷總應當是開著的。

???? (2)任務永不返回,就算任務自我刪除,也絕對不會返回。(任務刪除并非代碼刪除,只是ucos-ii不會理會這任務。)

???? (3)OSTimeTick()函數是ucos-ii內部函數,用戶無需調用。

???? (4)ucos-ii從中斷返回之前,要判斷被中斷的任務是否還是就緒狀態任務中優先級最高的任務。

3.??? OSInit()初始化示意圖

?????? 我做了一個很好的圖示,竟然粘貼不出來,沒辦法...

4. 任務的5種狀態

睡眠態(task dormat):任務駐留于程序空間(rom或ram)中,暫時沒交給ucos-ii處理。

就緒態(task ready):任務一旦建立,這個任務就進入了就緒態。

運行態(task running):調用OSStart()可以啟動多任務。OSStart()函數只能調用一次,一旦調用,系統將運行進入就緒態并且優先級最高的任務。

等待狀態(task waiting):正在運行的任務,通過延遲函數或pend(掛起)相關函數后,將進入等待狀態。

中斷狀態(ISR running):正在運行的任務是可以被中斷的,除非該任務將中斷關閉或者ucos-ii將中斷關閉。

5. 任務控制塊(OS_TBC)

任務一旦建立,任務控制塊OS_TBC將被賦值。

OS_TBC是一個數據結構,當任務的CPU使用權被剝奪后,ucos-ii將把當前的任務狀態存放于OS-TBC數據結構中;當任務的CPU使用權得到恢復后,任務控制塊能確保任務能從被中斷點那一點絲毫不差地繼續執行。

每個任務都有自己的OS_TBC控制塊,OS_TBC的數量由OS_MAX_TASK決定,任務數量少,當然OS_TBC占用RAM的空間就少。

所有的任務控制塊OS_TBC都是放在任務控制塊列表數組OSTCBTbl[]中。在ucos-ii初始化時,所有任務控制塊OS_TBC都被鏈表連接成單向空任務鏈表。

注意:OS_TBC全部駐留于RAM中。

6.關于任務切換使用到的OS_TASK_SW()函數,其中調用軟中斷實現寄存器的保持和彈出。開始調用含軟中斷,ucos-ii強制處理器保存psw、pc的當前值,最后通過執行中斷返回指令,pc和psw的值裝回到cpu中。

總結

以上是生活随笔為你收集整理的uCOS-II任务机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。