一、μCos-ii _概述 網上關於μCosii的文章多不勝數,本人學習的過程中也參考了很多人的理解和想法,看的是盧有亮老師的《嵌入式實時操作系統-μC/OS原理與實踐》(第2版),同時也參考了邵貝貝老師的《嵌入式實時操作系統μCOS-II》,斷斷續續一個月看了幾遍書,也在stm32上簡單移植了μC ...
一、μCos-ii _概述
網上關於μCosii的文章多不勝數,本人學習的過程中也參考了很多人的理解和想法,看的是盧有亮老師的《嵌入式實時操作系統-μC/OS原理與實踐》(第2版),同時也參考了邵貝貝老師的《嵌入式實時操作系統μCOS-II》,斷斷續續一個月看了幾遍書,也在stm32上簡單移植了μCos-ii,這裡也談下自己的理解,如有紕漏,敬請指教。
1.什麼是操作系統,為什麼要學操作系統?
生活中PC上最常見的無非Windows、Mac OS、Linux等操作系統,移動設備上的Android、ios等。我們發現在這樣一個操作系統的平臺上,可以方便的進行各種應用程式的開發,而可以不用考慮對底層硬體的操作。
因此,操作系統是建立在系統硬體與用戶程式之間的一層重要的系統軟體,,是對硬體的第一層抽象與封裝,它向上層提供封裝好的API(應用程式介面),同時還承擔著任務管理、事件管理、記憶體管理、文件管理、CPU管理、記憶體管理、I/O管理等核心功能。
我認為學習操作系統可以幫助我們避免抽象,更深入的理解電腦運行方式,從而構建出更加完整的知識體系。人們通過不斷的抽象和創造,從晶體管到門電路,發展到集成電路,再到硬體平臺和操作系統、人機介面,最後到與人打交道的應用程式,一步步實現了電腦的應用和普及。操作系統作為其中極其重要的一環是不可或缺的。
2.實時操作系統μCOS-II
μCOS-II作為實時操作系統(RTOS),最大的特點顧名思義就是實時性,即操作系統從接收任務到完成任務所需要的時間是基本確定的,其中又分為硬實時系統(規定時間內必須完成操作)和軟實時系統(按優先順序儘快完成造作即可)。其特點還包括多任務、多級中斷和優先順序調度機制。當然,μCOS-II也可能是實時操作系統里代碼最精簡,最適合入門選手的操作系統了,不過麻雀雖小,五臟俱全,對於學習和瞭解整個操作系統的框架還是基本夠用的。盧老師書中指出的學習路徑值得推薦:
圖 1 μCos-ii嵌入式操作系統學習路徑
3. μCOS-II系統基本構成
先明確幾個重要概念:
1> 任務:在μCos-ii中體現為一個進程,是CPU執行調度和分配的最小單元,在程式中一般就體現為一個相對獨立的函數。一般以迴圈的方式運行,當然運行需要滿足一定的條件(包括處於就緒狀態並且在就緒任務中優先順序最高,不用等待其他事件發生或者需要等待的事件已經發生,系統進行了任務調度),其中任務調度也是μCos-ii的靈魂所在。需要說明的是,μCos-ii是多任務操作系統,每個任務也會有很多不同的狀態,這點後續還會再說明。
2> 事件:事件指在操作系統運行過程中發生的重要事情,在μCos-ii中包括信號量、互斥信號量、事件標誌組、消息郵箱、消息隊列等5種,所有這5種事件或者說機制的設立都是為了一個目的:實現任務間的合作和無衝突的運行,或者也叫作“任務間同步”。如果把各個任務比作一條產線上的工人,那麼事件的機制就是總控臺下達的指令,只有所有工人按照指令工作,產線才能正常運行。當然,總控台需要瞭解各個崗位上的狀況,所以這些信息也許要各個工人(任務)來提供。
3> 時鐘:這個理解起來比較簡單,就像單片機的晶振一樣,操作系統也需要這樣一個節拍信號,作為系統的時鐘,也叫作時鐘節拍μCos-ii中這種機制一般都是設定好固定的定時器中斷(例如10ms一次),每次進入中斷系統時鐘加1。這個10ms就是操作系統執行任務調度和延時等操作的最小事件單位。
4> 中斷:與裸機開發中斷相應類似,也是保證實時性的基礎。事實上,任務調度大多依靠中斷,更多的任務切換也發生在中斷中,例如中斷服務程式中執行提交信號量或消息之類的代碼,就會時一些等待信號量和消息的代碼就緒,併在任務調度後得到運行。
5> 臨界區:任務中訪問共用資源的那一段程式稱為臨界區,因為共用資源需要互斥訪問,即不允許兩個任務同時訪問互斥資源。這裡有兩個重要的要求:
(1)臨界區不予許任務切換;
(2)臨界區代碼必須儘量短來保證實時性。
實現臨界區互斥訪問的機制一般有三種,後續還會再分析。
概述就講到這裡,簡單總結下:
μCos-ii是一種多任務輕量化的實時嵌入式操作系統,它通多任務管理(μCos-ii靈魂)實現多任務的調度和切換,利用事件管理,包括信號量、互斥信號量、事件標誌組、消息郵箱、消息隊列等機制實現任務間通信,從而確保多任務的合作和無衝突運行。