從零開始學習UCOSII操作系統1--UCOSII的基礎知識
前言:
首先比較主流的操作系統有UCOSII、FREERTOS、LINUX等,UCOSII的資料相對比其餘的兩個操作系統的資料是多很多的。
更重要的原因是自己本身還沒有能力深入的研究Linux操作系統。本次學習UCOSII主要是學習內核的設計原理。
此次專欄涉及到的API的使用是非常小的,僅僅作爲本人學習的記錄。後期也會對比UCOSIII說出實現的更多功能的代碼。
參考書籍:《嵌入式實時操作系統μCOS-II原理及應用》、《嵌入式實時操作系統uCOS-II 邵貝貝(第二版)》
學習代碼的出處:http://bbs.elecfans.com/jishu_345856_1_1.html
1、操作系統的作用
操作系統是計算機硬件系統與應用程序之間的接口,應用程序設計人員只是以操作系統層爲基礎使用計算機系統,所以程序設計人員
看到和使用的只是一些由計算機操作系統所提供的函數API,至於操作系統的這些底層函數是怎麼實現的,作爲一個應用開發人員是不需要
管的。
2、嵌入式系統的特點:
(1)專用性強:嵌入式系統通常是面向某個特定的應用的,所以嵌入式系統的硬件是特定用戶羣來設計的
(2)可以裁剪:Linux系統有很多網絡協議棧之類的,有些做個數碼相框的,沒有必要的話,那麼直接把那段源碼去掉也是可以的
(3)實時性與可靠性:所謂的實時性不是指,你代碼寫的東西必須要馬上執行,而是你寫的代碼可以
在合適的時間中執行,因爲操作系統有很多機制,比如資源的強佔,優先級低的任務是不可能實現
只要申請資源就馬上得到的。
3、裸機和操作系統最大的區別:
裸機是在一個main函數中不斷的執行,除了有中斷纔會跳轉到別的相應的代碼中執行的。不然運行的指針就會按照
地址的不斷的加4來執行。順序的執行結構,就是你可以通過代碼的找到相應的執行流程。
操作系統之後,main函數,當通過函數堆棧切換的跳轉到第一個任務之後,通過優先級的判斷
優先級高的任務可以得到優先的執行,就好像有多個main函數在一起執行的假象(並行)
4、任務的C語言表示:
任務是不需要返回的無類型函數。
void task1(void * param)
{
for( ; ;)
{
//用戶編寫的代碼
}
}
當然有人就覺得奇怪了,爲什麼你在一個函數裏面添加一個死循環,那麼函數不會就在這個任務中不斷的執行嗎?
當然這需要在裏面添加中斷的代碼的,以便於它能跳轉到其他的任務中執行,切換任務的時候,判斷優先級進行任務之間的切換的工作。
5、嵌入式實時操作系統的基本功能:
(1)內存管理:
內存管理主要是動態內存的管理,當應用程序需要使用內存的時候,可以利用操作系統所提供
內存分配函數來獲得足夠的內存空間。
動態內存就是指malloc、free函數的分配,就是從堆裏面拿內存,因爲我們本來嵌入式系統的內存分配就比較
少,所以這裏很關鍵。
(2)多任務管理:
裸機就是一個單任務的前後臺的程序,就是一個任務加上中斷的機器的實現方法。
程序設計人員就可以按照多線程來設計自己的程序,程序的耦合性和單元測試方面就會比較的容易。
關鍵就是程序的可複用性會更加的好。
(3)外圍資源管理:
除了本身自己必須需要的東西,內存和CPU,還有很多輸入型設備和輸出型設備需要管理。
由於資源是有限的,因此操作系統必須對這些資源進行合理的調度和管理,才能保證每個要使用
資源的任務在運行時可以獲得足夠的資源。
6、UCOS的代碼結構:
這個是UCOS的代碼結構,首先我們認識一個東西,需要從它的整體分析一下,因爲有一些東西
我們是在UCOS中不需要深入理解的。