




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目 錄摘要.1關(guān)鍵詞.1Abstract.2Key words.21. 緒論.31.1 嵌入式操作系統(tǒng).31.1.1 嵌入式系統(tǒng)的發(fā)展?fàn)顩r.31.1.2 嵌入式操作系統(tǒng)的分類和發(fā)展.51.2 本課題研究的目的和意義.52. C/OS-嵌入式實(shí)時操作系統(tǒng).62.1 選擇C/OS-的原因.62.2 C/OS-操作系統(tǒng)內(nèi)容簡介.72.2.1 內(nèi)核結(jié)構(gòu).72.2.2 任務(wù)管理.82.2.3 時間管理.102.2.4 任務(wù)間通信與同步.11 2.2.5 內(nèi)存管理.123. C8051F系列單片機(jī)的特點(diǎn).133.1 C8051F系列單片機(jī)的特點(diǎn).133.2 C8051F040的性能概述.134. C/OS
2、-在C8051F040上的移植.154.1 C/OS-硬件平臺的選擇.154.2 C/OS-移植內(nèi)容.154.2.1 OS_CPUH頭文件的修改.164.2.2 OS_CPU_AASM匯編文件的修改174.3 C/OS-在C8051F040上的運(yùn)行測試.194.4 基于C/OS-的C8051F040運(yùn)用系統(tǒng)開發(fā).215. 結(jié)論.22參考文獻(xiàn)23嵌入式操作系統(tǒng)C/OS-II在C8051F040單片機(jī)中移植研究摘要:隨著現(xiàn)代控制技術(shù)、多媒體技術(shù)與Internet的應(yīng)用和普及,以計(jì)算機(jī)技術(shù)、芯技術(shù)和軟件技術(shù)為核心的數(shù)字化技術(shù)得到了迅猛發(fā)展,掀起了一場數(shù)字化技術(shù)革命,促使消費(fèi)電子、計(jì)算機(jī)、通信一體化趨
3、勢的步伐加快,嵌入式系統(tǒng)技術(shù)成為發(fā)展重點(diǎn)。 本文主要介紹了嵌入式實(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ù)管理,時間管理,任務(wù)間通信與同步和內(nèi)存管理;第三部分,介紹了C8051F系列單片機(jī)的特點(diǎn);第四部分,詳細(xì)的敘述了C/OS-移植的過程。 可以預(yù)見,由于C/OS-具有不可替代的優(yōu)點(diǎn),C/OS-將在以后的嵌入式系統(tǒng)設(shè)計(jì)中得到廣泛應(yīng)用。關(guān)鍵詞:C/OS-;C8051F040;嵌入式實(shí)時操作系統(tǒng);移植Embedded operating system C / OS-II in the C8
4、051F040 MCU TransplantationAbstract:With application and popularization of modern control technology , multimedia 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
5、 technical revolution, impel paces of consuming electron , computer , integrated trend of communication to 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
6、secondly, introduced C/OS- II operating system elements, including core structure, task management, 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- tra
7、nsplant process.It can be predicted that as C/OS- irreplaceable advantages C/OS- will be at a later embedded systems design widely used.Key words:C/OS-;C8051F040;Embedded Real-time OS;Porting1 緒論1.1 嵌入式操作系統(tǒng)1.1.1 嵌入式系統(tǒng)的發(fā)展?fàn)顩r嵌入式系統(tǒng)誕生于微型機(jī)時代,隨著微型機(jī)技術(shù)的完善和發(fā)展,微型機(jī)出現(xiàn)了嵌入式應(yīng)用環(huán)境,傳統(tǒng)電子設(shè)備的智能化不同于通用機(jī)的嵌入式應(yīng)用?,F(xiàn)代計(jì)算機(jī)有通用計(jì)算機(jī)和嵌
8、入式計(jì)算機(jī)兩大分支,他們是兩個完全不同的計(jì)算機(jī)技術(shù)領(lǐng)域。通用計(jì)算機(jī)系統(tǒng)是高速海量數(shù)值計(jì)算,嵌入式系統(tǒng)是對象嵌入和智能化控制。分工后兩個分支呈現(xiàn)高速發(fā)展的態(tài)勢。嵌入式系統(tǒng)是嵌入到對象體系中的專用計(jì)算機(jī)應(yīng)用系統(tǒng)。其嵌入性是指非獨(dú)立存在的物理空間,專用性是滿足對象體系要求的軟硬件裁剪,它是智能化的工具保證。由于傳統(tǒng)電子系統(tǒng)的嵌入式應(yīng)用環(huán)境是超小型、超低價、高可靠的嵌入式計(jì)算機(jī),這就需要尋求芯片化的徹底解決辦法,單片微型計(jì)算機(jī)應(yīng)運(yùn)而生,走單片機(jī)獨(dú)立發(fā)展道路成了必然選擇。一個嵌入式系統(tǒng)包括硬件和軟件兩部分。硬件包括微處理器、存儲器及外設(shè)器件等,而軟件包括操作系統(tǒng)軟件和應(yīng)用程序。為了提高系統(tǒng)性能,除了需要
9、對硬件和軟件進(jìn)行優(yōu)化外,還會引入總線的概念。與普通計(jì)算機(jī)系統(tǒng)類似,嵌入式系統(tǒng)仍然包括微處理器、存儲設(shè)備和輸入、輸出設(shè)備,但是它與一般的PC系統(tǒng)還有很大的區(qū)別。一般來講,嵌入式系統(tǒng)在功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約。作為二十世紀(jì)人類最偉大的發(fā)明之一,計(jì)算機(jī)在期待著第五代出現(xiàn)的同時,也邁入了其另一個新階段后PC時代。后PC時代的到來,使得人們開始越來越多的接觸到一個新的概念嵌入式產(chǎn)品,如手機(jī)、PDA、數(shù)控機(jī)床等。其實(shí),嵌入式操作系統(tǒng)很早以前就出現(xiàn)就得到了廣泛應(yīng)用,如微型計(jì)算器、PC中的鍵盤,都是最典型最簡單的嵌入式系統(tǒng)。如果說PC機(jī)的出現(xiàn)構(gòu)建了信息產(chǎn)業(yè)
10、的框架,推動了整個信息產(chǎn)業(yè)和人類文明的發(fā)展和前進(jìn),那么嵌入式系統(tǒng)的發(fā)展將會更加完善這個框架,并成為信息產(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ù)和各個行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,這一點(diǎn)就決定了它必然是一個技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。綜觀嵌入式系
11、統(tǒng)技術(shù)的發(fā)展,大致經(jīng)歷了以下三個階段:(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)志的嵌入式系統(tǒng)。隨著并行技術(shù)、先進(jìn)控制、流水線、強(qiáng)有力的中斷系統(tǒng)、操作系統(tǒng)等技術(shù)的發(fā)
12、展,特別是在微處理器問世以后,嵌入式系統(tǒng)得到了真正的發(fā)展。微處理器的廣泛應(yīng)用形成了一個廣闊的嵌入式應(yīng)用市場。這一階段系統(tǒng)的主要特點(diǎn)是計(jì)算機(jī)硬件出現(xiàn)了高可靠、低功耗的嵌入式處理器;同時,各類商業(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ù)和Internet技術(shù)為標(biāo)志的嵌入式系統(tǒng)。微電子技術(shù)發(fā)展迅速,SOC技術(shù)使嵌入式系統(tǒng)越來越小,功
13、能越來越強(qiáng)。隨著NOC的出現(xiàn),以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益密切,嵌入式系統(tǒng)的網(wǎng)絡(luò)化趨勢將推動其更加快速的發(fā)展。近幾年嵌入式操作系統(tǒng)技術(shù)的發(fā)展有以下幾個顯著的變化:(1)新的處理器越來越多,一方面,嵌入式操作系統(tǒng)自身結(jié)構(gòu)的設(shè)計(jì)更易于移植,以便在短時間內(nèi)支持更多種微處理器;另一方面,系統(tǒng)應(yīng)能使用驅(qū)動程序開發(fā)與配置環(huán)境,造就一個新的BSP和驅(qū)動程序結(jié)構(gòu),以適應(yīng)微處理器不斷升級變化所產(chǎn)生的需求。(2)開放源碼之風(fēng)已波及嵌入式系統(tǒng)廠家。數(shù)量相當(dāng)多的嵌入式系統(tǒng)廠家出售產(chǎn)品時,就附加了源程序代碼并含生產(chǎn)版稅。(3)后PC時代更多的產(chǎn)品使用嵌入式操作系統(tǒng),它們對實(shí)時性要求并不高
14、。(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)存需求定制成每個應(yīng)用所需的系統(tǒng)。(8)嵌入式系統(tǒng)的多媒體化和網(wǎng)絡(luò)化方向趨勢。(9)基于知識的嵌入式系統(tǒng)也已開始出現(xiàn)。 隨著因特網(wǎng)技術(shù)的成熟、帶寬的提高,ICP在網(wǎng)上提供的信息內(nèi)容日趨豐富、應(yīng)用項(xiàng)目多種多樣,嵌入式電子設(shè)
15、備的功能不再單一,電氣結(jié)構(gòu)也更復(fù)雜。后PC時代,計(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)橐子谑褂?,攜帶方便、價格便宜而得到了快速發(fā)展,PDA與手機(jī)已呈現(xiàn)融合趨勢。用掌上電腦或PDA上網(wǎng),人們可以隨時隨地獲取信息。新的手持設(shè)備將使無線互聯(lián)訪問成為更加普遍的現(xiàn)象。與互聯(lián)網(wǎng)聯(lián)接,結(jié)合音頻應(yīng)用,如MP3功能,將會促使移動計(jì)算設(shè)備市場創(chuàng)造新的銷售記錄。整合手機(jī)模塊,為移動計(jì)算設(shè)備提供語音功能,也將是大勢所趨。1
16、.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ā)動機(jī)系統(tǒng)和防報死系統(tǒng)、民用微波爐、洗衣機(jī)、冰箱等。這類應(yīng)用客觀上要求操作系統(tǒng)體積小,實(shí)時性強(qiáng),開放源代碼的實(shí)時操作系統(tǒng)C/OS就屬這類。芯片技術(shù)的發(fā)展使得高端設(shè)備也成為嵌入式系統(tǒng)。這類系統(tǒng)通常具體和計(jì)算機(jī)主板相似的結(jié)構(gòu),使用的CPU是功能強(qiáng)大的16位和
17、32位微處理器。信息化家電、掌上電腦、機(jī)頂盒、WAP手機(jī),WinCE、PALMOS和Linux便屬于這類操作系統(tǒng)。嵌入式軟件是數(shù)字化產(chǎn)品的核心,PC的出現(xiàn)使桌面軟件得到了飛速發(fā)展,而數(shù)字化產(chǎn)品的廣泛普及必將為嵌入式軟件產(chǎn)業(yè)的蓬勃發(fā)展提供無窮的推動力。操作系統(tǒng)控制著應(yīng)用程序和硬件之間的交互作用,應(yīng)用程序控制著系統(tǒng)的運(yùn)行。隨著嵌入式應(yīng)用系統(tǒng)架構(gòu)的開發(fā)越來越復(fù)雜,嵌入式操作系統(tǒng)軟件的開發(fā)往往開始得很晚,導(dǎo)致軟硬件的集成被推遲,所以,很可能導(dǎo)致研發(fā)出有設(shè)計(jì)錯誤的產(chǎn)品,錯失市場機(jī)會,造成設(shè)計(jì)反復(fù)、成本高昂等問題。因此,軟件成為設(shè)計(jì)開發(fā)的關(guān)鍵,軟件需要在標(biāo)準(zhǔn)化平臺上運(yùn)行,軟件發(fā)展需要工具支持,軟件發(fā)展不斷
18、促進(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)用有著重要的意義。本課題研究在存儲器資源受限,但應(yīng)用非常廣泛的8位單片機(jī)(以C8051F040為例)中移入嵌入式C/OS-操作系統(tǒng),為8位單片機(jī)的應(yīng)用提供新的空間。2 C/OS-嵌入式實(shí)時操作系統(tǒng)2.1 選擇C/OS-的原因C/OS是一個實(shí)
19、時操作系統(tǒng),是由Jean J.Labrosse于1992年首先設(shè)計(jì)編寫的。1999年,Labrosse又編寫了C/OS-。該操作系統(tǒng)是一個高度簡潔、可ROM固化、可裁剪、實(shí)現(xiàn)搶先式實(shí)時多任務(wù)的操作系統(tǒng)內(nèi)核,可用于各種微處理機(jī)系統(tǒng)。C/OS-可管理多達(dá)64個任務(wù),并可提供如下服務(wù):(1)信號燈(2)互斥式信號燈(3)事件標(biāo)志(4)消息隊(duì)列(5)任務(wù)管理(6)存儲塊管理(7)定時管理實(shí)時執(zhí)行體一般包括一套支持實(shí)時系統(tǒng)所必需的機(jī)制。在嵌入式應(yīng)用中,這一套機(jī)制被稱為實(shí)時執(zhí)行體或?qū)崟r操作系統(tǒng)內(nèi)核。操作系統(tǒng)就是一個實(shí)時執(zhí)行體??刹眉舻捏w系結(jié)構(gòu)是指一個軟件系統(tǒng)能夠支持多種應(yīng)用而無需在接口上做很大的變動。因此
20、,可以開發(fā)出成本低、品種多的軟件產(chǎn)品。C/OS-的特點(diǎn)如下:(1) 開放的源代碼(2) 可移植性:絕大部分用ANSI C寫,和硬件相關(guān)的用匯編語言寫。(3) 可固化性:只要有合適的軟件工具就可以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個任務(wù),8個給系統(tǒng)。(7) 可確定性:C/OS-函數(shù)調(diào)用與服務(wù)執(zhí)行時間是可知的。(8) 任務(wù)棧:使用C/OS-??臻g校驗(yàn)函數(shù)可以確定任務(wù)有多少??臻g。(9) 系統(tǒng)服務(wù):C/OS-提供例
21、如郵箱、信號量、消息隊(duì)列等系統(tǒng)服務(wù)。(10) 中斷管理:中斷足以使正在執(zhí)行的任務(wù)暫時掛起。(11) 穩(wěn)定性和可靠性:C/OS-是基于C/OS的,已有幾百個商業(yè)應(yīng)用。對于國內(nèi)大多數(shù)使用8051系列單片機(jī)的用戶來說,C/OS-具有很高的性價比,很適合這樣的嵌入式應(yīng)用。C/OS-是基于優(yōu)先級的搶占式實(shí)時多任務(wù)操作系統(tǒng),具有如下特點(diǎn):開放源代碼,可移植性,可裁剪性,良好的穩(wěn)定性和可靠性。C/OS-很容易地移植到各種各樣的CPU平臺上,只要這一種微處理機(jī)能滿足以下條件即可:具有堆棧指針,可執(zhí)行CPU內(nèi)部寄存器的入棧、出棧指令;所使用的C編譯器支持內(nèi)嵌匯編指令,或者C編譯器支持可擴(kuò)展、可連接匯編模塊,使得
22、中斷控制能夠在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í)時內(nèi)核一樣,C/OS- 需要在存取代碼核心區(qū)時禁止中斷,在存取完成后再將中斷重新打開。禁止中斷是為了保護(hù)核心區(qū)代碼,以免出現(xiàn)多個任務(wù)或中斷服務(wù)程序同時進(jìn)入該代碼區(qū)。中斷禁止時間是實(shí)時內(nèi)核的一項(xiàng)最重要的指標(biāo),因?yàn)樗绊懼到y(tǒng)對實(shí)時事件的響應(yīng)能力。C/OS-試圖將這段中斷禁止時間減至最小。但是,這在很大程度上還取決于系統(tǒng)的CPU結(jié)構(gòu),以及編譯器生成的代碼質(zhì)量。CPU通常提供禁止/允許中斷的匯編指令,而用
23、戶的編譯器必須支持從C語言中直接執(zhí)行這種操作。有一些編譯器允許用戶在C原碼中插入?yún)R編語句,這樣,就使得插入允許和禁止中斷的指令非常方便。為了將由于上述編譯器的差異而導(dǎo)致的中斷設(shè)置差異隱藏起來,C/OS-了兩個宏來實(shí)現(xiàn)對中斷的允許和禁止:OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )。這兩個宏的實(shí)現(xiàn)是由CPU決定的,它們在os_cpu.h的頭文件中定義,每種CPU都會在os_cpu.h中移植實(shí)現(xiàn)這個宏。OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )可以有三種不同的實(shí)現(xiàn)方法。具體使用哪種,取決于用戶的CPU能力。用戶可通過#defin
24、e OS_CRITICAL_METHOD 來定義選用一種實(shí)現(xiàn)方法。第一種方法:#define OS_CRITICAL_METHOD1這也是最簡單的一種實(shí)現(xiàn)OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )的方法。如果用戶在中斷禁止的情況下調(diào)用了一個C/OS-函數(shù),而在從一個C/OS-函數(shù)返回時,中斷將被允許。但是,如果用戶在調(diào)用C/OS-之前已禁止了中斷,而一般在調(diào)用返回以后仍要求禁止中斷。第二種方法:#define OS_CRITICAL_METHOD2這種實(shí)現(xiàn)方法在實(shí)現(xiàn)OS_ENTER_CRITICAL( )時,是將禁止的中斷狀態(tài)保留在堆棧中,然后禁止中斷。而O
25、S_EXIT_CRTICAL( )的實(shí)現(xiàn)只需要簡單地將中斷狀態(tài)從堆棧中恢復(fù)出來。通過這種方案,無論是在中斷禁止時,還是中斷允許時調(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ù)類型一般與硬件平臺所對應(yīng)的編譯器有關(guān)。為了實(shí)現(xiàn)在各種硬件平臺上的可移植性,C/OS-了自己定義的基本數(shù)據(jù)類型。C/OS-庫函數(shù)可以分為以下幾類:任務(wù)控制類:用于實(shí)現(xiàn)C/OS-啟動、任務(wù)管理、任務(wù)調(diào)度、任務(wù)優(yōu)先級設(shè)置等
26、功能。動態(tài)內(nèi)存管理類:用于實(shí)現(xiàn)C/OS-內(nèi)存的動態(tài)管理。用C/OS-時,最好采用C/OS-的內(nèi)存管理函數(shù)。為了使C/OS-能管理用戶任務(wù),用戶必須在建立一個任務(wù)的時候,將任務(wù)的起始地址與其它參數(shù)一起傳給下面兩個函數(shù)中的一個:OSTastCreat或OSTaskCreatExt()。OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展,擴(kuò)展了一些附加的功能。圖2.1是C/OS-控制下的任務(wù)狀態(tài)轉(zhuǎn)換圖。在任一給定的時刻,任務(wù)的狀態(tài)一定是在這五種狀態(tài)之一。圖2-1 任務(wù)狀態(tài)轉(zhuǎn)換圖2.2.2 任務(wù)管理任務(wù)可以是一個無限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。這里要注意的是,任務(wù)代碼
27、并不是被真正的刪除了,而只是C/OS-不再理會該任務(wù)代碼,所以該任務(wù)代碼不會再運(yùn)行。任務(wù)看起來與任何C函數(shù)一樣,具有一個返回類型和一個參數(shù),只是它從不返回。任務(wù)的返回類型必須被定義成void型。這里提到的函數(shù)可以在OS_TASK文件中找到。其內(nèi)容包括如何在用戶的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的信息。C/OS-可以管理多達(dá)64個任務(wù),并從中保留了四個最高優(yōu)先級和四個最低優(yōu)先級的任務(wù)供自己使用,所以用戶可以使用的只有56個任務(wù)。任務(wù)的優(yōu)先級越高,反映優(yōu)先級的值則越低。在最新的C/OS-中,任務(wù)的優(yōu)先級數(shù)也可作為任務(wù)的標(biāo)識符使用。想讓C/OS-管理用
28、戶的任務(wù),用戶必須要先建立任務(wù)。用戶可以通過傳遞任務(wù)地址和其它參數(shù)到以下兩個函數(shù)之一來建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()與C/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展版本,提供了一些附加的功能。用兩個函數(shù)中的任何一個都可以建立任務(wù)。任務(wù)可以在多任務(wù)調(diào)度開始前建立,也可以在其它任務(wù)的執(zhí)行過程中被建立。在開始多任務(wù)調(diào)度(即調(diào)用id參數(shù)為要建立的任務(wù)創(chuàng)建一個特殊的標(biāo)識符。該參數(shù)在C/OS以后的升級版本中可能會用到,但在C/OS-中還未使用。這個標(biāo)識符可以擴(kuò)展C/OS-功能,使它可
29、以執(zhí)行的任務(wù)數(shù)超過目前的64個。pbos是指向任務(wù)的堆棧棧底的指針,用于堆棧的檢驗(yàn)。stk_size用于指定堆棧成員數(shù)目的容量。也就是說,如果堆棧的入口寬度為4字節(jié)寬,那么stk_size為10000是指堆棧有40000個字節(jié)。該參數(shù)與pbos一樣,也用于堆棧的檢驗(yàn)。pext是指向用戶附加的數(shù)據(jù)域的指針,用來擴(kuò)展任務(wù)的OS_TCB。每個任務(wù)都有自己的堆??臻g。堆棧必須聲明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆??臻g(在編譯的時候分配)也可以動態(tài)地分配堆??臻g(在運(yùn)行的時候分配)。用戶可以用C編譯器提供的malloc()函數(shù)來動態(tài)地分配堆棧空間,在動態(tài)分配中,用戶要時刻
30、注意內(nèi)存碎片問題。特別是當(dāng)用戶反復(fù)地建立和刪除任務(wù)時,內(nèi)存堆中可能會出現(xiàn)大量的內(nèi)存碎片,導(dǎo)致沒有足夠大的一塊連續(xù)內(nèi)存區(qū)域可用作任務(wù)堆棧,這時malloc()便無法成功地為任務(wù)分配堆??臻gC/OS- 支持的處理器的堆棧既可以從上(高地址)往下(低地址)長也可以從下往上長。用戶在調(diào)用OSTaskCreate()或OSTaskCreateExt()的時候必須知道堆棧是怎樣長的,因?yàn)橛脩舯仨毜冒讯褩5臈m攤鬟f給以上兩個函數(shù),當(dāng)OS_CPU.H文件中的OS_STK_GROWTH置為0時,用戶需要將堆棧的最低內(nèi)存地址傳遞給任務(wù)創(chuàng)建函數(shù)。任務(wù)所需的堆棧的容量是由應(yīng)用程序指定的。用戶在指定堆棧大小的時候必須考
31、慮任務(wù)所調(diào)用的所有函數(shù)的嵌套情況,任務(wù)所調(diào)用的所有函數(shù)會分配的局部變量的數(shù)目,以及所有可能的中斷服務(wù)例程嵌套的堆棧需求。另外,堆棧必須能儲存所有的CPU寄存器。有時候決定任務(wù)實(shí)際所需的堆棧空間大小是很有必要的。因?yàn)檫@樣用戶就可以避免為任務(wù)分配過多的堆??臻g,從而減少自己的應(yīng)用程序代碼所需的RAM(內(nèi)存)數(shù)量。C/OS-提供的OSTaskStkChk()函數(shù)可以提供這種有價值的信息。為了使用C/OS-的堆棧檢驗(yàn)功能,必須要 做以下幾件事情:在OS_CFG.H文件中設(shè)OS_TASK_CREATE_EXT為1。用OSTaskCreateExt()建立任務(wù),并給予任務(wù)比實(shí)際需要更多的內(nèi)存空間。在OST
32、askCreateExt()中,將參數(shù)opt設(shè)置為OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR。將想檢驗(yàn)的任務(wù)的優(yōu)先級作為OSTaskStkChk()的參數(shù)并調(diào)用之。OSTaskStkChk()順著堆棧的棧底開始計(jì)算空閑的堆棧空間大小,具體實(shí)現(xiàn)方法是統(tǒng)計(jì)儲存值為0的連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)儲存值不為0的堆棧入口。注意堆棧入口的儲存值在進(jìn)行檢驗(yàn)時使用的是堆棧的數(shù)據(jù)類型。 有時候刪除任務(wù)是很有必要的。刪除任務(wù),是說任務(wù)將返回并處于休眠狀態(tài),并不是說任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被C/OS-調(diào)用。任務(wù)的刪除意味著:它的任務(wù)控制塊從OSTCBList鏈表中
33、移到OSTCBFreeList,這樣時鐘節(jié)拍函數(shù)中就不會處理它了,這樣調(diào)度把它置入就緒表的可能性就沒了;如果它已經(jīng)處于就緒表中,那么它將被移出,這樣調(diào)度器函數(shù)就不會處理它,這樣它被調(diào)度運(yùn)行的機(jī)會就沒了;在建立任務(wù)的時候會分配給任務(wù)一個優(yōu)先級。在程序運(yùn)行期間,用戶可以通過調(diào)用OSTaskChangePrio()來改變?nèi)蝿?wù)的優(yōu)先級。換句話說,就是C/OS-允許動態(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()會決定該任務(wù)的優(yōu)
34、先級。用戶還必須指定任務(wù)的新優(yōu)先級。因?yàn)镃/OS-不允許多個任務(wù)具有相同的優(yōu)先級,所以O(shè)STaskChangePrio()需要檢驗(yàn)新優(yōu)先級是否是合法的。2.2.3 時間管理C/OS-要求提供定時中斷來實(shí)現(xiàn)延時與超時控制等功能。這個定時中斷叫做時鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至100次。時鐘節(jié)拍的實(shí)際頻率是由用戶的應(yīng)用程序決定的。時鐘節(jié)拍的頻率越高,系統(tǒng)的負(fù)荷就越重。時鐘的中斷服務(wù)子程序和節(jié)時鐘節(jié)函數(shù)OSTimeTick該函數(shù)用于通知C/OS-發(fā)生了時鐘節(jié)拍中斷。這里主要講述五個與時鐘節(jié)拍有關(guān)的系統(tǒng)服務(wù):(1) OSTimeDly()(2) OSTimeDlyHMSM()(3) OSTimeDlyR
35、esume()(4) OSTimeGet()(5) OSTimeSet()C/OS-提供了這樣一個系統(tǒng)服務(wù):申請?jiān)摲?wù)的任務(wù)可以延時一段時間,這段時間的長短是用時鐘節(jié)拍的數(shù)目來確定的。實(shí)現(xiàn)這個系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該函數(shù)會使C/OS-進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延時,它就會馬上進(jìn)入就緒狀態(tài)。只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級時,它才會立即運(yùn)行。OSTimeDly()雖然是一個非常有用的函數(shù),但應(yīng)用程序需要知道延時時間對
36、應(yīng)的時鐘節(jié)拍的數(shù)目。用戶可以使用定義全局常數(shù)OS_TICKS_PER_SEC的方法將時間轉(zhuǎn)換成時鐘段,但這種方法有時顯得比較愚笨。如果增加了OSTimeDlyHMSM()函數(shù)后,用戶就可以按小時(H)、分(M)、秒(S)和毫秒(m)來定義時間了,這樣會顯得更自然些。與OSTimeDly()一樣,調(diào)用OSTimeDlyHMSM()函數(shù)也會使C/OS-進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDlyHMSM()后,一旦規(guī)定的時間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延時,它就會馬上處于就緒態(tài)。同樣,只有當(dāng)該任務(wù)在所有就緒態(tài)任務(wù)中具有最
37、高的優(yōu)先級時,它才會立即運(yùn)行。C/OS-允許用戶結(jié)束延時正處于延時期的任務(wù)。延時的任務(wù)可以不等待延時期滿,而是通過其它任務(wù)取消延時來使自己處于就緒態(tài)。這可以通過調(diào)用OSTimeDlyResume()和指定要恢復(fù)的任務(wù)的優(yōu)先級來完成。實(shí)際上,OSTimeDlyResume()也可以喚醒正在等待事件的任務(wù),雖然這一點(diǎn)并沒有提到過。在這種情況下,等待事件發(fā)生的任務(wù)會考慮是否終止等待事件。無論時鐘節(jié)拍何時發(fā)生,C/OS-都會將一個32位的計(jì)數(shù)器加1。這個計(jì)數(shù)器在用戶調(diào)用OSStart()初始化多任務(wù)和4,294,967,295個節(jié)拍執(zhí)行完一遍的時候從0開始計(jì)數(shù)。在時鐘節(jié)拍的頻率等于100Hz的時候,這
38、個32位的計(jì)數(shù)器每隔497天就重新開始計(jì)數(shù)。用戶可以通過調(diào)用OSTimeGet()來獲得該計(jì)數(shù)器的當(dāng)前值。也可以通過調(diào)用OSTimeSet()來改變該計(jì)數(shù)器的值注意,在訪問OSTime的時候中斷是關(guān)掉的。這是因?yàn)樵诖蠖鄶?shù)8位處理器上增加和拷貝一個32位的數(shù)都需要數(shù)條指令,這些指令一般都需要一次執(zhí)行完畢,而不能被中斷等因素打斷。2.2.4 任務(wù)間通信與同步在C/OS-中,有多種方法可以保護(hù)任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通訊。這里只講其中的兩種:一是利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來關(guān)閉中斷和打開中斷。當(dāng)兩個任務(wù)或者一個任務(wù)和一個中斷服務(wù)子程序
39、共享某些數(shù)據(jù)時,可以采用這種方法。二是利用函數(shù)OSSchedLock()和OSSchedUnlock()對C/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開鎖。用這種方法也可以實(shí)現(xiàn)數(shù)據(jù)的共享。圖2-2 事件控制塊的使用圖2.2表示任務(wù)和中斷服務(wù)子程序之間是如何進(jìn)行通訊的。一個任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊ECB(Event Control Blocks)來向另外的任務(wù)發(fā)信號。這里,所有的信號都被看成是事件(Event)。這也說明為什么上面把用于通訊的數(shù)據(jù)結(jié)構(gòu)叫做事件控制塊。一個任務(wù)還可以等待另一個任務(wù)或中斷服務(wù)子程序給它發(fā)送信號。只有任務(wù)可以等待事件發(fā)生,中斷服務(wù)子程序是不能這樣做的。對于處于等
40、待狀態(tài)的任務(wù),還可以給它指定一個最長等待時間,以此來防止因?yàn)榈却氖录]有發(fā)生而無限期地等下去。多個任務(wù)可以同時等待同一個事件的發(fā)生。在這種情況下,當(dāng)該事件發(fā)生后,所有等待該事件的任務(wù)中,優(yōu)先級最高的任務(wù)得到了該事件并進(jìn)入就緒狀態(tài),準(zhǔn)備執(zhí)行。上面講到的事件,可以是信號量、郵箱或者消息隊(duì)列等。當(dāng)事件控制塊是一個信號量時,任務(wù)可以等待它,也可以給它發(fā)送消息。 2.2.5 內(nèi)存管理在ANSI C中可以用malloc()和free()兩個函數(shù)動態(tài)地分配內(nèi)存和釋放內(nèi)存。但是,在嵌入式實(shí)時操作系統(tǒng)中,多次這樣做會把原來很大的一塊連續(xù)內(nèi)存區(qū)域,逐漸地分割成許多非常小而且彼此又不相鄰的內(nèi)存區(qū)域,也就是內(nèi)存碎片
41、。由于這些碎片的大量存在,使得程序到后來連非常小的內(nèi)存也分配不到。在任務(wù)堆棧中,講過用malloc()函數(shù)來分配堆棧時,也討論過內(nèi)存碎片的問題。另外,由于內(nèi)存管理算法的原因,malloc()和free()函數(shù)執(zhí)行時間是不確定的。在C/OS-中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個分區(qū)中包含有整數(shù)個大小相同的內(nèi)存塊。利用這種機(jī)制,C/OS- 對malloc()和free()函數(shù)進(jìn)行了改進(jìn),使得它們可以分配和釋放固定大小的內(nèi)存塊。這樣一來,malloc()和free()函數(shù)的執(zhí)行時間也是固定的了。如圖2.3,在一個系統(tǒng)中可以有多個內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同
42、大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時必須重新放回它以前所屬于的內(nèi)存分區(qū)。顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片問題就得到了解決。為了便于內(nèi)存的管理,在C/OS-中使用內(nèi)存控制塊(memory control blocks)的數(shù)據(jù)結(jié)構(gòu)來跟蹤每一個內(nèi)存分區(qū),系統(tǒng)中的每個內(nèi)存分區(qū)都有它自己的內(nèi)存控制塊。圖2-3 內(nèi)存分區(qū)3 C8051F系列單片機(jī)的特點(diǎn)3.1 C8051F系列單片機(jī)的特點(diǎn)Cygnal公司推出的C8051F系列單片機(jī)將80C51系列單片機(jī)從MCU推向了SOC(片上系列)時代,其主要特點(diǎn)是:指令運(yùn)行速度大大提高。C8051F系列采用CIP-51的CPU模式,指令以時鐘周期為運(yùn)行
43、單位。與8051相比,相同的時鐘下,單周期指令運(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)部有輸入/輸出的電路單元,通過相應(yīng)的配置寄存器控制的交叉開關(guān)配置到所選擇的端口上。為單片機(jī)提供了一個完善的時鐘系統(tǒng)。當(dāng)程序運(yùn)行時,可實(shí)現(xiàn)內(nèi)外時鐘的動態(tài)切換。從傳統(tǒng)的仿真調(diào)試到基于JTAG接口的在系統(tǒng)調(diào)試。C8051F的JTAG接口不僅支持FLASH ROM的讀/寫操作及非侵入式在系統(tǒng)調(diào)試,而且它的JTAG邏輯還為在系統(tǒng)測試提
44、供了邊界掃描功能。從引腳復(fù)位到多源復(fù)位。C8051F的多復(fù)位源提供了上電復(fù)位、掉電復(fù)位、外部引腳復(fù)位、軟件復(fù)位、時鐘檢測復(fù)位、比較0復(fù)位、WDT復(fù)位和引腳配置復(fù)位。眾多的復(fù)位源為保障系統(tǒng)的安全、操作的靈活以及零功耗系統(tǒng)設(shè)計(jì)帶來極大的好處。3.2 C8051F040的性能概述C8051F040在一個芯片內(nèi)集成了構(gòu)成單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有的模擬和數(shù)字外設(shè)及其他功能部件。它的供電電壓為2.73.6V,帶有內(nèi)部可編程振蕩器。C8051F040的A/D轉(zhuǎn)換部分包括:一個12位ADCO子系統(tǒng),可以測量12路外部輸入和1路內(nèi)部溫度傳感器輸出,最高轉(zhuǎn)換速度為100KS/s;一個8位ADC1子
45、系統(tǒng),可以測量8路外部輸入,最高轉(zhuǎn)換速度為500KS/s。C8051F040的ADC有單端輸入和差分輸入兩種測量方式,另外它還集成了跟蹤保持電路和可編程窗口檢測器。同時,C8051F040有兩個12位電壓方式DAC。每個DAC的輸出擺幅均為0VREF(對應(yīng)的輸入碼范圍是0x0000Xfff)。C8051F040的內(nèi)核采用流水線指令結(jié)構(gòu),70%的指令的執(zhí)行時間為1個或2個系統(tǒng)時鐘周期,它的最高時鐘頻率可達(dá)25MHz。同時,它具有64KB的FLASH,可以進(jìn)行在系統(tǒng)編程,扇區(qū)大小512B,另外,它還有64KB的外部數(shù)據(jù)存儲器接口,可以編程為復(fù)用和非復(fù)用方式。C8051F040有8B寬的端口I/O,
46、所有口線均耐5V電壓。它可以同時使用SMBus,SPI以及2個UART串口。另外,它還有可編程的16位計(jì)數(shù)器/定時器陣列,5個捕捉/比較模塊,5個通用16位計(jì)數(shù)器/定時器以及專用的看門狗定時器。除上述功能外,C8051F040還集成了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)和每個目標(biāo)的仲裁掩碼。這種CAM處理器有32個隨意配置為發(fā)送和接收的消息目標(biāo),并且每一個消息目標(biāo)都有它自己
47、的識別掩碼,所有的數(shù)據(jù)傳輸和接收濾波都是由CAN控制器完成的,而不是由CIP-51來完成。通常CAN內(nèi)核不能直接訪問消息RAM,而必須通過接口寄存器IFI或IF2來訪問。另外,CIP-51的SFR并不能直接訪問CAN內(nèi)部寄存器的所有單元,其配置CAN、消息目標(biāo)、讀取CAN狀態(tài)以及獲取接收數(shù)據(jù)、傳遞發(fā)送數(shù)據(jù)都由SFR中的6個特殊寄存器來完成,其中CANOCN、CANODAL、CANOADR 3個寄存器主要用來訪問修改其他不能直接訪問的CAN內(nèi)部寄存器,消息處理單元則用于根據(jù)寄存器中的消息來控制CAN內(nèi)核中移位寄存器和消息RAM之間的數(shù)據(jù)傳遞,同時,它還可用來管理中斷的產(chǎn)生。4 C/OS-在C80
48、51F040上的移植4.1 C/OS-硬件平臺的選擇Cygnal公司(現(xiàn)Sillicon Labs公司)的C8051F系列單片機(jī)是完全集成的混合信號系統(tǒng)級芯片(SOC),具有與MCS-51指令集完全兼容的高速 CIP-51內(nèi)核。C8051F系列單片機(jī)在一個芯片內(nèi)部集成了構(gòu)成一個單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有模擬和數(shù)字外設(shè)及其他功能部件,它是完全集成的混合信號片上系統(tǒng)型MCU,具有64個數(shù)字I/O引腳,C8051F040具有CAN2.0B控制器、 4352字節(jié)(256+4k)內(nèi)部集成的數(shù)據(jù)RAM和64k字節(jié)在系統(tǒng)可編程FLASH程序存儲器。C8051F040是C8051F04X系列單片
49、機(jī)中一種。其特性如下:(1)高速、流水線結(jié)構(gòu)的8051兼容的CIP-51內(nèi)核(2)控制器局域網(wǎng)控制器,有32個消息對象,每個消息對象有自己的標(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)兩個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和兩個UA
50、RT串行接口(12)5個通用的16位定時器(13)具有6個捕捉/比較模塊的可編程計(jì)數(shù)器/定時器陣列(14)片內(nèi)看門狗定時器、VDD監(jiān)視器和溫度傳感器具有片內(nèi)VDD監(jiān)視器、看門狗定時器和時鐘振蕩器的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í)現(xiàn)任務(wù)的切換;(4)所用CPU支持具有足夠深度的硬件堆棧;(5)所用CP
51、U的指令系統(tǒng)中,應(yīng)含有可將堆棧指針和其他CPU寄存器的內(nèi)容入棧/出棧,或?qū)懭?讀出內(nèi)存的指令。由此可見,C8051F040是適合實(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可知,進(jìn)行C/OS-的移植只需要修改與硬件有關(guān)的OS_CPUH、OS_CPU_CC、OS_CPU_A
52、ASM三個文件。但是Keil編譯器的缺省編譯的函數(shù)是不具有可重入性,而系統(tǒng)的多任務(wù)必須要求具有可重人性,因此必須對在多任務(wù)時調(diào)用的所有函數(shù)后面都加上reentrant關(guān)鍵字,告訴編譯器該函數(shù)具有可重人性。下面將論述對與硬件相關(guān)的三個文件的修改。要將c/OS-移植到一個新的硬件平臺上,應(yīng)該了解c/OS-操作系統(tǒng)的總體結(jié)構(gòu)。圖 4-1 c/OS-體系結(jié)構(gòu)示意圖4.2.1 OS_CPUH頭文件的修改OS_CPU.H 文件中包含與處理器相關(guān)的常量,宏和結(jié)構(gòu)體的定義。由于不同的處理器有不同的字長,C/OS-的移植需要重新定義一系列的數(shù)據(jù)結(jié)構(gòu)。需要改動部分主要是有三點(diǎn):1、C8051F單片機(jī)的數(shù)據(jù)字節(jié)是8
53、位,故堆棧的數(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_ENTER_CRITICAL() EA=0 /關(guān)中斷#define OS_EXIT_CRITICAL() EA=1 /開中斷4、C/OS-在8051上的移植采用程序調(diào)用代替,和在8086上的堆棧格式相同:#define OS_
54、TASK_SW() OSCtXSW();4.2.2 OS_CPU_AASM匯編文件的修改C/OS-的移植需要用戶改寫OS_CPU_A.ASM中的四個函數(shù):(1)OSStartHighRdy()(2)OSCtxSw()(3)OSIntCtxSw()(4)OSTickISR()該文件主要包括任務(wù)切換的處理和系統(tǒng)時鐘的定時,主要的子程序函數(shù)有OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()和OSTickISR()。因?yàn)閰R編子程序?qū)⒈籆函數(shù)所調(diào)用,因此,匯編程序的編寫必須遵循Keil C函數(shù)和匯編子程序的調(diào)用規(guī)則。當(dāng)C/OS-啟動多任務(wù)時,必須調(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)行任務(wù)切換或者應(yīng)用程序通過處理器軟件陷阱指令執(zhí)行時,系統(tǒng)將通過調(diào)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司商務(wù)用車維修合同范本
- 2025年制動分泵項(xiàng)目合作計(jì)劃書
- 2025年麻將涼席合作協(xié)議書
- 個體建材購銷合同范本
- 單位食堂供應(yīng)合同范例
- 2025年加氣加注設(shè)備項(xiàng)目建議書
- 家政公司家政公司加盟合同范本
- 2025年霍爾汽車點(diǎn)火系統(tǒng)合作協(xié)議書
- 農(nóng)村承包荒地合同范例
- 合同范本面布局
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- 四川政采評審專家入庫考試基礎(chǔ)題復(fù)習(xí)試題
- 鋰離子電池失效分析及后果PFMEA-電子表格版
- 2024解析:第十九章生活用電-基礎(chǔ)練(解析版)
- 古建寺廟施工組織設(shè)計(jì)
- 《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》專題知識培訓(xùn)
- 青海省西寧市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《金融市場與金融工具》課程教學(xué)大綱
- 高維數(shù)據(jù)分析新理論
- 2024年廣東公務(wù)員考試申論試題(省市卷)
- 高中生物課程標(biāo)準(zhǔn)(人教版)
評論
0/150
提交評論