您好,登錄后才能下訂單哦!
今天小編給大家分享一下Wanlix操作系統怎么實現兩個固定任務之間的切換的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
從零起步,先實現2個固定任務的互相切換來驗證操作系統的切換功能。
然后再不斷的加入新功能,由淺入深,一步步將操作系統充實起來。每一個功能的加入都是一個獨立的階段性。
Wanlix操作系統有什么特點?
Wanlix只提供主動切換任務的功能,是非搶占操作系統,編寫相對簡單,作為學習編寫操作系統的入門教材是個不錯的選擇。這也使得它非常小巧,適合在硬件資源少但又需要任務切換的小型嵌入式軟件系統中使用。
兩個固定任務之間如何切換?
從C語言的角度來看,任務就是函數,只不過是在操作系統里,一個任務可以切換到其它任務,其實也就是一個函數可以切換到其它函數。
當切換發生時,正在執行的函數1的R0~R15、CPSR這17個寄存器臨時保存起來,然后將希望執行的函數2的上次保存的數值恢復到R0~R15、CPSR這17個寄存器,這樣芯片就從函數1切換到函數2運行了。
當希望從函數2切換到函數1時,再將函數2的17個寄存器保存起來,恢復函數1的17個寄存器,芯片就又繼續運行函數1了。這樣便在函數1運行的中間插入了函數2,這就是任務切換,也就是所謂的“上下切換”,函數1或函數2所在的最上層父函數調用的一系列函數就組成了任務,任是從最上層父函數開始運行的。
任務切換示意圖
這種切換也可以在多個任務之間進行,至于什么時候切換,怎么控制切換,這就是操作系統要做的事情了。
下面我們將遵循著這一設計思路來編寫一個最簡單的切換過程——2個函數之間不停的互相切換,來驗證任務切換過程中寄存器備份、恢復原理的正確性。
為了能看出任務切換的效果,我們設計2個函數
TEST_TestTask1和TEST_TestTask2,這兩個函數都是死循環,反復執行“打印消息—>延遲”的過程,我們可以通過打印信息來確認是哪個函數在執行,
偽碼如下:
如果沒有函數切換功能,那么這樣的函數只要一開始執行,它們就會一直死循環執行下去,不會給其它函數執行的機會,我們就只能看到只有一個函數在循環打印消息。如果能夠按照上面是所講述的切換原理發生函數切換,那么我們
就應該能看到的是這2個函數是在循環交替打印。
在main函數里首先初始化硬件,然后調用WLX_TaskInit函數對2個任務進行初始化,最后調用WLX_TaskStart函數啟動任務調度,這2個任務就開始交替執行了,交替向串口打印數據。
最終結果:
以上就是“Wanlix操作系統怎么實現兩個固定任務之間的切換”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。