|
畢業(yè)后嵌入式培訓(xùn)_UC/OS II嵌入式技術(shù),
uCOS II簡介
u C / O S 是一種免費公開源代碼、結(jié)構(gòu)小巧、具有可剝奪實時內(nèi)核的實時操作系統(tǒng)。
μC/OS-II 的前身是μC/OS,最早出自于1992 年美國嵌入式系統(tǒng)專家Jean J.Labrosse 在《嵌入式系統(tǒng)編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS 的源碼發(fā)布在該雜志的B B S 上。
μC/OS 和μC/OS-II 是專門為計算機(jī)的嵌入式應(yīng)用設(shè)計的, 絕大部分代碼是用C語言編寫的。CPU 硬件相關(guān)部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU 上。用戶只要有標(biāo)準(zhǔn)的ANSI 的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌人到開發(fā)的產(chǎn)品中。μC/OS-II 具有執(zhí)行效率高、占用空間小、實時性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點, 最小內(nèi)核可編譯至 2KB 。μC/OS-II 已經(jīng)移植到了幾乎所有知名的CPU 上。
嚴(yán)格地說uC/OS-II只是一個實時操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時間管理,內(nèi)存管理和任務(wù)間的通信和同步等基本功能。沒有提供輸入輸出管理,文件系統(tǒng),網(wǎng)絡(luò)等額外的服務(wù)。但由于uC/OS-II良好的可擴(kuò)展性和源碼開放,這些非必須的功能完全可以由用戶自己根據(jù)需要分別實現(xiàn)。
uC/OS-II目標(biāo)是實現(xiàn)一個基于優(yōu)先級調(diào)度的搶占式的實時內(nèi)核,并在這個內(nèi)核之上提供最基本的系統(tǒng)服務(wù),如信號量,郵箱,消息隊列,內(nèi)存管理,中斷管理等。
任務(wù)管理
uC/OS-II 中最多可以支持64 個任務(wù),分別對應(yīng)優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務(wù)和4個最低優(yōu)先級的任務(wù),所有用戶可以使用的任務(wù)數(shù)有56個。
uC/OS-II提供了任務(wù)管理的各種函數(shù)調(diào)用,包括創(chuàng)建任務(wù),刪除任務(wù),改變?nèi)蝿?wù)的優(yōu)先級,任務(wù)掛起和恢復(fù)等。
系統(tǒng)初始化時會自動產(chǎn)生兩個任務(wù):一個是空閑任務(wù),它的優(yōu)先級最低,改任務(wù)僅給一個整形變量做累加運算;另一個是系統(tǒng)任務(wù),它的優(yōu)先級為次低,改任務(wù)負(fù)責(zé)統(tǒng)計當(dāng)前cpu的利用率。
時間管理
uC/OS-II的時間管理是通過定時中斷來實現(xiàn)的,該定時中斷一般為10毫秒或100毫秒發(fā)生一次,時間頻率取決于用戶對硬件系統(tǒng)的定時器編程來實現(xiàn)。中斷發(fā)生的時間間隔是固定不變的,該中斷也成為一個時鐘節(jié)拍。
uC/OS-II要求用戶在定時中斷的服務(wù)程序中,調(diào)用系統(tǒng)提供的與時鐘節(jié)拍相關(guān)的系統(tǒng)函數(shù),例如中斷級的任務(wù)切換函數(shù),系統(tǒng)時間函數(shù)。
內(nèi)存管理
在ANSI C中是使用malloc和free兩個函數(shù)來動態(tài)分配和釋放內(nèi)存。但在嵌入式實時系統(tǒng)中,多次這樣的錯作會導(dǎo)致內(nèi)存碎片,且由于內(nèi)存管理算法的原因,malloc和free的執(zhí)行時間也是不確定。
uC/OS-II中把連續(xù)的大快內(nèi)存按分區(qū)管理。每個分區(qū)中包含整數(shù)個大小相同的內(nèi)存塊,但不同分區(qū)之間的內(nèi)存快大小可以不同。用戶需要動態(tài)分配內(nèi)存時,系統(tǒng)選擇一個適當(dāng)?shù)姆謪^(qū),按塊來分配內(nèi)存。釋放內(nèi)存時將該塊放回它以前所屬的分區(qū),這樣能有效解決碎片問題,同時執(zhí)行時間也是固定的。
任務(wù)間通信與同步
對一個多任務(wù)的操作系統(tǒng)來說,任務(wù)間的通信和同步是必不可少的。uC/OS-II中提供了4中同步對象,分別是信號量,郵箱,消息隊列和事件。所有這些同步對象都有創(chuàng)建,等待,發(fā)送,查詢的接口用于實現(xiàn)進(jìn)程間的通信和同步。
任務(wù)調(diào)度
uC/OS-II 采用的是可剝奪型實時多任務(wù)內(nèi)核?蓜儕Z型的實時內(nèi)核在任何時候都運行就緒了的最高優(yōu)先級的任務(wù)。
uC/os-II的任務(wù)調(diào)度是完全基于任務(wù)優(yōu)先級的搶占式調(diào)度,也就是最高優(yōu)先級的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運行的低優(yōu)先級任務(wù)的處理器資源。為了簡化系統(tǒng)設(shè)計,uC/OS-II規(guī)定所有任務(wù)的優(yōu)先級不同,因為任務(wù)的優(yōu)先級也同時唯一標(biāo)志了該任務(wù)本身。
任務(wù)調(diào)度將在以下情況下發(fā)生:
1) 高優(yōu)先級的任務(wù)因為需要某種臨界資源,主動請求掛起,讓出處理器,此時將調(diào)度就緒狀態(tài)的低優(yōu)先級任務(wù)獲得執(zhí)行,這種調(diào)度也稱為任務(wù)級的上下文切換。
2) 高優(yōu)先級的任務(wù)因為時鐘節(jié)拍到來,在時鐘中斷的處理程序中,內(nèi)核發(fā)現(xiàn)高優(yōu)先級任務(wù)獲得了執(zhí)行條件(如休眠的時鐘到時),則在中斷態(tài)直接切換到高優(yōu)先級任務(wù)執(zhí)行。這種調(diào)度也稱為中斷級的上下文切換。
這兩種調(diào)度方式在uC/OS-II的執(zhí)行過程中非常普遍,一般來說前者發(fā)生在系統(tǒng)服務(wù)中,后者發(fā)生在時鐘中斷的服務(wù)程序中。
調(diào)度工作的內(nèi)容可以分為兩部分:最高優(yōu)先級任務(wù)的尋找和任務(wù)切換。其最高優(yōu)先級任務(wù)的尋找是通過建立就緒任務(wù)表來實現(xiàn)的。u C / O S 中的每一個任務(wù)都有獨立的堆?臻g,并有一個稱為任務(wù)控制塊TCB(Task Control Block)的數(shù)據(jù)結(jié)構(gòu),其中第一個成員變量就是保存的任務(wù)堆棧指針。任務(wù)調(diào)度模塊首先用變量OSTCBHighRdy 記錄當(dāng)前最高級就緒任務(wù)的TCB 地址,然后調(diào)用OS_TASK_SW()函數(shù)來進(jìn)行任務(wù)切換。
μC/OS-II的組成部分
μC/OS-II可以大致分成核心、任務(wù)處理、時間處理、任務(wù)同步與通信,CPU的移植等5個部分。
1) 核心部分(OSCore.c)
是操作系統(tǒng)的處理核心,包括操作系統(tǒng)初始化、操作系統(tǒng)運行、中斷進(jìn)出的前導(dǎo)、時鐘節(jié)拍、任務(wù)調(diào)度、事件處理等多部分。能夠維持系統(tǒng)基本工作的部分都在這里。
2) 任務(wù)處理部分(OSTask.c)
任務(wù)處理部分中的內(nèi)容都是與任務(wù)的操作密切相關(guān)的。包括任務(wù)的建立、刪除、掛起、恢復(fù)等等。因為μC/OS-II是以任務(wù)為基本單位調(diào)度的,所以這部分內(nèi)容也相當(dāng)重要。
3) 時鐘部分(OSTime.c)
μC/OS-II中的最小時鐘單位是timetick(時鐘節(jié)拍)。任務(wù)延時等操作是在這里完成的。
4) 任務(wù)同步和通信部分
為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標(biāo)志等部分;主要用于任務(wù)間的互相聯(lián)系和對臨界資源的訪問。
5) 與CPU的接口部分
是指μC/OS-II針對所使用的CPU的移植部分。由于μC/OS-II是一個通用性的操作系統(tǒng),所以對于關(guān)鍵問題上的實現(xiàn),還是需要根據(jù)具體CPU的具體內(nèi)容和要求作相應(yīng)的移植。這部分內(nèi)容由于牽涉到SP等系統(tǒng)指針,所以通常用匯編語言編寫。主要包括中斷級任務(wù)切換的底層實現(xiàn)、任務(wù)級任務(wù)切換的底層實現(xiàn)、時鐘節(jié)拍的產(chǎn)生和處理、中斷的相關(guān)處理部分等內(nèi)容。[!--empirenews.page--]
uC/OS-II的任務(wù)切換機(jī)理及中斷調(diào)度優(yōu)化
摘要:μC/OS-II是一種適用于嵌入式系統(tǒng)的搶占式實時多任務(wù)操作系統(tǒng),開放源代碼,便于學(xué)習(xí)和使用。介紹μC/OS-II在任務(wù)級和中斷級的任務(wù)切換原理,以及這一操作系統(tǒng)基于嵌入式系統(tǒng)的對于中斷的處理;相對于內(nèi)存資源較少的單片機(jī),著重討論一種優(yōu)化的實用堆棧格式和切換形式,以提高資源的利用率;結(jié)合MSP430單片機(jī),做具體的分析。 關(guān)鍵詞:實時多任務(wù)操作系統(tǒng) μC/OS MSP430 中斷 堆棧
引 言
在嵌入式操作系統(tǒng)領(lǐng)域,由Jean J. Labrosse開發(fā)的μC/OS,由于開放源代碼和強(qiáng)大而穩(wěn)定的功能,曾經(jīng)一度在嵌入式系統(tǒng)領(lǐng)域引起強(qiáng)烈反響。而其本人也早已成為了嵌入式系統(tǒng)會議(美國)的顧問委員會的成員。
不管是對于初學(xué)者,還是有經(jīng)驗的工程師,μC/OS開放源代碼的方式使其不但知其然,還知其所以然。通過對于系統(tǒng)內(nèi)部結(jié)構(gòu)的深入了解,能更加方便地進(jìn)行開發(fā)和調(diào)試;并且在這種條件下,完全可以按照設(shè)計要求進(jìn)行合理的裁減、擴(kuò)充、配置和移植。通常,購買RTOS往往需要一大筆資金,使得一般的學(xué)習(xí)者望而卻步;而μC/OS對于學(xué)校研究完全免費,只有在應(yīng)用于盈利項目時才需要支付少量的版權(quán)費,特別適合一般使用者的學(xué)習(xí)、研究和開發(fā)。自1992第1版問世以來,已有成千上萬的開發(fā)者把它成功地應(yīng)用于各種系統(tǒng),安全性和穩(wěn)定性已經(jīng)得到認(rèn)證,現(xiàn)已經(jīng)通過美國FAA認(rèn)證。
● 1 μC/OS-II的幾大組成部分
μC/OS-II可以大致分成核心、任務(wù)處理、時間處理、任務(wù)同步與通信,CPU的移植等5個部分。
核心部分(OSCore.c) 是操作系統(tǒng)的處理核心,包括操作系統(tǒng)初始化、操作系統(tǒng)運行、中斷進(jìn)出的前導(dǎo)、時鐘節(jié)拍、任務(wù)調(diào)度、事件處理等多部分。能夠維持系統(tǒng)基本工作的部分都在這里。
任務(wù)處理部分(OSTask.c) 任務(wù)處理部分中的內(nèi)容都是與任務(wù)的操作密切相關(guān)的。包括任務(wù)的建立、刪除、掛起、恢復(fù)等等。因為μC/OS-II是以任務(wù)為基本單位調(diào)度的,所以這部分內(nèi)容也相當(dāng)重要。
時鐘部分(OSTime.c) μC/OS-II中的最小時鐘單位是timetick(時鐘節(jié)拍)。任務(wù)延時等操作是在這里完成的。
任務(wù)同步和通信部分 為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標(biāo)志等部分;主要用于任務(wù)間的互相聯(lián)系和對臨界資源的訪問。
與CPU的接口部分 是指μC/OS-II針對所使用的CPU的移植部分。由于μC/OS-II是一個通用性的操作系統(tǒng),所以對于關(guān)鍵問題上的實現(xiàn),還是需要根據(jù)具體CPU的具體內(nèi)容和要求作相應(yīng)的移植。這部分內(nèi)容由于牽涉到SP等系統(tǒng)指針,所以通常用匯編語言編寫。主要包括中斷級任務(wù)切換的底層實現(xiàn)、任務(wù)級任務(wù)切換的底層實現(xiàn)、時鐘節(jié)拍的產(chǎn)生和處理、中斷的相關(guān)處理部分等內(nèi)容。
uC/OS II在S3C2410上的移植:
隨著信息化技術(shù)的發(fā)展和數(shù)字化產(chǎn)品的普及,以計算機(jī)技術(shù)、芯片技術(shù)和軟件技術(shù)為核心的嵌入式系統(tǒng)再度成為當(dāng)前研究和應(yīng)用的熱點。
對功能、可靠性、成本、體積和功耗嚴(yán)格要求的嵌入式系統(tǒng)一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的應(yīng)用程序等四個部分組成,其中嵌入式微處理器和嵌入式操作系統(tǒng)分別是其硬件和軟件的核心。
ARM處理器由于其具有小體積、低功耗、低成本、高性能等特點,廣泛應(yīng)用在16/32位嵌入式RISC解決方案中,幾乎占有嵌入式微處理器市場分額的75% ,本文選定三星公司生產(chǎn)的一款基于ARM920T核的高性能低功耗SOC芯片S3C2410作為移植方案的硬件平臺。市場上主流的嵌入式實時操作系統(tǒng)有Vxworks、pSos、WinCE、Linux等,基于實時性、成本以及開發(fā)難度方面的考慮,我們選擇uC/OS II——開放源代碼的嵌入式實時操作系統(tǒng)。
● uC/OS II介紹
uC/OS II(Micro Control Operation System Two)是一個可以基于ROM運行的、可裁減的、搶占式(見圖1)實時多任務(wù)內(nèi)核,具有高度可移植性,特別適合于微處理器和控制器,是和很多商業(yè)操作系統(tǒng)性能相當(dāng)?shù)膶崟r操作系統(tǒng)(RTOS)。為了提供最好的移植性能,uC/OS II最大程度上使用ANSI C語言進(jìn)行開發(fā),并且已經(jīng)移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU(包括DSP)。
uC/OS II可以簡單的視為一個多任務(wù)調(diào)度器,在這個任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的系統(tǒng)服務(wù),如信號量、郵箱等。其主要特點有公開源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內(nèi)核屬于搶占式,最多可以管理60個任務(wù)。從1992年開始,由于高度可靠性、魯棒性和安全性,uC/OS II已經(jīng)廣泛使用在從照相機(jī)到航空電子產(chǎn)品的各種應(yīng)用中。
2 uC/OS II在S3C2410上的可移植性
所謂移植,就是使這個實時內(nèi)核能在某個微處理器上運行。為了方便移植,大部分的uC/OS II代碼是用c語言寫的,但仍需要用c和匯編語言寫一些與處理器相關(guān)的代碼,這是因為uC/OS II在讀寫處理器寄存器時只能通過匯編語言來實現(xiàn)。由于uC/OS II在設(shè)計時就已經(jīng)充分考慮了可移植性,所以uC/OS II的移植相對來說是比較容易的。uC/OS II的框架結(jié)構(gòu)如圖2。嵌入式的崗位, 共濟(jì)嵌入式主機(jī), 嵌入式軟件基本組成, 嵌入式磁吸軌道, 減速器非嵌入式端蓋, 嵌入式軟件實時性, 嵌入式lan通信, 日照嵌入式培訓(xùn)機(jī)構(gòu), 嵌入式消費電子, 醫(yī)院嵌入式結(jié)算, 嵌入式音箱排線, 嵌入式單元測試, 感覺嵌入式很難, 電視機(jī)嵌入式洞口, 嵌入式互聯(lián)網(wǎng)開發(fā), 復(fù)旦大學(xué)嵌入式芬蘭, 百度貼吧嵌入式, 5匹冷曖嵌入式, 嵌入式大學(xué)公開課, dsp嵌入式系統(tǒng), 嵌入式軟件上下文, 嵌入式社區(qū)的特點, 墻面嵌入式收納,
uC/OSII的正常運行需要處理器平臺滿足以下要求:
a)處理器的C編譯器能產(chǎn)生可重入代碼。
b)用C語言就可以打開和關(guān)閉中斷。
c)處理器支持中斷,并且能產(chǎn)生定時中斷(通常在10至100Hz之間)。
d)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。
e)處理器有將堆棧指針和其它CPU寄存器讀出和存儲到堆;騼(nèi)存中的指令。
S3C2410處理器采用ARM920T內(nèi)核,內(nèi)部共有37個寄存器,其中R13通常用作堆棧指針,只要系統(tǒng)RAM空間允許,堆?臻g理論上沒有限制。ARM處理器提供ARM指令和Thumb指令兩種指令集,每種指令集都包含有豐富的指令對堆棧進(jìn)行操作,可以隨意的對處理器中的寄存器進(jìn)行堆棧操作。根據(jù)堆棧生長方向的不同,可以生成4種不同的堆棧,分別是滿遞增、空遞增、滿遞減(此移植中使用的是滿遞減方式)、空遞減。芯片內(nèi)集成5個定時時鐘,任何一個都可以產(chǎn)生定時中斷,滿足第三條要求。ADS集成開發(fā)環(huán)境的內(nèi)置編譯器可以產(chǎn)生可重入代碼,并且支持內(nèi)嵌匯編,C環(huán)境中可任意的進(jìn)行開關(guān)中斷操作。綜上所述uC/OS II完全可以移植到S3C2410上運行。[!--empirenews.page--]
3 主體移植過程
3.1 設(shè)置與處理器及編譯器相關(guān)的代碼[OS_CPU.H]
不同的編譯器會使用不同的字節(jié)長度來表示同一數(shù)據(jù)類型,所以要定義一系列數(shù)據(jù)類型以確保移植的正確性。下面是uC/OS II定義的一部分?jǐn)?shù)據(jù)類型。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT16S;
typedef unsigned int INT16U;
typedef signed int INT16S;
typedef unsigned long INT32U;
typedef signed long INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
typedef unsigned int OS_CPU_SR;
uC/OS II需要先關(guān)中斷再訪問臨界區(qū)的代碼,并且在訪問完后重新允許中斷。uC/OS II定義了兩個宏來禁止和允許中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植實現(xiàn)這兩個宏的匯編代碼。
#define OS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())
#define OS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))
EXPORT OSCPUSaveSR
OSCPUSaveSR
mrs r1,cpsr
mov r0,r1
orr r1,r1,#0xc0
msr cpsr_cxsf,r1
mov pc,lr
EXPORT OSCPURestoreSR
OSCPURestoreSR
msr cpsr_cxsf,r0
mov pc,lr
3.2 用C語言實現(xiàn)與處理器任務(wù)相關(guān)的函數(shù)[OS_CPU_C.C]
OSTaskStkInit()
OSTaskCreateHook()
OSTaskDelHook()
OSTaskSwHook()
OSTaskStatHook()
OSTimeTickHook()
實際需要修改的只有OSTaskStkInit()函數(shù),其他五個函數(shù)需要聲明,但不一定有實際內(nèi)容。這五個函數(shù)都是用戶定義的,所以O(shè)S_CPU_C.C中沒有給出代碼。如果需要使用這些函數(shù),可以將文件OS_CFG.H中的#define constant OS_CPU_HOOKS_EN設(shè)為1,設(shè)為0表示不使用這些函數(shù)。
OSTaskStkInit()函數(shù)由OSTaskCreate()或OSTaskCreateExt()調(diào)用,需要傳遞的參數(shù)是任務(wù)代碼的起始地址、參數(shù)指針(pdata)、任務(wù)堆棧頂端的地址和任務(wù)的優(yōu)先級,用來初始化任務(wù)的堆棧,初始狀態(tài)的堆棧模擬發(fā)生一次中斷后的堆棧結(jié)構(gòu)。堆棧初始化工作結(jié)束后,OSTaskStkInit()返回新的堆棧棧頂指針,OSTaskCreate()或OSTaskCreateExt()將指針保存在任務(wù)的OS_TCB中。調(diào)用OSTaskStkInit()給任務(wù)做一個初始的任務(wù)上下文堆棧,形狀如圖3。
3.3 處理器相關(guān)部分匯編實現(xiàn)
整個uC/OS II移植實現(xiàn)中,只需要提供一個匯編語言文件,提供幾個必須由匯編才能實現(xiàn)的函數(shù)。
a)OSStartHighRdy()
該函數(shù)在OSStart()多任務(wù)啟動之后,負(fù)責(zé)從最高優(yōu)先級任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針sp,通過sp依次將CPU現(xiàn)場恢復(fù),此時系統(tǒng)就將控制權(quán)交給用戶創(chuàng)建的該任務(wù)的進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級的任務(wù)搶占了CPU。該函數(shù)僅僅在多任務(wù)啟動時被執(zhí)行一次,用來啟動第一個,也就是最高優(yōu)先級的任務(wù)執(zhí)行。
b)OSCtxSw()
該函數(shù)是任務(wù)級的上下文切換函數(shù),在任務(wù)因為被阻塞而主動請求與CPU調(diào)度時執(zhí)行,主要工作是先將當(dāng)前任務(wù)的CPU現(xiàn)場保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場,使之繼續(xù)執(zhí)行,從而完成一次任務(wù)切換。
C)OSIntExit()
該函數(shù)是中斷級的任務(wù)切換函數(shù),在時鐘中斷ISR中發(fā)現(xiàn)有高優(yōu)先級任務(wù)在等待時,需要在中斷退出后不返回被中斷的任務(wù),而是直接調(diào)度就緒的高優(yōu)先級任務(wù)執(zhí)行。其目的在于能夠盡快讓高優(yōu)先級的任務(wù)得到響應(yīng),保證系統(tǒng)的實時性能。
d)OSTickISR()
該函數(shù)是時鐘中斷處理函數(shù),主要任務(wù)是負(fù)責(zé)處理時鐘中斷,調(diào)用系統(tǒng)實現(xiàn)的OSTimeTick函數(shù),如果有等待時鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調(diào)度其執(zhí)行。另外兩個相關(guān)函數(shù)是OSIntEnter()和OSIntExit(),都需要在ISR中執(zhí)行。
4 測試
至此代碼移植過程已經(jīng)完成,下一步工作就是測試。測試一個象uC/OS II一樣的多任務(wù)實時內(nèi)核并不復(fù)雜,甚至可以在沒有應(yīng)用程序的情況下測試。換句話說,就是讓這個實時內(nèi)核在目標(biāo)板上跑起來,讓內(nèi)核自己測試自己。這樣做有兩個好處:第一,避免使本來就復(fù)雜的事情更加復(fù)雜;第二,如果出現(xiàn)問題,可以知道問題出在內(nèi)核代碼上而不是應(yīng)用程序。剛開始的時候可以運行一些簡單的任務(wù)和時鐘節(jié)拍中斷服務(wù)例程。一旦多任務(wù)調(diào)度成功地運行了,再添加應(yīng)用程序的任務(wù)就是非常簡單的工作了。
5 結(jié)束語
采用基于ARM9的S3C2410嵌入式微處理器,可以使系統(tǒng)具備高性能的運算能力的同時便于與各種外設(shè)連接擴(kuò)展,簡化了硬件設(shè)計,維持小型化的同時降低了系統(tǒng)成本。uC/OS II作為一個源代碼公開的操作系統(tǒng),在具體應(yīng)用中穩(wěn)定可靠,并且支持uIP TCP/IP協(xié)議棧、ucGUI等,可擴(kuò)展性強(qiáng),功能強(qiáng)大。本系統(tǒng)采ARM9+uC/OS II開發(fā)設(shè)計,具有精度高、運行穩(wěn)定、實時性好、抗干擾能力強(qiáng)、性價比高的特點,可以在各種工業(yè)場合中廣泛應(yīng)用,達(dá)到了設(shè)計的初衷
μC/OS-II作為一個嵌入式實時操作系統(tǒng),自1992年以來,因其源代碼的完全公開和優(yōu)越性能,已為眾多的愛好者和開發(fā)人員所了解并得到了廣泛應(yīng)用。μC/OS-II是一個占先式內(nèi)核,執(zhí)行時間可確定(即函數(shù)的調(diào)用與服務(wù)的時間是可知的,不依賴于應(yīng)用程序的大。壳白疃嘀С64個任務(wù)(8個為系統(tǒng)保留),總是執(zhí)行處于就緒態(tài)的優(yōu)先級最高的任務(wù)。目前,51系列及其擴(kuò)展型單片機(jī)仍在單片機(jī)應(yīng)用系統(tǒng)占較大比重,因而詳細(xì)介紹μC/OS-II在AT89C51上的移植實現(xiàn)過程,解決移植過程中出現(xiàn)的問題,有很大的實用意義。 |
|