FreeRTOS之taskYIELD()

URL: http://www.mcuchina.com/article/2007/1227/article_59.html

1.taskYIELD()
  比如我創建了8個優先級一樣的task,並且沒有創建其他優先級的進程,
  而且8個task每個task都不會調用任何引起本task從就緒運行隊列鏈表中被摘掉的系統函數,就像示例中
  vStartIntegerMathTasks()創建vCompeteingIntMathTask1(),vCompeteingIntMathTask2()...vCompeteingIntMathTask8()一樣,
  每個task都是不會睡眠的不停的執行自己,當每個task覺得自己佔用cpu的時間已經差不多的時候,
  就會調用taskYIELD(),主動讓出cpu,讓同優先級的其他task獲得cpu,因爲沒有其他優先級的task,所以調度器不會切換優先級,

  而是採用輪轉調度策略,運行同優先級的就緒運行隊列鏈表中調用taskYIELD()函數的當前task的下一個task.

  就這樣8個task輪流讓出cpu給同優先級的下一個兄弟task,8個task都採用主動協作的方式,彼此安全順利的跑了起來.
2.xLIST()
  雖然在vListInitialise()初始化時,將pxList->xListEnd初始化爲了"雙向循環鏈表",
  但是在諸多使用中,:listGET_OWNER_OF_NEXT_ENTRY(),都會以xListEnd作爲雙向循環鏈表的象徵性結尾標誌,
  所以看上去只是雙向鏈表,而不是循環鏈表.


發佈了11 篇原創文章 · 獲贊 37 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章