從零開始學習UCOSII操作系統1--UCOSII的基礎知識

從零開始學習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中不需要深入理解的。

















發佈了89 篇原創文章 · 獲贊 86 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章