畢業(yè)設(shè)計(jì)(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機(jī)中移植研究
《畢業(yè)設(shè)計(jì)(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機(jī)中移植研究》由會(huì)員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(jì)(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機(jī)中移植研究(24頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、目 錄 摘要…………………………………………………………..………………………..………….….1 關(guān)鍵詞…………………………………………………………………………………..…………....1 Abstract…………………………………………………………………………………..…………..2 Key words…………………………………………………………………………………..………..2 1. 緒論…………………………………………………………………………………………….…3 1.1 嵌入式操作系統(tǒng)………………………………………………………………..……….…..3 1.1.1
2、嵌入式系統(tǒng)的發(fā)展?fàn)顩r……………………………………………………………....3 1.1.2 嵌入式操作系統(tǒng)的分類和發(fā)展………………………………………….…………...5 1.2 本課題研究的目的和意義……………………………………………………..……….…..5 2. µC/OS-Ⅱ嵌入式實(shí)時(shí)操作系統(tǒng)……………………………………………………….…………6 2.1 選擇µC/OS-Ⅱ的原因……………………………………………………………..……….6 2.2 µC/OS-Ⅱ操作系統(tǒng)內(nèi)容簡介…………………………………………………...…………..7 2.2.1
3、內(nèi)核結(jié)構(gòu)……………………………………………………………..………………..7 2.2.2 任務(wù)管理……………………………………………………………...……………….8 2.2.3 時(shí)間管理……………………………………………………..………………………10 2.2.4 任務(wù)間通信與同步……………………………………………..……………………11 2.2.5 內(nèi)存管理………………………………………………………..……………………12 3. C8051F系列單片機(jī)的特點(diǎn)……………………………………………………………………..13 3.1 C8051F系列單片機(jī)的特點(diǎn)……………………………
4、………………………………..…13 3.2 C8051F040的性能概述……………………………………………….…………………...13 4. µC/OS-Ⅱ在C8051F040上的移植………………………………………………………….…..15 4.1 µC/OS-Ⅱ硬件平臺的選擇………………………………………………….…………..…15 4.2 µC/OS-Ⅱ移植內(nèi)容………………………………………………………….……………..15 4.2.1 OS_CPU.H頭文件的修改………………………………………………………….16 4.2.2 OS_CPU_A.A
5、SM匯編文件的修改…………………………………………………17 4.3 µC/OS-Ⅱ在C8051F040上的運(yùn)行測試……………………………………..……….……19 4.4 基于µC/OS-Ⅱ的C8051F040運(yùn)用系統(tǒng)開發(fā)………………………………..…….……..21 5. 結(jié)論………………………………………………………………………………...……………22 參考文獻(xiàn)……………………………………………………………………………………………23 嵌入式操作系統(tǒng)μC/OS-II在C8051F040單片機(jī)中移植研究 摘要:隨著現(xiàn)代控制技
6、術(shù)、多媒體技術(shù)與Internet的應(yīng)用和普及,以計(jì)算機(jī)技術(shù)、芯 技術(shù)和軟件技術(shù)為核心的數(shù)字化技術(shù)得到了迅猛發(fā)展,掀起了一場數(shù)字化技術(shù)革命,促使消費(fèi)電子、計(jì)算機(jī)、通信一體化趨勢的步伐加快,嵌入式系統(tǒng)技術(shù)成為發(fā)展重點(diǎn)。 本文主要介紹了嵌入式實(shí)時(shí)操作系統(tǒng)µC/OS-Ⅱ在C8051 F040上的移植過程。首先,描述了嵌入式系統(tǒng)的發(fā)展?fàn)顩r;第二部分,介紹了µC/OS-Ⅱ操作系統(tǒng)的內(nèi)容,包括內(nèi)核結(jié)構(gòu),任務(wù)管理,時(shí)間管理,任務(wù)間通信與同步和內(nèi)存管理;第三部分,介紹了C8051F系列單片機(jī)的特點(diǎn);第四部分,詳細(xì)的敘述了µC/OS-Ⅱ移植的過程。 可以預(yù)見
7、,由于µC/OS-Ⅱ具有不可替代的優(yōu)點(diǎn),µC/OS-Ⅱ?qū)⒃谝院蟮那度胧较到y(tǒng)設(shè)計(jì)中得到廣泛應(yīng)用。 關(guān)鍵詞:µC/OS-Ⅱ;C8051F040;嵌入式實(shí)時(shí)操作系統(tǒng);移植 Embedded operating system μ C / OS-II in the C8051F040 MCU Transplantation Abstract:With application and popularization of modern control technology , mult
8、imedia technology and Internet, the digitized technology taking computer technology , chip technology and software engineering as the core has got swift and violent development, raise digitized technical revolution, impel paces of consuming electron , computer , integrated trend of communication to
9、accelerate, embedded systematic technology becomes the developing focus。 This dissertation mainly introduces µC/OS-Ⅱtransplantation course on C8051 F040 of embedded real-time operating system;and secondly, introduced µ C/OS- II operating system elements, including core structure, task man
10、agement, time management, intertask communication and synchronization, and memory management.;The third part, on the characteristics of C8051F Series MCU; fourth part of a detailed description of the μ C/OS- Ⅱ transplant process. It can be predicted that as µC/OS-Ⅱ irreplaceable advantages
11、81;C/OS-Ⅱ will be at a later embedded systems design widely used. Key words:µC/OS-Ⅱ;C8051F040;Embedded Real-time OS;Porting 23 1 緒論 1.1 嵌入式操作系統(tǒng) 1.1.1 嵌入式系統(tǒng)的發(fā)展?fàn)顩r 嵌入式系統(tǒng)誕生于微型機(jī)時(shí)代,隨著微型機(jī)技術(shù)的完善和發(fā)展,微型機(jī)出現(xiàn)了嵌入式應(yīng)用環(huán)境,傳統(tǒng)電子設(shè)備的智能化不同于通用機(jī)的嵌
12、入式應(yīng)用。現(xiàn)代計(jì)算機(jī)有通用計(jì)算機(jī)和嵌入式計(jì)算機(jī)兩大分支,他們是兩個(gè)完全不同的計(jì)算機(jī)技術(shù)領(lǐng)域。通用計(jì)算機(jī)系統(tǒng)是高速海量數(shù)值計(jì)算,嵌入式系統(tǒng)是對象嵌入和智能化控制。分工后兩個(gè)分支呈現(xiàn)高速發(fā)展的態(tài)勢。 嵌入式系統(tǒng)是嵌入到對象體系中的專用計(jì)算機(jī)應(yīng)用系統(tǒng)。其嵌入性是指非獨(dú)立存在的物理空間,專用性是滿足對象體系要求的軟硬件裁剪,它是智能化的工具保證。由于傳統(tǒng)電子系統(tǒng)的嵌入式應(yīng)用環(huán)境是超小型、超低價(jià)、高可靠的嵌入式計(jì)算機(jī),這就需要尋求芯片化的徹底解決辦法,單片微型計(jì)算機(jī)應(yīng)運(yùn)而生,走單片機(jī)獨(dú)立發(fā)展道路成了必然選擇。 一個(gè)嵌入式系統(tǒng)包括硬件和軟件兩部分。硬件包括微處理器、存儲器及外設(shè)器件等,而軟件包括操作系
13、統(tǒng)軟件和應(yīng)用程序。為了提高系統(tǒng)性能,除了需要對硬件和軟件進(jìn)行優(yōu)化外,還會(huì)引入總線的概念。與普通計(jì)算機(jī)系統(tǒng)類似,嵌入式系統(tǒng)仍然包括微處理器、存儲設(shè)備和輸入、輸出設(shè)備,但是它與一般的PC系統(tǒng)還有很大的區(qū)別。一般來講,嵌入式系統(tǒng)在功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約。 作為二十世紀(jì)人類最偉大的發(fā)明之一,計(jì)算機(jī)在期待著第五代出現(xiàn)的同時(shí),也邁入了其另一個(gè)新階段——后PC時(shí)代。后PC時(shí)代的到來,使得人們開始越來越多的接觸到一個(gè)新的概念——嵌入式產(chǎn)品,如手機(jī)、PDA、數(shù)控機(jī)床等。其實(shí),嵌入式操作系統(tǒng)很早以前就出現(xiàn)就得到了廣泛應(yīng)用,如微型計(jì)算器、PC中的鍵盤,都是最
14、典型最簡單的嵌入式系統(tǒng)。如果說PC機(jī)的出現(xiàn)構(gòu)建了信息產(chǎn)業(yè)的框架,推動(dòng)了整個(gè)信息產(chǎn)業(yè)和人類文明的發(fā)展和前進(jìn),那么嵌入式系統(tǒng)的發(fā)展將會(huì)更加完善這個(gè)框架,并成為信息產(chǎn)業(yè)發(fā)展的加速器。 根據(jù)IEEE的定義,嵌入式系統(tǒng)是控制、監(jiān)視或者輔助設(shè)備機(jī)器和車間運(yùn)行的裝置,這主要是從產(chǎn)品的應(yīng)用角度加以定義的。按照目前業(yè)界和學(xué)術(shù)界對嵌入式系統(tǒng)的普遍看法,嵌入式操作系統(tǒng)被定義為以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。 嵌入式系統(tǒng)技術(shù)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)及電子技術(shù)和各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,這一點(diǎn)就決定了它必然是一個(gè)技
15、術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。綜觀嵌入式系統(tǒng)技術(shù)的發(fā)展,大致經(jīng)歷了以下三個(gè)階段: (1)第一階段是嵌入式技術(shù)的早期階段。 嵌入式操作系統(tǒng)的發(fā)展歷史悠久,可以說它是伴隨著數(shù)字計(jì)算機(jī)的出現(xiàn)而誕生的。但早期的計(jì)算機(jī)主要器件由電子管、晶體管等組成,體積過于龐大,因而阻礙了嵌入式系統(tǒng)的發(fā)展。早期系統(tǒng)以功能簡單的專用計(jì)算機(jī)或單片機(jī)為核心的可編程控制器形式存在,具有監(jiān)測、伺服、設(shè)備指示等功能。這一階段系統(tǒng)的主要特點(diǎn)是系統(tǒng)結(jié)構(gòu)和功能都相對單一,處理效率較低,存儲容量較小,幾乎沒有用戶接口,比較適合于各類專用領(lǐng)域。 (2) 第二階段是以嵌入式處理器/控制器和嵌入式操作系統(tǒng)為標(biāo)志的嵌入
16、式系統(tǒng)。 隨著并行技術(shù)、先進(jìn)控制、流水線、強(qiáng)有力的中斷系統(tǒng)、操作系統(tǒng)等技術(shù)的發(fā)展,特別是在微處理器問世以后,嵌入式系統(tǒng)得到了真正的發(fā)展。微處理器的廣泛應(yīng)用形成了一個(gè)廣闊的嵌入式應(yīng)用市場。 這一階段系統(tǒng)的主要特點(diǎn)是計(jì)算機(jī)硬件出現(xiàn)了高可靠、低功耗的嵌入式處理器;同時(shí),各類商業(yè)嵌入式操作系統(tǒng)開始出現(xiàn)并得到遜色發(fā)展,嵌入式操作系統(tǒng)能運(yùn)行于各種不同類型的微處理器上,兼容性好;操作系統(tǒng)內(nèi)核小、效率高,并具備高度的模塊化和擴(kuò)展性;具備文件和目錄管理、設(shè)備支持、多任務(wù)、網(wǎng)絡(luò)支持、圖形窗口以及用戶界面等功能;具備大量的應(yīng)用程序接口,開發(fā)應(yīng)用程序簡單;嵌入式應(yīng)用軟件豐富。 (3)第三階段是以芯片技術(shù)和Int
17、ernet技術(shù)為標(biāo)志的嵌入式系統(tǒng)。 微電子技術(shù)發(fā)展迅速,SOC技術(shù)使嵌入式系統(tǒng)越來越小,功能越來越強(qiáng)。隨著NOC的出現(xiàn),以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益密切,嵌入式系統(tǒng)的網(wǎng)絡(luò)化趨勢將推動(dòng)其更加快速的發(fā)展。 近幾年嵌入式操作系統(tǒng)技術(shù)的發(fā)展有以下幾個(gè)顯著的變化: (1)新的處理器越來越多,一方面,嵌入式操作系統(tǒng)自身結(jié)構(gòu)的設(shè)計(jì)更易于移植,以便在短時(shí)間內(nèi)支持更多種微處理器;另一方面,系統(tǒng)應(yīng)能使用驅(qū)動(dòng)程序開發(fā)與配置環(huán)境,造就一個(gè)新的BSP和驅(qū)動(dòng)程序結(jié)構(gòu),以適應(yīng)微處理器不斷升級變化所產(chǎn)生的需求。 (2)開放源碼之風(fēng)已波及嵌入式系統(tǒng)廠家。數(shù)量相當(dāng)多的嵌入式系統(tǒng)廠家出售產(chǎn)品
18、時(shí),就附加了源程序代碼并含生產(chǎn)版稅。 (3)后PC時(shí)代更多的產(chǎn)品使用嵌入式操作系統(tǒng),它們對實(shí)時(shí)性要求并不高。 (4)電信設(shè)備、控制系統(tǒng)要求的高可靠性,對嵌入式系統(tǒng)提出了新的要求。 (5)各類通用機(jī)上使用的新技術(shù)、新觀念正逐步移植到嵌入式系統(tǒng)中。 (6)各種嵌入式Linux操作系統(tǒng)正迅速發(fā)展,已經(jīng)形成了能與Windows CE等嵌入式操作系統(tǒng)進(jìn)行有力競爭的局面。 (7)面向定制趨勢,在系統(tǒng)級整合改造并支持應(yīng)用特制的性能,即在定制商品化的軟硬件上提供高性能和高可靠性系統(tǒng)服務(wù),將操作系統(tǒng)的功能和內(nèi)存需求定制成每個(gè)應(yīng)用所需的系統(tǒng)。 (8)嵌入式系統(tǒng)的多媒體化和網(wǎng)絡(luò)化方向趨勢。 (9)基于
19、知識的嵌入式系統(tǒng)也已開始出現(xiàn)。 隨著因特網(wǎng)技術(shù)的成熟、帶寬的提高,ICP在網(wǎng)上提供的信息內(nèi)容日趨豐富、應(yīng)用項(xiàng)目多種多樣,嵌入式電子設(shè)備的功能不再單一,電氣結(jié)構(gòu)也更復(fù)雜。 后PC時(shí)代,計(jì)算機(jī)將無處不在,家用電器將向數(shù)字化和網(wǎng)絡(luò)化發(fā)展,電視機(jī)、冰箱、微波爐、電話等都將嵌入計(jì)算機(jī),并通過家庭控制中心與Internet聯(lián)接,轉(zhuǎn)變?yōu)橹悄芫W(wǎng)絡(luò)家電,還可以實(shí)現(xiàn)遠(yuǎn)程醫(yī)療、遠(yuǎn)程教育等。中國擁有最大的手機(jī)用戶,而掌上電腦和PDA等因?yàn)橐子谑褂茫瑪y帶方便、價(jià)格便宜而得到了快速發(fā)展,PDA與手機(jī)已呈現(xiàn)融合趨勢。用掌上電腦或PDA上網(wǎng),人們可以隨時(shí)隨地獲取信息。新的手持設(shè)備將使無線互聯(lián)訪問成為更加普遍的現(xiàn)象。與
20、互聯(lián)網(wǎng)聯(lián)接,結(jié)合音頻應(yīng)用,如MP3功能,將會(huì)促使移動(dòng)計(jì)算設(shè)備市場創(chuàng)造新的銷售記錄。整合手機(jī)模塊,為移動(dòng)計(jì)算設(shè)備提供語音功能,也將是大勢所趨。 1.1.2 嵌入式操作系統(tǒng)的分類和發(fā)展 國外的嵌入式操作系統(tǒng)有VXWORK、QNX、PALMOS、Windows CE、Linux、µC/OS-Ⅱ等,國內(nèi)有基于Windows CE的機(jī)頂盒系統(tǒng)和HOPEN OS等。 從應(yīng)用方面分為面向低端設(shè)備的嵌入式操作系統(tǒng)和面向高端設(shè)備的嵌入式操作系統(tǒng)。傳統(tǒng)的嵌入式系統(tǒng)主要是面向低端設(shè)備的操作系統(tǒng),如各種工業(yè)系統(tǒng)、汽車發(fā)動(dòng)機(jī)系統(tǒng)和防報(bào)死系統(tǒng)、民用微波爐、洗衣機(jī)、冰箱等。這類應(yīng)用客觀上要求操作系統(tǒng)體積小,
21、實(shí)時(shí)性強(qiáng),開放源代碼的實(shí)時(shí)操作系統(tǒng)µC/OS就屬這類。芯片技術(shù)的發(fā)展使得高端設(shè)備也成為嵌入式系統(tǒng)。這類系統(tǒng)通常具體和計(jì)算機(jī)主板相似的結(jié)構(gòu),使用的CPU是功能強(qiáng)大的16位和32位微處理器。信息化家電、掌上電腦、機(jī)頂盒、WAP手機(jī),WinCE、PALMOS和Linux便屬于這類操作系統(tǒng)。 嵌入式軟件是數(shù)字化產(chǎn)品的核心,PC的出現(xiàn)使桌面軟件得到了飛速發(fā)展,而數(shù)字化產(chǎn)品的廣泛普及必將為嵌入式軟件產(chǎn)業(yè)的蓬勃發(fā)展提供無窮的推動(dòng)力。操作系統(tǒng)控制著應(yīng)用程序和硬件之間的交互作用,應(yīng)用程序控制著系統(tǒng)的運(yùn)行。 隨著嵌入式應(yīng)用系統(tǒng)架構(gòu)的開發(fā)越來越復(fù)雜,嵌入式操作系統(tǒng)軟件的開發(fā)往往開始得很晚,導(dǎo)致軟硬件的
22、集成被推遲,所以,很可能導(dǎo)致研發(fā)出有設(shè)計(jì)錯(cuò)誤的產(chǎn)品,錯(cuò)失市場機(jī)會(huì),造成設(shè)計(jì)反復(fù)、成本高昂等問題。因此,軟件成為設(shè)計(jì)開發(fā)的關(guān)鍵,軟件需要在標(biāo)準(zhǔn)化平臺上運(yùn)行,軟件發(fā)展需要工具支持,軟件發(fā)展不斷促進(jìn)標(biāo)準(zhǔn)的建立,如MIPI、OpenGL、JSR184等。 1.2 本課題研究的目的和意義 嵌入式操作系統(tǒng)是嵌入式系統(tǒng)發(fā)展到一定階段的產(chǎn)物,是為了滿足日益復(fù)雜的嵌入式系統(tǒng)設(shè)計(jì)的要求而產(chǎn)生的。隨著微處理器功能的不斷提升,嵌入式操作系統(tǒng)的應(yīng)用范圍也變得越來越強(qiáng)大。對基于特定嵌入式操作系統(tǒng)上的軟件設(shè)計(jì)研究已成為了近年來的熱點(diǎn),并且對于嵌入式操作系統(tǒng)在實(shí)際工程中的推廣應(yīng)用有著重要的意義。本課題研究在存儲器資源受限
23、,但應(yīng)用非常廣泛的8位單片機(jī)(以C8051F040為例)中移入嵌入式µC/OS-Ⅱ操作系統(tǒng),為8位單片機(jī)的應(yīng)用提供新的空間。 2 µC/OS-Ⅱ嵌入式實(shí)時(shí)操作系統(tǒng) 2.1 選擇µC/OS-Ⅱ的原因 µC/OS是一個(gè)實(shí)時(shí)操作系統(tǒng),是由Jean J.Labrosse于1992年首先設(shè)計(jì)編寫的。1999年,Labrosse又編寫了µC/OS-Ⅱ。該操作系統(tǒng)是一個(gè)高度簡潔、可ROM固化、可裁剪、實(shí)現(xiàn)搶先式實(shí)時(shí)多任務(wù)的操作系統(tǒng)內(nèi)核,可用于各種微處理機(jī)系統(tǒng)。µC/OS-Ⅱ可管理多達(dá)64個(gè)任務(wù),
24、并可提供如下服務(wù): (1)信號燈 (2)互斥式信號燈 (3)事件標(biāo)志 (4)消息隊(duì)列 (5)任務(wù)管理 (6)存儲塊管理 (7)定時(shí)管理 實(shí)時(shí)執(zhí)行體一般包括一套支持實(shí)時(shí)系統(tǒng)所必需的機(jī)制。在嵌入式應(yīng)用中,這一套機(jī)制被稱為實(shí)時(shí)執(zhí)行體或?qū)崟r(shí)操作系統(tǒng)內(nèi)核。操作系統(tǒng)就是一個(gè)實(shí)時(shí)執(zhí)行體。可裁剪的體系結(jié)構(gòu)是指一個(gè)軟件系統(tǒng)能夠支持多種應(yīng)用而無需在接口上做很大的變動(dòng)。因此,可以開發(fā)出成本低、品種多的軟件產(chǎn)品。 µC/OS-Ⅱ的特點(diǎn)如下: (1) 開放的源代碼 (2) 可移植性:絕大部分用ANSI C寫,和硬件相關(guān)的用匯編語言寫。 (3) 可固化性:只要有合適的軟件工具就可以
25、81;C/OS-Ⅱ嵌入到產(chǎn)品中去。 (4) 可裁剪性:產(chǎn)品可以只調(diào)用很少的µC/OS-Ⅱ,這樣可以減少存儲空間,這是依靠條件編譯來實(shí)現(xiàn)的。 (5) 占先式:µC/OS-Ⅱ是運(yùn)行就緒條件下優(yōu)先級最高的任務(wù)。 (6) 多任務(wù):µC/OS-Ⅱ可以管理64個(gè)任務(wù),8個(gè)給系統(tǒng)。 (7) 可確定性:µC/OS-Ⅱ函數(shù)調(diào)用與服務(wù)執(zhí)行時(shí)間是可知的。 (8) 任務(wù)棧:使用µC/OS-Ⅱ??臻g校驗(yàn)函數(shù)可以確定任務(wù)有多少棧空間。 (9) 系統(tǒng)服務(wù):µC/OS-Ⅱ提供例如郵箱、信號量、消息隊(duì)列等系統(tǒng)服務(wù)。 (10) 中斷管理:中斷足以使正在執(zhí)行
26、的任務(wù)暫時(shí)掛起。 (11) 穩(wěn)定性和可靠性:µC/OS-Ⅱ是基于µC/OS的,已有幾百個(gè)商業(yè)應(yīng)用。 對于國內(nèi)大多數(shù)使用8051系列單片機(jī)的用戶來說,µC/OS-Ⅱ具有很高的性價(jià)比,很適合這樣的嵌入式應(yīng)用。µC/OS-Ⅱ是基于優(yōu)先級的搶占式實(shí)時(shí)多任務(wù)操作系統(tǒng),具有如下特點(diǎn):開放源代碼,可移植性,可裁剪性,良好的穩(wěn)定性和可靠性。 µC/OS-Ⅱ很容易地移植到各種各樣的CPU平臺上,只要這一種微處理機(jī)能滿足以下條件即可:具有堆棧指針,可執(zhí)行CPU內(nèi)部寄存器的入棧、出棧指令;所使用的C編譯器支持內(nèi)嵌匯編指令,或者C編譯器支持可擴(kuò)展、可連接匯編模塊
27、,使得中斷控制能夠在C語言匯總實(shí)現(xiàn)。 µC/OS-Ⅱ可以在絕大多數(shù)的8位、16位、32位,甚至是64位的微處理機(jī)系統(tǒng)或數(shù)字信號處理器系統(tǒng)中運(yùn)行。 2.2 µC/OS-Ⅱ操作系統(tǒng)內(nèi)容簡介 2.2.1 內(nèi)核結(jié)構(gòu) 就像所有的實(shí)時(shí)內(nèi)核一樣,µC/OS-Ⅱ 需要在存取代碼核心區(qū)時(shí)禁止中斷,在存取完成后再將中斷重新打開。禁止中斷是為了保護(hù)核心區(qū)代碼,以免出現(xiàn)多個(gè)任務(wù)或中斷服務(wù)程序同時(shí)進(jìn)入該代碼區(qū)。中斷禁止時(shí)間是實(shí)時(shí)內(nèi)核的一項(xiàng)最重要的指標(biāo),因?yàn)樗绊懼到y(tǒng)對實(shí)時(shí)事件的響應(yīng)能力。 µC/OS-Ⅱ試圖將這段中斷禁止時(shí)間減至最小。但是,這在很大程度上還取決于系統(tǒng)的
28、CPU結(jié)構(gòu),以及編譯器生成的代碼質(zhì)量。CPU通常提供禁止/允許中斷的匯編指令,而用戶的編譯器必須支持從C語言中直接執(zhí)行這種操作。有一些編譯器允許用戶在C原碼中插入?yún)R編語句,這樣,就使得插入允許和禁止中斷的指令非常方便。 為了將由于上述編譯器的差異而導(dǎo)致的中斷設(shè)置差異隱藏起來,µC/OS-Ⅱ了兩個(gè)宏來實(shí)現(xiàn)對中斷的允許和禁止:OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )。這兩個(gè)宏的實(shí)現(xiàn)是由CPU決定的,它們在os_cpu.h的頭文件中定義,每種CPU都會(huì)在os_cpu.h中移植實(shí)現(xiàn)這個(gè)宏。 OS_ENTER_CRITICAL( )和OS_EXIT_C
29、RTICAL( )可以有三種不同的實(shí)現(xiàn)方法。具體使用哪種,取決于用戶的CPU能力。用戶可通過#define OS_CRITICAL_METHOD 來定義選用一種實(shí)現(xiàn)方法。 第一種方法:#define OS_CRITICAL_METHOD1 這也是最簡單的一種實(shí)現(xiàn)OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )的方法。如果用戶在中斷禁止的情況下調(diào)用了一個(gè)µC/OS-Ⅱ函數(shù),而在從一個(gè)µC/OS-Ⅱ函數(shù)返回時(shí),中斷將被允許。但是,如果用戶在調(diào)用µC/OS-Ⅱ之前已禁止了中斷,而一般在調(diào)用返回以后仍要求禁止中斷。 第二種方法:#def
30、ine OS_CRITICAL_METHOD2 這種實(shí)現(xiàn)方法在實(shí)現(xiàn)OS_ENTER_CRITICAL( )時(shí),是將禁止的中斷狀態(tài)保留在堆棧中,然后禁止中斷。而OS_EXIT_CRTICAL( )的實(shí)現(xiàn)只需要簡單地將中斷狀態(tài)從堆棧中恢復(fù)出來。通過這種方案,無論是在中斷禁止時(shí),還是中斷允許時(shí)調(diào)用µC/OS-Ⅱ服務(wù),都可以在該調(diào)用前后保留中斷狀態(tài)。 第三種方法:# define OS_CRITICAL_METHOD3 有些編譯器提供了一些功能擴(kuò)展,允許用戶獲取CPU狀態(tài)字,并可以將它存入函數(shù)的局部變量中。µC/OS-Ⅱ代碼主要由C語言實(shí)現(xiàn),而C語言中的數(shù)據(jù)類型一般與硬件平臺
31、所對應(yīng)的編譯器有關(guān)。為了實(shí)現(xiàn)在各種硬件平臺上的可移植性,µC/OS-Ⅱ了自己定義的基本數(shù)據(jù)類型。 µC/OS-Ⅱ庫函數(shù)可以分為以下幾類:任務(wù)控制類:用于實(shí)現(xiàn)µC/OS-Ⅱ啟動(dòng)、任務(wù)管理、任務(wù)調(diào)度、任務(wù)優(yōu)先級設(shè)置等功能。動(dòng)態(tài)內(nèi)存管理類:用于實(shí)現(xiàn)µC/OS-Ⅱ內(nèi)存的動(dòng)態(tài)管理。用µC/OS-Ⅱ時(shí),最好采用µC/OS-Ⅱ的內(nèi)存管理函數(shù)。 為了使μC/OS-Ⅱ能管理用戶任務(wù),用戶必須在建立一個(gè)任務(wù)的時(shí)候,將任務(wù)的起始地址與其它參數(shù)一起傳給下面兩個(gè)函數(shù)中的一個(gè):OSTastCreat或OSTaskCreatExt()。OSTaskCreate
32、Ext()是OSTaskCreate()的擴(kuò)展,擴(kuò)展了一些附加的功能。 圖2.1是μC/OS-Ⅱ控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖。在任一給定的時(shí)刻,任務(wù)的狀態(tài)一定是在這五種狀態(tài)之一。 圖2-1 任務(wù)狀態(tài)轉(zhuǎn)換圖 2.2.2 任務(wù)管理 任務(wù)可以是一個(gè)無限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。這里要注意的是,任務(wù)代碼并不是被真正的刪除了,而只是µC/OS-Ⅱ不再理會(huì)該任務(wù)代碼,所以該任務(wù)代碼不會(huì)再運(yùn)行。任務(wù)看起來與任何C函數(shù)一樣,具有一個(gè)返回類型和一個(gè)參數(shù),只是它從不返回。任務(wù)的返回類型必須被定義成void型。這里提到的函數(shù)可以在OS_TASK文件中找到。其內(nèi)容包括如何在用戶
33、的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的信息。 µC/OS-Ⅱ可以管理多達(dá)64個(gè)任務(wù),并從中保留了四個(gè)最高優(yōu)先級和四個(gè)最低優(yōu)先級的任務(wù)供自己使用,所以用戶可以使用的只有56個(gè)任務(wù)。任務(wù)的優(yōu)先級越高,反映優(yōu)先級的值則越低。在最新的µC/OS-Ⅱ中,任務(wù)的優(yōu)先級數(shù)也可作為任務(wù)的標(biāo)識符使用。想讓µC/OS-Ⅱ管理用戶的任務(wù),用戶必須要先建立任務(wù)。 用戶可以通過傳遞任務(wù)地址和其它參數(shù)到以下兩個(gè)函數(shù)之一來建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()與µC
34、/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展版本,提供了一些附加的功能。用兩個(gè)函數(shù)中的任何一個(gè)都可以建立任務(wù)。 任務(wù)可以在多任務(wù)調(diào)度開始前建立,也可以在其它任務(wù)的執(zhí)行過程中被建立。在開始多任務(wù)調(diào)度(即調(diào)用id參數(shù)為要建立的任務(wù)創(chuàng)建一個(gè)特殊的標(biāo)識符。該參數(shù)在µC/OS以后的升級版本中可能會(huì)用到,但在µC/OS-Ⅱ中還未使用。這個(gè)標(biāo)識符可以擴(kuò)展µC/OS-Ⅱ功能,使它可以執(zhí)行的任務(wù)數(shù)超過目前的64個(gè)。pbos是指向任務(wù)的堆棧棧底的指針,用于堆棧的檢驗(yàn)。stk_size用于指定堆棧成員數(shù)目的容量。也就是說,如果堆棧的入
35、口寬度為4字節(jié)寬,那么stk_size為10000是指堆棧有40000個(gè)字節(jié)。該參數(shù)與pbos一樣,也用于堆棧的檢驗(yàn)。pext是指向用戶附加的數(shù)據(jù)域的指針,用來擴(kuò)展任務(wù)的OS_TCB。每個(gè)任務(wù)都有自己的堆??臻g。堆棧必須聲明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆??臻g(在編譯的時(shí)候分配)也可以動(dòng)態(tài)地分配堆??臻g(在運(yùn)行的時(shí)候分配)。用戶可以用C編譯器提供的malloc()函數(shù)來動(dòng)態(tài)地分配堆??臻g,在動(dòng)態(tài)分配中,用戶要時(shí)刻注意內(nèi)存碎片問題。特別是當(dāng)用戶反復(fù)地建立和刪除任務(wù)時(shí),內(nèi)存堆中可能會(huì)出現(xiàn)大量的內(nèi)存碎片,導(dǎo)致沒有足夠大的一塊連續(xù)內(nèi)存區(qū)域可用作任務(wù)堆棧,這時(shí)mal
36、loc()便無法成功地為任務(wù)分配堆??臻gµC/OS-Ⅱ 支持的處理器的堆棧既可以從上(高地址)往下(低地址)長也可以從下往上長。 用戶在調(diào)用OSTaskCreate()或OSTaskCreateExt()的時(shí)候必須知道堆棧是怎樣長的,因?yàn)橛脩舯仨毜冒讯褩5臈m攤鬟f給以上兩個(gè)函數(shù),當(dāng)OS_CPU.H文件中的OS_STK_GROWTH置為0時(shí),用戶需要將堆棧的最低內(nèi)存地址傳遞給任務(wù)創(chuàng)建函數(shù)。任務(wù)所需的堆棧的容量是由應(yīng)用程序指定的。用戶在指定堆棧大小的時(shí)候必須考慮任務(wù)所調(diào)用的所有函數(shù)的嵌套情況,任務(wù)所調(diào)用的所有函數(shù)會(huì)分配的局部變量的數(shù)目,以及所有可能的中斷服務(wù)例程嵌套的堆棧需求。另外,堆
37、棧必須能儲存所有的CPU寄存器。有時(shí)候決定任務(wù)實(shí)際所需的堆??臻g大小是很有必要的。因?yàn)檫@樣用戶就可以避免為任務(wù)分配過多的堆??臻g,從而減少自己的應(yīng)用程序代碼所需的RAM(內(nèi)存)數(shù)量。µC/OS-Ⅱ提供的OSTaskStkChk()函數(shù)可以提供這種有價(jià)值的信息。 為了使用µC/OS-Ⅱ的堆棧檢驗(yàn)功能,必須要 做以下幾件事情:在OS_CFG.H文件中設(shè)OS_TASK_CREATE_EXT為1。用OSTaskCreateExt()建立任務(wù),并給予任務(wù)比實(shí)際需要更多的內(nèi)存空間。在OSTaskCreateExt()中,將參數(shù)opt設(shè)置為OS_TASK_OPT_STK_CHK+OS_
38、TASK_OPT_STK_CLR。將想檢驗(yàn)的任務(wù)的優(yōu)先級作為OSTaskStkChk()的參數(shù)并調(diào)用之。OSTaskStkChk()順著堆棧的棧底開始計(jì)算空閑的堆??臻g大小,具體實(shí)現(xiàn)方法是統(tǒng)計(jì)儲存值為0的連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)儲存值不為0的堆棧入口。注意堆棧入口的儲存值在進(jìn)行檢驗(yàn)時(shí)使用的是堆棧的數(shù)據(jù)類型。 有時(shí)候刪除任務(wù)是很有必要的。刪除任務(wù),是說任務(wù)將返回并處于休眠狀態(tài),并不是說任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被µC/OS-Ⅱ調(diào)用。任務(wù)的刪除意味著:它的任務(wù)控制塊從OSTCBList鏈表中移到OSTCBFreeList,這樣時(shí)鐘節(jié)拍函數(shù)中就不會(huì)處理它了,這樣調(diào)度把它
39、置入就緒表的可能性就沒了;如果它已經(jīng)處于就緒表中,那么它將被移出,這樣調(diào)度器函數(shù)就不會(huì)處理它,這樣它被調(diào)度運(yùn)行的機(jī)會(huì)就沒了;在建立任務(wù)的時(shí)候會(huì)分配給任務(wù)一個(gè)優(yōu)先級。在程序運(yùn)行期間,用戶可以通過調(diào)用OSTaskChangePrio()來改變?nèi)蝿?wù)的優(yōu)先級。換句話說,就是µC/OS-Ⅱ允許動(dòng)態(tài)的改變?nèi)蝿?wù)的優(yōu)先級。 用戶不能改變空閑任務(wù)的優(yōu)先級,但可以改變調(diào)用本函數(shù)的任務(wù)或者其它任務(wù)的優(yōu)先級。為了改變調(diào)用本函數(shù)的任務(wù)的優(yōu)先級,可以指定該任務(wù)當(dāng)前的優(yōu)先級或OS_PRIO_SELF,OSTaskChangePrio()會(huì)決定該任務(wù)的優(yōu)先級。用戶還必須指定任務(wù)的新優(yōu)先級。因?yàn)?#181;C/OS
40、-Ⅱ不允許多個(gè)任務(wù)具有相同的優(yōu)先級,所以O(shè)STaskChangePrio()需要檢驗(yàn)新優(yōu)先級是否是合法的。 2.2.3 時(shí)間管理 µC/OS-Ⅱ要求提供定時(shí)中斷來實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能。這個(gè)定時(shí)中斷叫做時(shí)鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至100次。時(shí)鐘節(jié)拍的實(shí)際頻率是由用戶的應(yīng)用程序決定的。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的負(fù)荷就越重。時(shí)鐘的 中斷服務(wù)子程序和節(jié)時(shí)鐘節(jié)函數(shù)OSTimeTick——該函數(shù)用于通知µC/OS-Ⅱ發(fā)生了時(shí)鐘節(jié)拍中斷。這里主要講述五個(gè)與時(shí)鐘節(jié)拍有關(guān)的系統(tǒng)服務(wù): (1) OSTimeDly() (2) OSTimeDlyHMSM() (3) OSTim
41、eDlyResume() (4) OSTimeGet() (5) OSTimeSet() µC/OS-Ⅱ提供了這樣一個(gè)系統(tǒng)服務(wù):申請?jiān)摲?wù)的任務(wù)可以延時(shí)一段時(shí)間,這段時(shí)間的長短是用時(shí)鐘節(jié)拍的數(shù)目來確定的。實(shí)現(xiàn)這個(gè)系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該函數(shù)會(huì)使µC/OS-Ⅱ進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個(gè)優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時(shí)間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延時(shí),它就會(huì)馬上進(jìn)入就緒狀態(tài)。只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級時(shí),它才會(huì)立即運(yùn)行。 OSTimeDly()
42、雖然是一個(gè)非常有用的函數(shù),但應(yīng)用程序需要知道延時(shí)時(shí)間對應(yīng)的時(shí)鐘節(jié)拍的數(shù)目。用戶可以使用定義全局常數(shù)OS_TICKS_PER_SEC的方法將時(shí)間轉(zhuǎn)換成時(shí)鐘段,但這種方法有時(shí)顯得比較愚笨。如果增加了OSTimeDlyHMSM()函數(shù)后,用戶就可以按小時(shí)(H)、分(M)、秒(S)和毫秒(m)來定義時(shí)間了,這樣會(huì)顯得更自然些。與OSTimeDly()一樣,調(diào)用OSTimeDlyHMSM()函數(shù)也會(huì)使µC/OS-Ⅱ進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個(gè)優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDlyHMSM()后,一旦規(guī)定的時(shí)間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延
43、時(shí),它就會(huì)馬上處于就緒態(tài)。同樣,只有當(dāng)該任務(wù)在所有就緒態(tài)任務(wù)中具有最高的優(yōu)先級時(shí),它才會(huì)立即運(yùn)行。 µC/OS-Ⅱ允許用戶結(jié)束延時(shí)正處于延時(shí)期的任務(wù)。延時(shí)的任務(wù)可以不等待延時(shí)期滿,而是通過其它任務(wù)取消延時(shí)來使自己處于就緒態(tài)。這可以通過調(diào)用OSTimeDlyResume()和指定要恢復(fù)的任務(wù)的優(yōu)先級來完成。實(shí)際上,OSTimeDlyResume()也可以喚醒正在等待事件的任務(wù),雖然這一點(diǎn)并沒有提到過。在這種情況下,等待事件發(fā)生的任務(wù)會(huì)考慮是否終止等待事件。 無論時(shí)鐘節(jié)拍何時(shí)發(fā)生,µC/OS-Ⅱ都會(huì)將一個(gè)32位的計(jì)數(shù)器加1。這個(gè)計(jì)數(shù)器在用戶調(diào)用OSStart()初始化多任務(wù)
44、和4,294,967,295個(gè)節(jié)拍執(zhí)行完一遍的時(shí)候從0開始計(jì)數(shù)。在時(shí)鐘節(jié)拍的頻率等于100Hz的時(shí)候,這個(gè)32位的計(jì)數(shù)器每隔497天就重新開始計(jì)數(shù)。 用戶可以通過調(diào)用OSTimeGet()來獲得該計(jì)數(shù)器的當(dāng)前值。也可以通過調(diào)用OSTimeSet()來改變該計(jì)數(shù)器的值注意,在訪問OSTime的時(shí)候中斷是關(guān)掉的。這是因?yàn)樵诖蠖鄶?shù)8位處理器上增加和拷貝一個(gè)32位的數(shù)都需要數(shù)條指令,這些指令一般都需要一次執(zhí)行完畢,而不能被中斷等因素打斷。 2.2.4 任務(wù)間通信與同步 在µC/OS-Ⅱ中,有多種方法可以保護(hù)任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通訊。這里只講其中的兩種:一是利用宏OS_
45、ENTER_CRITICAL()和OS_EXIT_CRITICAL()來關(guān)閉中斷和打開中斷。當(dāng)兩個(gè)任務(wù)或者一個(gè)任務(wù)和一個(gè)中斷服務(wù)子程序共享某些數(shù)據(jù)時(shí),可以采用這種方法。二是利用函數(shù)OSSchedLock()和OSSchedUnlock()對µC/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開鎖。用這種方法也可以實(shí)現(xiàn)數(shù)據(jù)的共享。 圖2-2 事件控制塊的使用 圖2.2表示任務(wù)和中斷服務(wù)子程序之間是如何進(jìn)行通訊的。一個(gè)任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊ECB(Event Control Blocks)來向另外的任務(wù)發(fā)信號。這里,所有的信號都被看成是事件(Event)。這也說明為什么上
46、面把用于通訊的數(shù)據(jù)結(jié)構(gòu)叫做事件控制塊。 一個(gè)任務(wù)還可以等待另一個(gè)任務(wù)或中斷服務(wù)子程序給它發(fā)送信號。只有任務(wù)可以等待事件發(fā)生,中斷服務(wù)子程序是不能這樣做的。對于處于等待狀態(tài)的任務(wù),還可以給它指定一個(gè)最長等待時(shí)間,以此來防止因?yàn)榈却氖录]有發(fā)生而無限期地等下去。 多個(gè)任務(wù)可以同時(shí)等待同一個(gè)事件的發(fā)生。在這種情況下,當(dāng)該事件發(fā)生后,所有等待該事件的任務(wù)中,優(yōu)先級最高的任務(wù)得到了該事件并進(jìn)入就緒狀態(tài),準(zhǔn)備執(zhí)行。上面講到的事件,可以是信號量、郵箱或者消息隊(duì)列等。當(dāng)事件控制塊是一個(gè)信號量時(shí),任務(wù)可以等待它,也可以給它發(fā)送消息。 2.2.5 內(nèi)存管理 在ANSI
47、 C中可以用malloc()和free()兩個(gè)函數(shù)動(dòng)態(tài)地分配內(nèi)存和釋放內(nèi)存。但是,在嵌入式實(shí)時(shí)操作系統(tǒng)中,多次這樣做會(huì)把原來很大的一塊連續(xù)內(nèi)存區(qū)域,逐漸地分割成許多非常小而且彼此又不相鄰的內(nèi)存區(qū)域,也就是內(nèi)存碎片。由于這些碎片的大量存在,使得程序到后來連非常小的內(nèi)存也分配不到。在任務(wù)堆棧中,講過用malloc()函數(shù)來分配堆棧時(shí),也討論過內(nèi)存碎片的問題。另外,由于內(nèi)存管理算法的原因,malloc()和free()函數(shù)執(zhí)行時(shí)間是不確定的。 在µC/OS-Ⅱ中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個(gè)分區(qū)中包含有整數(shù)個(gè)大小相同的內(nèi)存塊。利用這種機(jī)制,µC/OS-Ⅱ 對mal
48、loc()和free()函數(shù)進(jìn)行了改進(jìn),使得它們可以分配和釋放固定大小的內(nèi)存塊。這樣一來,malloc()和free()函數(shù)的執(zhí)行時(shí)間也是固定的了。 如圖2.3,在一個(gè)系統(tǒng)中可以有多個(gè)內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬于的內(nèi)存分區(qū)。 顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片問題就得到了解決。為了便于內(nèi)存的管理,在µC/OS-Ⅱ中使用內(nèi)存控制塊(memory control blocks)的數(shù)據(jù)結(jié)構(gòu)來跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中的每個(gè)內(nèi)存分區(qū)都有它自己的內(nèi)存控制塊。 圖2-3 內(nèi)存
49、分區(qū) 3 C8051F系列單片機(jī)的特點(diǎn) 3.1 C8051F系列單片機(jī)的特點(diǎn) Cygnal公司推出的C8051F系列單片機(jī)將80C51系列單片機(jī)從MCU推向了SOC(片上系列)時(shí)代,其主要特點(diǎn)是: ⑴指令運(yùn)行速度大大提高。C8051F系列采用CIP-51的CPU模式,指令以時(shí)鐘周期為運(yùn)行單位。與8051相比,相同的時(shí)鐘下,單周期指令運(yùn)行速度為原來的12倍;全指令集平均運(yùn)行速度為原來的9.5倍。 ⑵I/O從固定方式到交叉開關(guān)配置。C8051F系列采用開關(guān)網(wǎng)絡(luò)以硬件方式實(shí)現(xiàn)I/O端口的靈活配置。在這種通過交叉開關(guān)配置的I/O端口系統(tǒng)中,單片機(jī)外部為通用I/O口,內(nèi)
50、部有輸入/輸出的電路單元,通過相應(yīng)的配置寄存器控制的交叉開關(guān)配置到所選擇的端口上。 ⑶為單片機(jī)提供了一個(gè)完善的時(shí)鐘系統(tǒng)。當(dāng)程序運(yùn)行時(shí),可實(shí)現(xiàn)內(nèi)外時(shí)鐘的動(dòng)態(tài)切換。 ⑷從傳統(tǒng)的仿真調(diào)試到基于JTAG接口的在系統(tǒng)調(diào)試。C8051F的JTAG接口不僅支持FLASH ROM的讀/寫操作及非侵入式在系統(tǒng)調(diào)試,而且它的JTAG邏輯還為在系統(tǒng)測試提供了邊界掃描功能。 ⑸從引腳復(fù)位到多源復(fù)位。C8051F的多復(fù)位源提供了上電復(fù)位、掉電復(fù)位、外部引腳復(fù)位、軟件復(fù)位、時(shí)鐘檢測復(fù)位、比較0復(fù)位、WDT復(fù)位和引腳配置復(fù)位。眾多的復(fù)位源為保障系統(tǒng)的安全、操作的靈活以及零功耗系統(tǒng)設(shè)計(jì)帶來極大的好處。 3.2 C80
51、51F040的性能概述 C8051F040在一個(gè)芯片內(nèi)集成了構(gòu)成單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有的模擬和數(shù)字外設(shè)及其他功能部件。它的供電電壓為2.7~3.6V,帶有內(nèi)部可編程振蕩器。 C8051F040的A/D轉(zhuǎn)換部分包括:一個(gè)12位ADCO子系統(tǒng),可以測量12路外部輸入和1路內(nèi)部溫度傳感器輸出,最高轉(zhuǎn)換速度為100KS/s;一個(gè)8位ADC1子系統(tǒng),可以測量8路外部輸入,最高轉(zhuǎn)換速度為500KS/s。C8051F040的ADC有單端輸入和差分輸入兩種測量方式,另外它還集成了跟蹤保持電路和可編程窗口檢測器。同時(shí),C8051F040有兩個(gè)12位電壓方式DAC。每個(gè)DAC的輸出擺幅均為0
52、~VREF(對應(yīng)的輸入碼范圍是0x000~0Xfff)。 C8051F040的內(nèi)核采用流水線指令結(jié)構(gòu),70%的指令的執(zhí)行時(shí)間為1個(gè)或2個(gè)系統(tǒng)時(shí)鐘周期,它的最高時(shí)鐘頻率可達(dá)25MHz。同時(shí),它具有64KB的FLASH,可以進(jìn)行在系統(tǒng)編程,扇區(qū)大小512B,另外,它還有64KB的外部數(shù)據(jù)存儲器接口,可以編程為復(fù)用和非復(fù)用方式。 C8051F040有8B寬的端口I/O,所有口線均耐5V電壓。它可以同時(shí)使用SMBus,SPI以及2個(gè)UART串口。另外,它還有可編程的16位計(jì)數(shù)器/定時(shí)器陣列,5個(gè)捕捉/比較模塊,5個(gè)通用16位計(jì)數(shù)器/定時(shí)器以及專用的看門狗定時(shí)器。 除上述功能外,C8051F040
53、還集成了BOTSH-CAN,它兼容CAN技術(shù)規(guī)范2。0A和2.0B,主要由CAN內(nèi)核、消息RAM(獨(dú)立于CIP-51的RAM)、消息處理單元和控制寄存器組成。CAN內(nèi)核由CAN協(xié)議控制器和負(fù)責(zé)消息收發(fā)的串行/并行轉(zhuǎn)換RX/TX移位寄存器組成。消息RAM用于存儲消息目標(biāo)和每個(gè)目標(biāo)的仲裁掩碼。這種CAM處理器有32個(gè)隨意配置為發(fā)送和接收的消息目標(biāo),并且每一個(gè)消息目標(biāo)都有它自己的識別掩碼,所有的數(shù)據(jù)傳輸和接收濾波都是由CAN控制器完成的,而不是由CIP-51來完成。通常CAN內(nèi)核不能直接訪問消息RAM,而必須通過接口寄存器IFI或IF2來訪問。另外,CIP-51的SFR并不能直接訪問CAN內(nèi)部寄存器
54、的所有單元,其配置CAN、消息目標(biāo)、讀取CAN狀態(tài)以及獲取接收數(shù)據(jù)、傳遞發(fā)送數(shù)據(jù)都由SFR中的6個(gè)特殊寄存器來完成,其中CANOCN、CANODAL、CANOADR 3個(gè)寄存器主要用來訪問修改其他不能直接訪問的CAN內(nèi)部寄存器,消息處理單元?jiǎng)t用于根據(jù)寄存器中的消息來控制CAN內(nèi)核中移位寄存器和消息RAM之間的數(shù)據(jù)傳遞,同時(shí),它還可用來管理中斷的產(chǎn)生。 4 µC/OS-Ⅱ在C8051F040上的移植 4.1 µC/OS-Ⅱ硬件平臺的選擇 Cygna
55、l公司(現(xiàn)Sillicon Labs公司)的C8051F系列單片機(jī)是完全集成的混合信號系統(tǒng)級芯片(SOC),具有與MCS-51指令集完全兼容的高速 CIP-51內(nèi)核。C8051F系列單片機(jī)在一個(gè)芯片內(nèi)部集成了構(gòu)成一個(gè)單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有模擬和數(shù)字外設(shè)及其他功能部件,它是完全集成的混合信號片上系統(tǒng)型MCU,具有64個(gè)數(shù)字I/O引腳,C8051F040具有CAN2.0B控制器、 4352字節(jié)(256+4k)內(nèi)部集成的數(shù)據(jù)RAM和64k字節(jié)在系統(tǒng)可編程FLASH程序存儲器。C8051F040是C8051F04X系列單片機(jī)中一種。其特性如下: (1)高速、流水線結(jié)構(gòu)的8051兼容
56、的CIP-51內(nèi)核 (2)控制器局域網(wǎng)控制器,有32個(gè)消息對象,每個(gè)消息對象有自己的標(biāo)識 (3)全速、非侵入式的系統(tǒng)調(diào)試接口 (4)真正12位、100ksps的ADC,帶PGA和8通道模擬多路開關(guān) (5)允許高電壓差分放大器輸入到12/10位ADC,增益可編程 (6)真正8位500ksps的ADC,帶PGA和8通道模擬多路開關(guān) (7)兩個(gè)12位DAC,具有可編程數(shù)據(jù)更新方式 (8)64KB可在系統(tǒng)編程的FLASH存儲器 (9)4352字節(jié)的片內(nèi)RAM (10)可尋址64KB地址空間的外部數(shù)據(jù)存儲器接口 (11)硬件實(shí)現(xiàn)的SPI、SMBus/12C和兩個(gè)UART串行接口 (
57、12)5個(gè)通用的16位定時(shí)器 (13)具有6個(gè)捕捉/比較模塊的可編程計(jì)數(shù)器/定時(shí)器陣列 (14)片內(nèi)看門狗定時(shí)器、VDD監(jiān)視器和溫度傳感器 具有片內(nèi)VDD監(jiān)視器、看門狗定時(shí)器和時(shí)鐘振蕩器的C8051F040MCU是真正能獨(dú)立工作的片上系統(tǒng)。所有模擬和數(shù)字外設(shè)均可由用戶固件使能/禁止和配置。另外,µC/OS-Ⅱ的運(yùn)行平臺需要一定的條件如下: (1)由與µC/OS-Ⅱ主要是由C語言編寫的,所以要求所選CPU的C編譯器能夠產(chǎn)生可重入的代碼。 (2)所用C語言提供對中斷控制的方法。 (3)所用CPU支持中斷,并且能夠產(chǎn)生定時(shí)中斷,以便實(shí)現(xiàn)任務(wù)的切換; (4)所用CPU
58、支持具有足夠深度的硬件堆棧; (5)所用CPU的指令系統(tǒng)中,應(yīng)含有可將堆棧指針和其他CPU寄存器的內(nèi)容入棧/出棧,或?qū)懭?讀出內(nèi)存的指令。 由此可見,C8051F040是適合實(shí)時(shí)操作系統(tǒng)µC/OS-Ⅱ的移植的。選擇C8051F040單片機(jī)是正確的。 4.2 µC/OS-Ⅱ移植內(nèi)容 開發(fā)環(huán)境選用Keil集成開發(fā)環(huán)境,它支持C8051F040單片機(jī),并且具有很高的編譯效率,目標(biāo)板是基于C8051F040的系統(tǒng)。C8051F040單片機(jī)有JTAG接口,通過Keil開發(fā)環(huán)境與目標(biāo)板進(jìn)行在系統(tǒng)編程和非侵入式的全速、在系統(tǒng)調(diào)試。由µC/OS-Ⅱ的軟件體系結(jié)構(gòu)如圖4.1
59、可知,進(jìn)行µC/OS-Ⅱ的移植只需要修改與硬件有關(guān)的OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三個(gè)文件。但是Keil編譯器的缺省編譯的函數(shù)是不具有可重入性,而系統(tǒng)的多任務(wù)必須要求具有可重人性,因此必須對在多任務(wù)時(shí)調(diào)用的所有函數(shù)后面都加上reentrant關(guān)鍵字,告訴編譯器該函數(shù)具有可重人性。下面將論述對與硬件相關(guān)的三個(gè)文件的修改。 要將µc/OS-Ⅱ移植到一個(gè)新的硬件平臺上,應(yīng)該了解µc/OS-Ⅱ操作系統(tǒng)的總體結(jié)構(gòu)。 圖 4-1 µc/OS-Ⅱ體系結(jié)構(gòu)示意圖 4.2.1 OS_CPU.H頭文件的修改 OS_CPU.H
60、 文件中包含與處理器相關(guān)的常量,宏和結(jié)構(gòu)體的定義。由于不同的處理器有不同的字長,µC/OS-Ⅱ的移植需要重新定義一系列的數(shù)據(jù)結(jié)構(gòu)。需要改動(dòng)部分主要是有三點(diǎn): 1、C8051F單片機(jī)的數(shù)據(jù)字節(jié)是8位,故堆棧的數(shù)據(jù)類型OS-STK定義為8位。修改如下: typedef unsigned char OS-STK; 2、C8051F單片機(jī)的堆棧指針SP的生長是從低字節(jié)到高字節(jié),也就是從下往上增長,因此應(yīng)這樣修改: #define OS-STK-GROWTH 0; 3、采用的關(guān)中斷的方式是,先將中斷禁止?fàn)顟B(tài)保存到堆棧中,然后禁止中斷。所以開關(guān)中斷應(yīng)修改如下: #define OS
61、_ENTER_CRITICAL() EA=0 //關(guān)中斷 #define OS_EXIT_CRITICAL() EA=1 //開中斷 4、µC/OS-Ⅱ在8051上的移植采用程序調(diào)用代替,和在8086上的堆棧格式相同: #define OS_TASK_SW() OSCtXSW(); 4.2.2 OS_CPU_A.ASM匯編文件的修改 µC/OS-Ⅱ的移植需要用戶改寫OS_CPU_A.ASM中的四個(gè)函數(shù): (1)OSStartHighRdy() (2)OSCtxSw() (3)OSIntCtxSw() (4)OSTickISR(
62、) 該文件主要包括任務(wù)切換的處理和系統(tǒng)時(shí)鐘的定時(shí),主要的子程序函數(shù)有OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()和OSTickISR()。 因?yàn)閰R編子程序?qū)⒈籆函數(shù)所調(diào)用,因此,匯編程序的編寫必須遵循Keil C函數(shù)和匯編子程序的調(diào)用規(guī)則。當(dāng)µC/OS-Ⅱ啟動(dòng)多任務(wù)時(shí),必須調(diào)用OS- StartHighRdy()函數(shù)使處于最高優(yōu)先級的任務(wù)處于就緒態(tài)并且開始運(yùn)行。 OSStartHighRdy()函數(shù)從處于最高優(yōu)先級任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,從該堆棧中恢復(fù)所有的寄存器內(nèi)容,并把OSRunning置為TRUE后返回執(zhí)行該任務(wù)。系統(tǒng)直接進(jìn)
63、行任務(wù)切換或者應(yīng)用程序通過處理器軟件陷阱指令執(zhí)行時(shí),系統(tǒng)將通過調(diào)用OSC-txSw()函數(shù)完成上下文的切換。 該函數(shù)完成的操作是:將通用寄存器壓人硬件堆棧,從當(dāng)前任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,把當(dāng)前硬件堆棧里的內(nèi)容全部保存到任務(wù)堆棧中,同時(shí)保存仿真堆棧指針?C-XBP的值,接著把等待任務(wù)中最高優(yōu)先級的任務(wù)置為當(dāng)前任務(wù),最后執(zhí)行OSStartHigh-Rdy()函數(shù)相同的操作。系統(tǒng)每次中斷執(zhí)行中斷服務(wù)子程序后,如果沒有更高優(yōu)先級的等待任務(wù)就返回,否則執(zhí)行中斷任務(wù)切換函數(shù)OSIntCtxSw()。該函數(shù)跟OSCtxSw()函數(shù)相似,只是由于是從中斷服務(wù)子程序中進(jìn)入的,必須在開始調(diào)整堆棧指
64、針SP,去掉在調(diào)用OSIntExit(),OSIntCtxSw()過程中壓人堆棧的多余內(nèi)容。 因?yàn)?#181;C/OS-Ⅱ的系統(tǒng)調(diào)度和系統(tǒng)定時(shí)都是由系統(tǒng)節(jié)拍決定的,因此需要提供周期性的系統(tǒng)時(shí)鐘信號,µC/OS-Ⅱ建議使用10ms~200ms的系統(tǒng)時(shí)鐘。由于系統(tǒng)在每一個(gè)節(jié)拍都要檢查是否由高優(yōu)先級的任務(wù)在等待,如果有就進(jìn)行系統(tǒng)的任務(wù)切換,這樣當(dāng)每個(gè)時(shí)鐘周期越短,系統(tǒng)的任務(wù)切換就越頻繁,CPU的負(fù)荷就越重,從而引起系統(tǒng)不能正常工作。相反,當(dāng)時(shí)鐘周期越長,任務(wù)切換的頻率越低,導(dǎo)致不能充分應(yīng)用CPU,任務(wù)的響應(yīng)時(shí)間變長。所以要根據(jù)系統(tǒng)負(fù)荷的大小合理的確定系統(tǒng)時(shí)鐘,在這里采用定時(shí)器0作為產(chǎn)生2
65、0ms的系統(tǒng)定時(shí),系統(tǒng)定時(shí)是一個(gè)中斷服務(wù)子程序。該中斷服務(wù)子程序是OSTicklSR()函數(shù),當(dāng)定時(shí)器0發(fā)生中斷時(shí)進(jìn)入中斷服務(wù)子程序。 如圖4.2可知,任務(wù)堆棧中保存的仿真堆棧與系統(tǒng)硬件堆棧相向生長,中間為空閑間隔,顯然µC/OS-Ⅱ原型提供的堆棧檢測函數(shù)OSTaskStrChk()將失效。 因?yàn)樗腥蝿?wù)堆棧使用相同大小的空間,所以占用空間最大的任務(wù)函數(shù)的空間大小為防真堆棧的空間大小。這里將任務(wù)堆棧空間大小用宏定義在OS_CFG.H文件中,可以根據(jù)實(shí)際情況作以下修改。 圖4-2 堆棧結(jié)構(gòu)圖 (1)OSCtxSw(),該函數(shù)完成的是任務(wù)級切換工作,其目的是為了保證處理器永遠(yuǎn)
66、運(yùn)行就緒表中優(yōu)先級最高的任務(wù)。 Void OSCtxSw(void) ﹛ 通過自定義的宏操作PUSHALL,將寄存器R0-R7、DRH、DPL、B、ACC和PSW保存草硬件堆棧中;得到硬件堆棧長度=SP-#OSStkStart; 根據(jù)長度值將內(nèi)容通過字節(jié)拷貝的方式復(fù)制到當(dāng)前任務(wù)堆棧中,同時(shí)將仿真指針?C_XBP的值也復(fù)制到任務(wù)堆棧中; 調(diào)用用戶定義函數(shù)OSTaskSwHook(); OSTCBCur=OSTCBHighRy; OSPrioCur=OSPrioHighRy; 通過變量OSTCBCur->OSTCBStkPtr獲得要恢復(fù)的任務(wù)的任務(wù)堆棧指針; 將任務(wù)堆棧中內(nèi)
67、容復(fù)制到硬件堆棧中,恢復(fù)SP和?C_XBP的值; 執(zhí)行宏操作POPALL恢復(fù)處理器寄存器的值; 執(zhí)行中斷返回指令RETI; ﹜ (2)OSStartHighRdy(),該函數(shù)是由操作系統(tǒng)啟動(dòng)函數(shù)OSStart()調(diào)用的,功能是使系統(tǒng)能即使運(yùn)行優(yōu)先級最高的就緒任務(wù)。對C8051F040而言,處理如下: Void OSStarHighRdy(void) ﹛ 調(diào)用用戶可自定義的函數(shù)OSTashSWHook(); 獲取任務(wù)堆棧指針:任務(wù)堆棧指針=OSTCBH個(gè)時(shí)Rdy->OSTCBSskPtr; 要恢復(fù)內(nèi)容的長度=任務(wù)堆棧起駛地址中存放的內(nèi)容; 根據(jù)長度,通過字節(jié)拷貝將內(nèi)容
68、復(fù)制到系統(tǒng)idata空間中的硬件堆棧內(nèi); 恢復(fù)硬件堆棧指針SP和?C_XBP的值; OSRunning=TRUE; 對硬件堆棧執(zhí)行自定義的宏操作PUSHALL,恢復(fù)寄存器R0-R7、DRH、DPL、B、ACC和PSW 執(zhí)行中斷返回指令RETI; ﹜ (3)OSIntCtxSw(),與OSCtxSw()相比較,OSIntCtxSw()也是執(zhí)行任務(wù)切換的,但它是在中斷服務(wù)程序中執(zhí)行的。修改如下: Void OSIntCtxSw(void) ﹛ 調(diào)整硬件堆棧指針SP的值;SP=SP-4; 將當(dāng)前硬件堆棧中的所有內(nèi)容以及變量?C_XBP都復(fù)制到當(dāng)前任務(wù)的任務(wù)堆棧中; 調(diào)用用戶可定義的函數(shù)OSTaskSwHook(); OSTCBCur=OSTCH個(gè)時(shí)Ry; OSPrioCur=OSPrioHighRy; 通過變量OSTCBCur->OSTCBStkPtr獲得要恢復(fù)的任務(wù)的任務(wù)堆棧
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備采購常用的四種評標(biāo)方法
- 車間員工管理須知(應(yīng)知應(yīng)會(huì))
- 某公司設(shè)備維護(hù)保養(yǎng)工作規(guī)程
- 某企業(yè)潔凈車間人員進(jìn)出管理規(guī)程
- 企業(yè)管理制度之5S管理的八個(gè)口訣
- 標(biāo)準(zhǔn)化班前會(huì)的探索及意義
- 某企業(yè)內(nèi)審員考試試題含答案
- 某公司環(huán)境保護(hù)考核管理制度
- 現(xiàn)場管理的定義
- 員工培訓(xùn)程序
- 管理制度之生產(chǎn)廠長的職責(zé)與工作標(biāo)準(zhǔn)
- 某公司各級專業(yè)人員環(huán)保職責(zé)
- 企業(yè)管理制度:5S推進(jìn)與改善工具
- XXX公司環(huán)境風(fēng)險(xiǎn)排查及隱患整改制度
- 生產(chǎn)車間基層管理要點(diǎn)及建議