很多對單片機開發感興趣的同學,之后都會繼續學習嵌入式相關的知識。從單片機開發到嵌入式開發在軟件方面最大的改變,也是一個質的飛躍,就是學習嵌入式必須要進入RTOS的領域,哪么單片機的前后台系統和嵌入式的RTOS系統究竟有何不同呢?
一、什么是前后台系統?
有過單片機程序開發經歷的同學必定對此不陌生。單片機所有子函數寫完之后,必定是在一個主函數(main函數)里面對各個子函數進行調用。 主函數用一個死循環將所有任務不斷地循環檢測執行,具體的示意圖如下:
如圖所示,所有的任務都是平級的,它們在無限循環的后台(while(1)的大循環)中運行或者等待運行條件的到來,一個任務的運行必須等待上一個任務運行結束。當然,單片機為了能夠處理緊急的任務,設置了中斷機制來處理緊急任務。我們把中斷稱為前台。所以前台程序可以中斷后台程序的運行,獲得資源先運行起來,等中斷任務處理結束后,再回到原來后台任務的斷點處,繼續運行。但是由於中斷本身要花費時間在斷點的處理上面,大量使用中斷會占用資源,浪費時間。可是,我們又希望能夠有一個機制能夠給予不同的任務等級之分,讓緊急的程序能夠先獲得資源運行起來,而不是非要等到上一個程序運行結束。於是,機智的程序員們就開發出了實時操作系統。
二、實時操作系統RTOS
實時操作系統(RTOS)的開發是為了能夠讓某些具有時效性、實時性任務可以優先獲得資源運行起來。所以其特點就是讓一些任務可以在一段指定的時間內完成。根據對時間的硬性要求,又可以將其分為軟實時系統和硬實時系統。RTOS的示意圖如下:
如圖所示,RTOS將任務分成了不同等級,總是讓優先級高的任務先運行。同樣,中斷可以打斷所有任務,來處理緊急任務。因為高等級的任務總是能先獲得資源運行起來,所以可以滿足對某些任務的時效性要求。
當然,RTOS相比於前后台系統不僅僅只有實時性這一方面的進步,同時RTOS還能夠通過分時原理並行的進行多任務的處理。在前后台系統中,一個任務如果缺少了某些繼續運行所需的資源或者條件,就只能是CPU空轉等待資源或者放棄任務。然而在RTOS中,則可以將這些任務掛起,使其進入等待狀態,將CPU資源釋放,使得其它任務得以運行,極大的提高了CPU的利用率。
並不是說,有了RTOS就淘汰了前后台系統。許多小型簡單的運用場景都不需要用到RTOS來調度系統的資源,前后台系統可以簡單的滿足應用。不過在實際的開發應用中,更多時候需要RTOS來調度龐大繁多的任務,來提系統資源的利用率。因此,深入了解掌握RTOS,是一個合格嵌入式開發人員必備的基本能力。