回想一下我們以前在使用 51、AVR、STM32 單片機裸機(未使用系統)的時候一般都是在main 函數里面用while(1)做一個大循環來完成所有的處理,即應用程序是一個無限的循環,循環中調用相應的函數完成所需的處理。有時候我們也需要中斷中完成一些處理。相對于多任務系統而言,這個就是單任務系統,也稱作前后臺系統,中斷服務函數作為前臺程序,大循環while(1)作為后臺程序,如圖所示:
前后臺系統的實時性差,前后臺系統各個任務(應用程序)都是排隊等著輪流執行,不管你這個程序現在有多緊急,沒輪到你就只能等著!相當于所有任務(應用程序)的優先級都是一樣的。但是前后臺系統簡單啊,資源消耗也少啊!在稍微大一點的嵌入式應用中前后臺系統就明顯力不從心了,此時就需要多任務系統出馬了。
多任務系統會把一個大問題(應用)“分而治之”,把大問題劃分成很多個小問題,逐步的把小問題解決掉,大問題也就隨之解決了,這些小問題可以單獨的作為一個小任務來處理。這些小任務是并發處理的,注意,并不是說同一時刻一起執行很多個任務,而是由于每個任務執行的時間很短,導致看起來像是同一時刻執行了很多個任務一樣。多個任務帶來了一個新的問題,究竟哪個任務先運行,哪個任務后運行呢?完成這個功能的東西在RTOS 系統中叫做任務調度器。不同的系統其任務調度器的實現方法也不同,比如 FreeRTOS是一個搶占式的實時多任務系統,那么其任務調度器也是搶占式的,運行過程如圖所示:
高優先級的任務可以打斷低優先級任務的運行而取得 CPU的使用權,這樣就保證了那些緊急任務的運行。這樣我們就可以為那些對實時性要求高的任務設置一個很高的優先級,比如自動駕駛中的障礙物檢測任務等。高優先級的任務執行完成以后重新把CPU 的使用權歸還給低優先級的任務,這個就是搶占式多任務系統的基本原理。
-
單片機
+關注
關注
6037文章
44561瀏覽量
635599 -
嵌入式
+關注
關注
5083文章
19131瀏覽量
305495 -
cpu
+關注
關注
68文章
10870瀏覽量
211880 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62199 -
應用程序
+關注
關注
37文章
3271瀏覽量
57724
發布評論請先 登錄
相關推薦
評論