標(biāo)題:
UCOS Learning Notes N.O. 01【Originality】
[打印本頁]
作者:
liuda
時間:
2015-1-23 21:00
標(biāo)題:
UCOS Learning Notes N.O. 01【Originality】
有近三個月的時間沒有看關(guān)于UCOS的書了,今天我重新拿起那本任哲寫的關(guān)于UCOS,感覺有點(diǎn)親切,今天下午我把移植ARM的的UCOS的代碼看了一部分,感覺比以前好多了,待會我再詳細(xì)解,我先把我剛才看的東西通過我的理解把它寫下來,以后好復(fù)習(xí)。
我這里講的是基于UCOS 2.52的版本,關(guān)于UCOS的介紹,我就不多說了,反正只要知道它是一個實(shí)時的微內(nèi)核,它擁有64個優(yōu)先級別,級別數(shù)最大反而優(yōu)先級越低,至于為什么,呵呵,網(wǎng)友們應(yīng)該不會這樣想吧;知道這點(diǎn)就算是有了一個門外漢的初步了解拉。
要想深入了解它,首先我們得知道它的文件結(jié)構(gòu),因?yàn)樗且粋實(shí)時嵌入式的操作系統(tǒng),所以對移植要求比較高,正因?yàn)槿绱似鋭?chuàng)作者幾乎全部是用ANSIC寫的,只有幾個文件與你所用的編譯環(huán)境和硬件抽象底層有關(guān)的需要自己寫,他們分別是OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C,這幾個文件里面分別放的是什么東西呢,呵呵,先別急,一個一個來,OS_CPU.H里面放的是編譯環(huán)境數(shù)據(jù)類型的重新定義,怎么說呢,該操作系統(tǒng)的創(chuàng)作者為了增強(qiáng)移植性,它把數(shù)據(jù)類型全部交有我們用戶來定義,也就是為了避免這種現(xiàn)象,比如說int在vc++中是16位的,而在ADS1.2中是32位的,而我們操作系統(tǒng)中用的是16位的,那么為了防止沖突,我們在ADS1.2中時必須把int定義為16位的int,記住我們在用typedef重定義數(shù)據(jù)類型是,是不能把新的定義名稱和該編譯器中的數(shù)據(jù)類型名一樣的,否則編譯器會打架的,我上面用的int是不對的,主要是為了更好的讓大家理解;然后在這個文件中我們還要定義一些與CPU相關(guān)的宏,主要是什么呢,就是開中斷和關(guān)中斷兩個宏,為什么要這兩個宏,又該怎么用呢?其實(shí)這就好比我們在對某一個數(shù)據(jù)進(jìn)行采集時,是不能被中斷的,那么我們通過什么來實(shí)現(xiàn)呢,相信大家應(yīng)該明白了。OK!搞定一個文件了,接下來是OS_CPU_A.ASM,這玩意可有點(diǎn)難拉,他包含一些與所有處理器都相關(guān)的函數(shù),比如說進(jìn)入中斷前的數(shù)據(jù)保護(hù)好中斷結(jié)束后的數(shù)據(jù)恢復(fù),接下來就是OS_CPU.C,它里面主要就是一個棧的定義,應(yīng)該好理解。
移植時要自己修改的或自己寫的介紹完了,我稍微簡單介紹下它這個核包含些什么玩意兒,請看下列表:
OS_CORE.C//核心服務(wù)模塊文件
OS_FLAG.C//信號量集服務(wù)模塊文件
OS_MBOX.C//消息郵箱服務(wù)模塊問價
OS_MEM.C//存儲管理服務(wù)模塊文件
OS_MUTEX.C//互斥型信號量服務(wù)模塊文件
OS_Q.C//消息隊(duì)列服務(wù)模塊文件
OS_SEM.C//信號量服務(wù)模塊文件
OS_TASK.C//任務(wù)管理服務(wù)模塊文件
OS_TIME.C//時間管理服務(wù)文件
uCOS_II.C
uCOS_II.H//與應(yīng)用相關(guān)的配置文件
該系統(tǒng)的可裁剪是通過條件編譯來實(shí)現(xiàn)的,其為用戶定義了一個配置文件OS_CFG.H,也就是我們在OS_CFG.H中把某個條件定義為1,編譯器就對它進(jìn)行編譯,反之就不編譯,這就實(shí)現(xiàn)了裁剪的功能。好了,關(guān)于這個核的文件結(jié)構(gòu)我就先寫這么多拉,夠用了的。僅僅是我的理解,如果有不對的地方,或有更好的說法,請一定要指出并留言咯。我先謝謝拉。
該核的文件結(jié)構(gòu)了解了后,然后就可以向它的核進(jìn)軍,首先我們從任務(wù)來下手,一提到操作系統(tǒng)的任務(wù),我們必須了解幾個任務(wù)可能所處的狀態(tài):1)睡眠狀態(tài):它是一個什么樣的狀態(tài)呢,它其實(shí)是指一個任務(wù)在內(nèi)存中就占用一部分ROM,它沒有被操作系統(tǒng)分配任務(wù)控制塊,它和其他狀態(tài)下的任務(wù)沒有任何直接聯(lián)系,就好比我們?nèi)コ燥,正在路上?)就緒狀態(tài):它是指操作系統(tǒng)給它分配了任務(wù)控制塊,已經(jīng)在就緒列表中登記中,就好比我們?nèi)コ燥垥r在那排隊(duì)一樣;3)運(yùn)行狀態(tài):它是指一個任務(wù)正在運(yùn)行,應(yīng)該好理解,就好比食堂工作人員在給我們打飯;4)等待狀態(tài):就是一個任務(wù)由于一個的條件沒有滿足,比如說在等待一個信號量的到來,而被至于等待狀態(tài),就像我們在打飯時,如果工作人員突然尿急,那你沒辦法,你就得等拉;5)中斷服務(wù)狀態(tài),就是在某個時刻突然因?yàn)橐粋中斷到來,那么這個任務(wù)就會馬上被中斷掉,從而處于中斷服務(wù)狀態(tài),比如一個餓得受不了的人,如果搶你前面,本來該你打飯的,可是你看到他這個樣子,不忍心,那么你就被中斷了一會,中斷結(jié)束后,中斷掉的任務(wù)才會被繼續(xù)運(yùn)行,同樣的你才能夠打飯;呵呵,這個比喻好像損了點(diǎn)。
關(guān)于這幾個任務(wù)之間的轉(zhuǎn)換,由于我在宿舍,我的電腦在老師辦公室,我用我同學(xué)的電腦,由于重裝的系統(tǒng),沒有裝OFFICE,我明天去實(shí)驗(yàn)室時補(bǔ)上咯。好了,今天關(guān)于UCOS就這么多吧。
作者:
rumintao
時間:
2016-1-27 08:41
后面的呢,繼續(xù)寫
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1