




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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í)時(shí)操作系統(tǒng).62.1 選擇C/OS-的原因.62.2 C/OS-操作系統(tǒng)內(nèi)容簡(jiǎn)介.72.2.1 內(nèi)核結(jié)構(gòu).72.2.2 任務(wù)管理.82.2.3 時(shí)間管理.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-硬件平臺(tái)的選擇.154.2 C/OS-移植內(nèi)容.154.2.1 OS_CPUH頭文件的修改.164.2.2 OS_CPU_AASM匯編文件的修改174.3 C/OS-在C8051F040上的運(yùn)行測(cè)試.194.4 基于C/OS-的C8051F040運(yùn)用系統(tǒng)開(kāi)發(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ā)展,掀起了一場(chǎng)數(shù)字化技術(shù)革命,促使消費(fèi)電子、計(jì)算機(jī)、通信一體化趨
3、勢(shì)的步伐加快,嵌入式系統(tǒng)技術(shù)成為發(fā)展重點(diǎn)。 本文主要介紹了嵌入式實(shí)時(shí)操作系統(tǒng)C/OS-在C8051 F040上的移植過(guò)程。首先,描述了嵌入式系統(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-移植的過(guò)程。 可以預(yù)見(jiàn),由于C/OS-具有不可替代的優(yōu)點(diǎn),C/OS-將在以后的嵌入式系統(tǒng)設(shè)計(jì)中得到廣泛應(yīng)用。關(guān)鍵詞:C/OS-;C8051F040;嵌入式實(shí)時(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ī)時(shí)代,隨著微型機(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ī)兩大分支,他們是兩個(gè)完全不同的計(jì)算機(jī)技術(shù)領(lǐng)域。通用計(jì)算機(jī)系統(tǒng)是高速海量數(shù)值計(jì)算,嵌入式系統(tǒng)是對(duì)象嵌入和智能化控制。分工后兩個(gè)分支呈現(xiàn)高速發(fā)展的態(tài)勢(shì)。嵌入式系統(tǒng)是嵌入到對(duì)象體系中的專用計(jì)算機(jī)應(yīng)用系統(tǒng)。其嵌入性是指非獨(dú)立存在的物理空間,專用性是滿足對(duì)象體系要求的軟硬件裁剪,它是智能化的工具保證。由于傳統(tǒng)電子系統(tǒng)的嵌入式應(yīng)用環(huán)境是超小型、超低價(jià)、高可靠的嵌入式計(jì)算機(jī),這就需要尋求芯片化的徹底解決辦法,單片微型計(jì)算機(jī)應(yīng)運(yùn)而生,走單片機(jī)獨(dú)立發(fā)展道路成了必然選擇。一個(gè)嵌入式系統(tǒng)包括硬件和軟件兩部分。硬件包括微處理器、存儲(chǔ)器及外設(shè)器件等,而軟件包括操作系統(tǒng)軟件和應(yīng)用程序。為了提高系統(tǒng)性能,除了需要
9、對(duì)硬件和軟件進(jìn)行優(yōu)化外,還會(huì)引入總線的概念。與普通計(jì)算機(jī)系統(tǒng)類似,嵌入式系統(tǒng)仍然包括微處理器、存儲(chǔ)設(shè)備和輸入、輸出設(shè)備,但是它與一般的PC系統(tǒng)還有很大的區(qū)別。一般來(lái)講,嵌入式系統(tǒng)在功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約。作為二十世紀(jì)人類最偉大的發(fā)明之一,計(jì)算機(jī)在期待著第五代出現(xiàn)的同時(shí),也邁入了其另一個(gè)新階段后PC時(shí)代。后PC時(shí)代的到來(lái),使得人們開(kāi)始越來(lái)越多的接觸到一個(gè)新的概念嵌入式產(chǎn)品,如手機(jī)、PDA、數(shù)控機(jī)床等。其實(shí),嵌入式操作系統(tǒng)很早以前就出現(xiàn)就得到了廣泛應(yīng)用,如微型計(jì)算器、PC中的鍵盤,都是最典型最簡(jiǎn)單的嵌入式系統(tǒng)。如果說(shuō)PC機(jī)的出現(xiàn)構(gòu)建了信息產(chǎn)業(yè)
10、的框架,推動(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ù)界對(duì)嵌入式系統(tǒng)的普遍看法,嵌入式操作系統(tǒng)被定義為以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(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è)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。綜觀嵌入式系
11、統(tǒng)技術(shù)的發(fā)展,大致經(jīng)歷了以下三個(gè)階段:(1)第一階段是嵌入式技術(shù)的早期階段。嵌入式操作系統(tǒng)的發(fā)展歷史悠久,可以說(shuō)它是伴隨著數(shù)字計(jì)算機(jī)的出現(xiàn)而誕生的。但早期的計(jì)算機(jī)主要器件由電子管、晶體管等組成,體積過(guò)于龐大,因而阻礙了嵌入式系統(tǒng)的發(fā)展。早期系統(tǒng)以功能簡(jiǎn)單的專用計(jì)算機(jī)或單片機(jī)為核心的可編程控制器形式存在,具有監(jiān)測(cè)、伺服、設(shè)備指示等功能。這一階段系統(tǒng)的主要特點(diǎn)是系統(tǒng)結(jié)構(gòu)和功能都相對(duì)單一,處理效率較低,存儲(chǔ)容量較小,幾乎沒(méi)有用戶接口,比較適合于各類專用領(lǐng)域。(2) 第二階段是以嵌入式處理器/控制器和嵌入式操作系統(tǒng)為標(biāo)志的嵌入式系統(tǒng)。隨著并行技術(shù)、先進(jìn)控制、流水線、強(qiáng)有力的中斷系統(tǒng)、操作系統(tǒng)等技術(shù)的發(fā)
12、展,特別是在微處理器問(wèn)世以后,嵌入式系統(tǒng)得到了真正的發(fā)展。微處理器的廣泛應(yīng)用形成了一個(gè)廣闊的嵌入式應(yīng)用市場(chǎng)。這一階段系統(tǒng)的主要特點(diǎn)是計(jì)算機(jī)硬件出現(xiàn)了高可靠、低功耗的嵌入式處理器;同時(shí),各類商業(yè)嵌入式操作系統(tǒng)開(kāi)始出現(xiàn)并得到遜色發(fā)展,嵌入式操作系統(tǒng)能運(yùn)行于各種不同類型的微處理器上,兼容性好;操作系統(tǒng)內(nèi)核小、效率高,并具備高度的模塊化和擴(kuò)展性;具備文件和目錄管理、設(shè)備支持、多任務(wù)、網(wǎng)絡(luò)支持、圖形窗口以及用戶界面等功能;具備大量的應(yīng)用程序接口,開(kāi)發(fā)應(yīng)用程序簡(jiǎn)單;嵌入式應(yīng)用軟件豐富。(3)第三階段是以芯片技術(shù)和Internet技術(shù)為標(biāo)志的嵌入式系統(tǒng)。微電子技術(shù)發(fā)展迅速,SOC技術(shù)使嵌入式系統(tǒng)越來(lái)越小,功
13、能越來(lái)越強(qiáng)。隨著NOC的出現(xiàn),以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益密切,嵌入式系統(tǒng)的網(wǎng)絡(luò)化趨勢(shì)將推動(dòng)其更加快速的發(fā)展。近幾年嵌入式操作系統(tǒng)技術(shù)的發(fā)展有以下幾個(gè)顯著的變化:(1)新的處理器越來(lái)越多,一方面,嵌入式操作系統(tǒng)自身結(jié)構(gòu)的設(shè)計(jì)更易于移植,以便在短時(shí)間內(nèi)支持更多種微處理器;另一方面,系統(tǒng)應(yīng)能使用驅(qū)動(dòng)程序開(kāi)發(fā)與配置環(huán)境,造就一個(gè)新的BSP和驅(qū)動(dòng)程序結(jié)構(gòu),以適應(yīng)微處理器不斷升級(jí)變化所產(chǎn)生的需求。(2)開(kāi)放源碼之風(fēng)已波及嵌入式系統(tǒng)廠家。數(shù)量相當(dāng)多的嵌入式系統(tǒng)廠家出售產(chǎn)品時(shí),就附加了源程序代碼并含生產(chǎn)版稅。(3)后PC時(shí)代更多的產(chǎn)品使用嵌入式操作系統(tǒng),它們對(duì)實(shí)時(shí)性要求并不高
14、。(4)電信設(shè)備、控制系統(tǒng)要求的高可靠性,對(duì)嵌入式系統(tǒng)提出了新的要求。(5)各類通用機(jī)上使用的新技術(shù)、新觀念正逐步移植到嵌入式系統(tǒng)中。(6)各種嵌入式Linux操作系統(tǒng)正迅速發(fā)展,已經(jīng)形成了能與Windows CE等嵌入式操作系統(tǒng)進(jìn)行有力競(jìng)爭(zhēng)的局面。(7)面向定制趨勢(shì),在系統(tǒng)級(jí)整合改造并支持應(yīng)用特制的性能,即在定制商品化的軟硬件上提供高性能和高可靠性系統(tǒng)服務(wù),將操作系統(tǒng)的功能和內(nèi)存需求定制成每個(gè)應(yīng)用所需的系統(tǒng)。(8)嵌入式系統(tǒng)的多媒體化和網(wǎng)絡(luò)化方向趨勢(shì)。(9)基于知識(shí)的嵌入式系統(tǒng)也已開(kāi)始出現(xiàn)。 隨著因特網(wǎng)技術(shù)的成熟、帶寬的提高,ICP在網(wǎng)上提供的信息內(nèi)容日趨豐富、應(yīng)用項(xiàng)目多種多樣,嵌入式電子設(shè)
15、備的功能不再單一,電氣結(jié)構(gòu)也更復(fù)雜。后PC時(shí)代,計(jì)算機(jī)將無(wú)處不在,家用電器將向數(shù)字化和網(wǎng)絡(luò)化發(fā)展,電視機(jī)、冰箱、微波爐、電話等都將嵌入計(jì)算機(jī),并通過(guò)家庭控制中心與Internet聯(lián)接,轉(zhuǎn)變?yōu)橹悄芫W(wǎng)絡(luò)家電,還可以實(shí)現(xiàn)遠(yuǎn)程醫(yī)療、遠(yuǎn)程教育等。中國(guó)擁有最大的手機(jī)用戶,而掌上電腦和PDA等因?yàn)橐子谑褂茫瑪y帶方便、價(jià)格便宜而得到了快速發(fā)展,PDA與手機(jī)已呈現(xiàn)融合趨勢(shì)。用掌上電腦或PDA上網(wǎng),人們可以隨時(shí)隨地獲取信息。新的手持設(shè)備將使無(wú)線互聯(lián)訪問(wèn)成為更加普遍的現(xiàn)象。與互聯(lián)網(wǎng)聯(lián)接,結(jié)合音頻應(yīng)用,如MP3功能,將會(huì)促使移動(dòng)計(jì)算設(shè)備市場(chǎng)創(chuàng)造新的銷售記錄。整合手機(jī)模塊,為移動(dòng)計(jì)算設(shè)備提供語(yǔ)音功能,也將是大勢(shì)所趨。1
16、.1.2 嵌入式操作系統(tǒng)的分類和發(fā)展國(guó)外的嵌入式操作系統(tǒng)有VXWORK、QNX、PALMOS、Windows CE、Linux、C/OS-等,國(guó)內(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)體積小,實(shí)時(shí)性強(qiáng),開(kāi)放源代碼的實(shí)時(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ā)展提供無(wú)窮的推動(dòng)力。操作系統(tǒng)控制著應(yīng)用程序和硬件之間的交互作用,應(yīng)用程序控制著系統(tǒng)的運(yùn)行。隨著嵌入式應(yīng)用系統(tǒng)架構(gòu)的開(kāi)發(fā)越來(lái)越復(fù)雜,嵌入式操作系統(tǒng)軟件的開(kāi)發(fā)往往開(kāi)始得很晚,導(dǎo)致軟硬件的集成被推遲,所以,很可能導(dǎo)致研發(fā)出有設(shè)計(jì)錯(cuò)誤的產(chǎn)品,錯(cuò)失市場(chǎng)機(jī)會(huì),造成設(shè)計(jì)反復(fù)、成本高昂等問(wèn)題。因此,軟件成為設(shè)計(jì)開(kāi)發(fā)的關(guān)鍵,軟件需要在標(biāo)準(zhǔn)化平臺(tái)上運(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)用范圍也變得越來(lái)越強(qiáng)大。對(duì)基于特定嵌入式操作系統(tǒng)上的軟件設(shè)計(jì)研究已成為了近年來(lái)的熱點(diǎn),并且對(duì)于嵌入式操作系統(tǒng)在實(shí)際工程中的推廣應(yīng)用有著重要的意義。本課題研究在存儲(chǔ)器資源受限,但應(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í)
19、時(shí)操作系統(tǒng),是由Jean J.Labrosse于1992年首先設(shè)計(jì)編寫(xiě)的。1999年,Labrosse又編寫(xiě)了C/OS-。該操作系統(tǒng)是一個(gè)高度簡(jiǎn)潔、可ROM固化、可裁剪、實(shí)現(xiàn)搶先式實(shí)時(shí)多任務(wù)的操作系統(tǒng)內(nèi)核,可用于各種微處理機(jī)系統(tǒng)。C/OS-可管理多達(dá)64個(gè)任務(wù),并可提供如下服務(wù):(1)信號(hào)燈(2)互斥式信號(hào)燈(3)事件標(biāo)志(4)消息隊(duì)列(5)任務(wù)管理(6)存儲(chǔ)塊管理(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í)行體??刹眉舻捏w系結(jié)構(gòu)是指一個(gè)軟件系統(tǒng)能夠支持多種應(yīng)用而無(wú)需在接口上做很大的變動(dòng)。因此
20、,可以開(kāi)發(fā)出成本低、品種多的軟件產(chǎn)品。C/OS-的特點(diǎn)如下:(1) 開(kāi)放的源代碼(2) 可移植性:絕大部分用ANSI C寫(xiě),和硬件相關(guān)的用匯編語(yǔ)言寫(xiě)。(3) 可固化性:只要有合適的軟件工具就可以C/OS-嵌入到產(chǎn)品中去。(4) 可裁剪性:產(chǎn)品可以只調(diào)用很少的C/OS-,這樣可以減少存儲(chǔ)空間,這是依靠條件編譯來(lái)實(shí)現(xiàn)的。(5) 占先式:C/OS-是運(yùn)行就緒條件下優(yōu)先級(jí)最高的任務(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-棧空間校驗(yàn)函數(shù)可以確定任務(wù)有多少??臻g。(9) 系統(tǒng)服務(wù):C/OS-提供例
21、如郵箱、信號(hào)量、消息隊(duì)列等系統(tǒng)服務(wù)。(10) 中斷管理:中斷足以使正在執(zhí)行的任務(wù)暫時(shí)掛起。(11) 穩(wěn)定性和可靠性:C/OS-是基于C/OS的,已有幾百個(gè)商業(yè)應(yīng)用。對(duì)于國(guó)內(nèi)大多數(shù)使用8051系列單片機(jī)的用戶來(lái)說(shuō),C/OS-具有很高的性價(jià)比,很適合這樣的嵌入式應(yīng)用。C/OS-是基于優(yōu)先級(jí)的搶占式實(shí)時(shí)多任務(wù)操作系統(tǒng),具有如下特點(diǎn):開(kāi)放源代碼,可移植性,可裁剪性,良好的穩(wěn)定性和可靠性。C/OS-很容易地移植到各種各樣的CPU平臺(tái)上,只要這一種微處理機(jī)能滿足以下條件即可:具有堆棧指針,可執(zhí)行CPU內(nèi)部寄存器的入棧、出棧指令;所使用的C編譯器支持內(nèi)嵌匯編指令,或者C編譯器支持可擴(kuò)展、可連接匯編模塊,使得
22、中斷控制能夠在C語(yǔ)言匯總實(shí)現(xiàn)。C/OS-可以在絕大多數(shù)的8位、16位、32位,甚至是64位的微處理機(jī)系統(tǒng)或數(shù)字信號(hào)處理器系統(tǒng)中運(yùn)行。2.2 C/OS-操作系統(tǒng)內(nèi)容簡(jiǎn)介2.2.1 內(nèi)核結(jié)構(gòu)就像所有的實(shí)時(shí)內(nèi)核一樣,C/OS- 需要在存取代碼核心區(qū)時(shí)禁止中斷,在存取完成后再將中斷重新打開(kāi)。禁止中斷是為了保護(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)對(duì)實(shí)時(shí)事件的響應(yīng)能力。C/OS-試圖將這段中斷禁止時(shí)間減至最小。但是,這在很大程度上還取決于系統(tǒng)的CPU結(jié)構(gòu),以及編譯器生成的代碼質(zhì)量。CPU通常提供禁止/允許中斷的匯編指令,而用
23、戶的編譯器必須支持從C語(yǔ)言中直接執(zhí)行這種操作。有一些編譯器允許用戶在C原碼中插入?yún)R編語(yǔ)句,這樣,就使得插入允許和禁止中斷的指令非常方便。為了將由于上述編譯器的差異而導(dǎo)致的中斷設(shè)置差異隱藏起來(lái),C/OS-了兩個(gè)宏來(lái)實(shí)現(xiàn)對(duì)中斷的允許和禁止:OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )。這兩個(gè)宏的實(shí)現(xiàn)是由CPU決定的,它們?cè)趏s_cpu.h的頭文件中定義,每種CPU都會(huì)在os_cpu.h中移植實(shí)現(xiàn)這個(gè)宏。OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )可以有三種不同的實(shí)現(xiàn)方法。具體使用哪種,取決于用戶的CPU能力。用戶可通過(guò)#defin
24、e OS_CRITICAL_METHOD 來(lái)定義選用一種實(shí)現(xiàn)方法。第一種方法:#define OS_CRITICAL_METHOD1這也是最簡(jiǎn)單的一種實(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)用返回以后仍要求禁止中斷。第二種方法:#define OS_CRITICAL_METHOD2這種實(shí)現(xiàn)方法在實(shí)現(xiàn)OS_ENTER_CRITICAL( )時(shí),是將禁止的中斷狀態(tài)保留在堆棧中,然后禁止中斷。而O
25、S_EXIT_CRTICAL( )的實(shí)現(xiàn)只需要簡(jiǎn)單地將中斷狀態(tài)從堆棧中恢復(fù)出來(lái)。通過(guò)這種方案,無(wú)論是在中斷禁止時(shí),還是中斷允許時(shí)調(diào)用C/OS-服務(wù),都可以在該調(diào)用前后保留中斷狀態(tài)。第三種方法:# define OS_CRITICAL_METHOD3有些編譯器提供了一些功能擴(kuò)展,允許用戶獲取CPU狀態(tài)字,并可以將它存入函數(shù)的局部變量中。C/OS-代碼主要由C語(yǔ)言實(shí)現(xiàn),而C語(yǔ)言中的數(shù)據(jù)類型一般與硬件平臺(tái)所對(duì)應(yīng)的編譯器有關(guān)。為了實(shí)現(xiàn)在各種硬件平臺(tái)上的可移植性,C/OS-了自己定義的基本數(shù)據(jù)類型。C/OS-庫(kù)函數(shù)可以分為以下幾類:任務(wù)控制類:用于實(shí)現(xiàn)C/OS-啟動(dòng)、任務(wù)管理、任務(wù)調(diào)度、任務(wù)優(yōu)先級(jí)設(shè)置等
26、功能。動(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()。OSTaskCreateExt()是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è)無(wú)限的循環(huán),也可以是在一次執(zhí)行完畢后被刪除掉。這里要注意的是,任務(wù)代碼
27、并不是被真正的刪除了,而只是C/OS-不再理會(huì)該任務(wù)代碼,所以該任務(wù)代碼不會(huì)再運(yùn)行。任務(wù)看起來(lái)與任何C函數(shù)一樣,具有一個(gè)返回類型和一個(gè)參數(shù),只是它從不返回。任務(wù)的返回類型必須被定義成void型。這里提到的函數(shù)可以在OS_TASK文件中找到。其內(nèi)容包括如何在用戶的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級(jí)、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的信息。C/OS-可以管理多達(dá)64個(gè)任務(wù),并從中保留了四個(gè)最高優(yōu)先級(jí)和四個(gè)最低優(yōu)先級(jí)的任務(wù)供自己使用,所以用戶可以使用的只有56個(gè)任務(wù)。任務(wù)的優(yōu)先級(jí)越高,反映優(yōu)先級(jí)的值則越低。在最新的C/OS-中,任務(wù)的優(yōu)先級(jí)數(shù)也可作為任務(wù)的標(biāo)識(shí)符使用。想讓C/OS-管理用
28、戶的任務(wù),用戶必須要先建立任務(wù)。用戶可以通過(guò)傳遞任務(wù)地址和其它參數(shù)到以下兩個(gè)函數(shù)之一來(lái)建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()與C/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展版本,提供了一些附加的功能。用兩個(gè)函數(shù)中的任何一個(gè)都可以建立任務(wù)。任務(wù)可以在多任務(wù)調(diào)度開(kāi)始前建立,也可以在其它任務(wù)的執(zhí)行過(guò)程中被建立。在開(kāi)始多任務(wù)調(diào)度(即調(diào)用id參數(shù)為要建立的任務(wù)創(chuàng)建一個(gè)特殊的標(biāo)識(shí)符。該參數(shù)在C/OS以后的升級(jí)版本中可能會(huì)用到,但在C/OS-中還未使用。這個(gè)標(biāo)識(shí)符可以擴(kuò)展C/OS-功能,使它可
29、以執(zhí)行的任務(wù)數(shù)超過(guò)目前的64個(gè)。pbos是指向任務(wù)的堆棧棧底的指針,用于堆棧的檢驗(yàn)。stk_size用于指定堆棧成員數(shù)目的容量。也就是說(shuō),如果堆棧的入口寬度為4字節(jié)寬,那么stk_size為10000是指堆棧有40000個(gè)字節(jié)。該參數(shù)與pbos一樣,也用于堆棧的檢驗(yàn)。pext是指向用戶附加的數(shù)據(jù)域的指針,用來(lái)擴(kuò)展任務(wù)的OS_TCB。每個(gè)任務(wù)都有自己的堆棧空間。堆棧必須聲明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆??臻g(在編譯的時(shí)候分配)也可以動(dòng)態(tài)地分配堆棧空間(在運(yùn)行的時(shí)候分配)。用戶可以用C編譯器提供的malloc()函數(shù)來(lái)動(dòng)態(tài)地分配堆棧空間,在動(dòng)態(tài)分配中,用戶要時(shí)刻
30、注意內(nèi)存碎片問(wèn)題。特別是當(dāng)用戶反復(fù)地建立和刪除任務(wù)時(shí),內(nèi)存堆中可能會(huì)出現(xiàn)大量的內(nèi)存碎片,導(dǎo)致沒(méi)有足夠大的一塊連續(xù)內(nèi)存區(qū)域可用作任務(wù)堆棧,這時(shí)malloc()便無(wú)法成功地為任務(wù)分配堆??臻gC/OS- 支持的處理器的堆棧既可以從上(高地址)往下(低地址)長(zhǎng)也可以從下往上長(zhǎng)。用戶在調(diào)用OSTaskCreate()或OSTaskCreateExt()的時(shí)候必須知道堆棧是怎樣長(zhǎng)的,因?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í)候必須考
31、慮任務(wù)所調(diào)用的所有函數(shù)的嵌套情況,任務(wù)所調(diào)用的所有函數(shù)會(huì)分配的局部變量的數(shù)目,以及所有可能的中斷服務(wù)例程嵌套的堆棧需求。另外,堆棧必須能儲(chǔ)存所有的CPU寄存器。有時(shí)候決定任務(wù)實(shí)際所需的堆棧空間大小是很有必要的。因?yàn)檫@樣用戶就可以避免為任務(wù)分配過(guò)多的堆??臻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)存空間。在OST
32、askCreateExt()中,將參數(shù)opt設(shè)置為OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR。將想檢驗(yàn)的任務(wù)的優(yōu)先級(jí)作為OSTaskStkChk()的參數(shù)并調(diào)用之。OSTaskStkChk()順著堆棧的棧底開(kāi)始計(jì)算空閑的堆??臻g大小,具體實(shí)現(xiàn)方法是統(tǒng)計(jì)儲(chǔ)存值為0的連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)儲(chǔ)存值不為0的堆棧入口。注意堆棧入口的儲(chǔ)存值在進(jìn)行檢驗(yàn)時(shí)使用的是堆棧的數(shù)據(jù)類型。 有時(shí)候刪除任務(wù)是很有必要的。刪除任務(wù),是說(shuō)任務(wù)將返回并處于休眠狀態(tài),并不是說(shuō)任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被C/OS-調(diào)用。任務(wù)的刪除意味著:它的任務(wù)控制塊從OSTCBList鏈表中
33、移到OSTCBFreeList,這樣時(shí)鐘節(jié)拍函數(shù)中就不會(huì)處理它了,這樣調(diào)度把它置入就緒表的可能性就沒(méi)了;如果它已經(jīng)處于就緒表中,那么它將被移出,這樣調(diào)度器函數(shù)就不會(huì)處理它,這樣它被調(diào)度運(yùn)行的機(jī)會(huì)就沒(méi)了;在建立任務(wù)的時(shí)候會(huì)分配給任務(wù)一個(gè)優(yōu)先級(jí)。在程序運(yùn)行期間,用戶可以通過(guò)調(diào)用OSTaskChangePrio()來(lái)改變?nèi)蝿?wù)的優(yōu)先級(jí)。換句話說(shuō),就是C/OS-允許動(dòng)態(tài)的改變?nèi)蝿?wù)的優(yōu)先級(jí)。用戶不能改變空閑任務(wù)的優(yōu)先級(jí),但可以改變調(diào)用本函數(shù)的任務(wù)或者其它任務(wù)的優(yōu)先級(jí)。為了改變調(diào)用本函數(shù)的任務(wù)的優(yōu)先級(jí),可以指定該任務(wù)當(dāng)前的優(yōu)先級(jí)或OS_PRIO_SELF,OSTaskChangePrio()會(huì)決定該任務(wù)的優(yōu)
34、先級(jí)。用戶還必須指定任務(wù)的新優(yōu)先級(jí)。因?yàn)镃/OS-不允許多個(gè)任務(wù)具有相同的優(yōu)先級(jí),所以O(shè)STaskChangePrio()需要檢驗(yàn)新優(yōu)先級(jí)是否是合法的。2.2.3 時(shí)間管理C/OS-要求提供定時(shí)中斷來(lái)實(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) OSTimeDlyR
35、esume()(4) OSTimeGet()(5) OSTimeSet()C/OS-提供了這樣一個(gè)系統(tǒng)服務(wù):申請(qǐng)?jiān)摲?wù)的任務(wù)可以延時(shí)一段時(shí)間,這段時(shí)間的長(zhǎng)短是用時(shí)鐘節(jié)拍的數(shù)目來(lái)確定的。實(shí)現(xiàn)這個(gè)系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該函數(shù)會(huì)使C/OS-進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個(gè)優(yōu)先級(jí)最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時(shí)間期滿或者有其它的任務(wù)通過(guò)調(diào)用OSTimeDlyResume()取消了延時(shí),它就會(huì)馬上進(jìn)入就緒狀態(tài)。只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級(jí)時(shí),它才會(huì)立即運(yùn)行。OSTimeDly()雖然是一個(gè)非常有用的函數(shù),但應(yīng)用程序需要知道延時(shí)時(shí)間對(duì)
36、應(yīng)的時(shí)鐘節(jié)拍的數(shù)目。用戶可以使用定義全局常數(shù)OS_TICKS_PER_SEC的方法將時(shí)間轉(zhuǎn)換成時(shí)鐘段,但這種方法有時(shí)顯得比較愚笨。如果增加了OSTimeDlyHMSM()函數(shù)后,用戶就可以按小時(shí)(H)、分(M)、秒(S)和毫秒(m)來(lái)定義時(shí)間了,這樣會(huì)顯得更自然些。與OSTimeDly()一樣,調(diào)用OSTimeDlyHMSM()函數(shù)也會(huì)使C/OS-進(jìn)行一次任務(wù)調(diào)度,并且執(zhí)行下一個(gè)優(yōu)先級(jí)最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDlyHMSM()后,一旦規(guī)定的時(shí)間期滿或者有其它的任務(wù)通過(guò)調(diào)用OSTimeDlyResume()取消了延時(shí),它就會(huì)馬上處于就緒態(tài)。同樣,只有當(dāng)該任務(wù)在所有就緒態(tài)任務(wù)中具有最
37、高的優(yōu)先級(jí)時(shí),它才會(huì)立即運(yùn)行。C/OS-允許用戶結(jié)束延時(shí)正處于延時(shí)期的任務(wù)。延時(shí)的任務(wù)可以不等待延時(shí)期滿,而是通過(guò)其它任務(wù)取消延時(shí)來(lái)使自己處于就緒態(tài)。這可以通過(guò)調(diào)用OSTimeDlyResume()和指定要恢復(fù)的任務(wù)的優(yōu)先級(jí)來(lái)完成。實(shí)際上,OSTimeDlyResume()也可以喚醒正在等待事件的任務(wù),雖然這一點(diǎn)并沒(méi)有提到過(guò)。在這種情況下,等待事件發(fā)生的任務(wù)會(huì)考慮是否終止等待事件。無(wú)論時(shí)鐘節(jié)拍何時(shí)發(fā)生,C/OS-都會(huì)將一個(gè)32位的計(jì)數(shù)器加1。這個(gè)計(jì)數(shù)器在用戶調(diào)用OSStart()初始化多任務(wù)和4,294,967,295個(gè)節(jié)拍執(zhí)行完一遍的時(shí)候從0開(kāi)始計(jì)數(shù)。在時(shí)鐘節(jié)拍的頻率等于100Hz的時(shí)候,這
38、個(gè)32位的計(jì)數(shù)器每隔497天就重新開(kāi)始計(jì)數(shù)。用戶可以通過(guò)調(diào)用OSTimeGet()來(lái)獲得該計(jì)數(shù)器的當(dāng)前值。也可以通過(guò)調(diào)用OSTimeSet()來(lái)改變?cè)撚?jì)數(shù)器的值注意,在訪問(wèn)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_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)關(guān)閉中斷和打開(kāi)中斷。當(dāng)兩個(gè)任務(wù)或者一個(gè)任務(wù)和一個(gè)中斷服務(wù)子程序
39、共享某些數(shù)據(jù)時(shí),可以采用這種方法。二是利用函數(shù)OSSchedLock()和OSSchedUnlock()對(duì)C/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開(kāi)鎖。用這種方法也可以實(shí)現(xiàn)數(shù)據(jù)的共享。圖2-2 事件控制塊的使用圖2.2表示任務(wù)和中斷服務(wù)子程序之間是如何進(jìn)行通訊的。一個(gè)任務(wù)或者中斷服務(wù)子程序可以通過(guò)事件控制塊ECB(Event Control Blocks)來(lái)向另外的任務(wù)發(fā)信號(hào)。這里,所有的信號(hào)都被看成是事件(Event)。這也說(shuō)明為什么上面把用于通訊的數(shù)據(jù)結(jié)構(gòu)叫做事件控制塊。一個(gè)任務(wù)還可以等待另一個(gè)任務(wù)或中斷服務(wù)子程序給它發(fā)送信號(hào)。只有任務(wù)可以等待事件發(fā)生,中斷服務(wù)子程序是不能這樣做的。對(duì)于處于等
40、待狀態(tài)的任務(wù),還可以給它指定一個(gè)最長(zhǎng)等待時(shí)間,以此來(lái)防止因?yàn)榈却氖录](méi)有發(fā)生而無(wú)限期地等下去。多個(gè)任務(wù)可以同時(shí)等待同一個(gè)事件的發(fā)生。在這種情況下,當(dāng)該事件發(fā)生后,所有等待該事件的任務(wù)中,優(yōu)先級(jí)最高的任務(wù)得到了該事件并進(jìn)入就緒狀態(tài),準(zhǔn)備執(zhí)行。上面講到的事件,可以是信號(hào)量、郵箱或者消息隊(duì)列等。當(dāng)事件控制塊是一個(gè)信號(hào)量時(shí),任務(wù)可以等待它,也可以給它發(fā)送消息。 2.2.5 內(nèi)存管理在ANSI C中可以用malloc()和free()兩個(gè)函數(shù)動(dòng)態(tài)地分配內(nèi)存和釋放內(nèi)存。但是,在嵌入式實(shí)時(shí)操作系統(tǒng)中,多次這樣做會(huì)把原來(lái)很大的一塊連續(xù)內(nèi)存區(qū)域,逐漸地分割成許多非常小而且彼此又不相鄰的內(nèi)存區(qū)域,也就是內(nèi)存碎片
41、。由于這些碎片的大量存在,使得程序到后來(lái)連非常小的內(nèi)存也分配不到。在任務(wù)堆棧中,講過(guò)用malloc()函數(shù)來(lái)分配堆棧時(shí),也討論過(guò)內(nèi)存碎片的問(wèn)題。另外,由于內(nèi)存管理算法的原因,malloc()和free()函數(shù)執(zhí)行時(shí)間是不確定的。在C/OS-中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來(lái)管理。每個(gè)分區(qū)中包含有整數(shù)個(gè)大小相同的內(nèi)存塊。利用這種機(jī)制,C/OS- 對(duì)malloc()和free()函數(shù)進(jìn)行了改進(jìn),使得它們可以分配和釋放固定大小的內(nèi)存塊。這樣一來(lái),malloc()和free()函數(shù)的執(zhí)行時(shí)間也是固定的了。如圖2.3,在一個(gè)系統(tǒng)中可以有多個(gè)內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同
42、大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬于的內(nèi)存分區(qū)。顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片問(wèn)題就得到了解決。為了便于內(nèi)存的管理,在C/OS-中使用內(nèi)存控制塊(memory control blocks)的數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中的每個(gè)內(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(片上系列)時(shí)代,其主要特點(diǎn)是:指令運(yùn)行速度大大提高。C8051F系列采用CIP-51的CPU模式,指令以時(shí)鐘周期為運(yùn)行
43、單位。與8051相比,相同的時(shí)鐘下,單周期指令運(yùn)行速度為原來(lái)的12倍;全指令集平均運(yùn)行速度為原來(lái)的9.5倍。I/O從固定方式到交叉開(kāi)關(guān)配置。C8051F系列采用開(kāi)關(guān)網(wǎng)絡(luò)以硬件方式實(shí)現(xiàn)I/O端口的靈活配置。在這種通過(guò)交叉開(kāi)關(guān)配置的I/O端口系統(tǒng)中,單片機(jī)外部為通用I/O口,內(nèi)部有輸入/輸出的電路單元,通過(guò)相應(yīng)的配置寄存器控制的交叉開(kāi)關(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的讀/寫(xiě)操作及非侵入式在系統(tǒng)調(diào)試,而且它的JTAG邏輯還為在系統(tǒng)測(cè)試提
44、供了邊界掃描功能。從引腳復(fù)位到多源復(fù)位。C8051F的多復(fù)位源提供了上電復(fù)位、掉電復(fù)位、外部引腳復(fù)位、軟件復(fù)位、時(shí)鐘檢測(cè)復(fù)位、比較0復(fù)位、WDT復(fù)位和引腳配置復(fù)位。眾多的復(fù)位源為保障系統(tǒng)的安全、操作的靈活以及零功耗系統(tǒng)設(shè)計(jì)帶來(lái)極大的好處。3.2 C8051F040的性能概述C8051F040在一個(gè)芯片內(nèi)集成了構(gòu)成單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有的模擬和數(shù)字外設(shè)及其他功能部件。它的供電電壓為2.73.6V,帶有內(nèi)部可編程振蕩器。C8051F040的A/D轉(zhuǎn)換部分包括:一個(gè)12位ADCO子系統(tǒng),可以測(cè)量12路外部輸入和1路內(nèi)部溫度傳感器輸出,最高轉(zhuǎn)換速度為100KS/s;一個(gè)8位ADC1子
45、系統(tǒng),可以測(cè)量8路外部輸入,最高轉(zhuǎn)換速度為500KS/s。C8051F040的ADC有單端輸入和差分輸入兩種測(cè)量方式,另外它還集成了跟蹤保持電路和可編程窗口檢測(cè)器。同時(shí),C8051F040有兩個(gè)12位電壓方式DAC。每個(gè)DAC的輸出擺幅均為0VREF(對(duì)應(yīng)的輸入碼范圍是0x0000Xfff)。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ù)存儲(chǔ)器接口,可以編程為復(fù)用和非復(fù)用方式。C8051F040有8B寬的端口I/O,
46、所有口線均耐5V電壓。它可以同時(shí)使用SMBus,SPI以及2個(gè)UART串口。另外,它還有可編程的16位計(jì)數(shù)器/定時(shí)器陣列,5個(gè)捕捉/比較模塊,5個(gè)通用16位計(jì)數(shù)器/定時(shí)器以及專用的看門狗定時(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用于存儲(chǔ)消息目標(biāo)和每個(gè)目標(biāo)的仲裁掩碼。這種CAM處理器有32個(gè)隨意配置為發(fā)送和接收的消息目標(biāo),并且每一個(gè)消息目標(biāo)都有它自己
47、的識(shí)別掩碼,所有的數(shù)據(jù)傳輸和接收濾波都是由CAN控制器完成的,而不是由CIP-51來(lái)完成。通常CAN內(nèi)核不能直接訪問(wèn)消息RAM,而必須通過(guò)接口寄存器IFI或IF2來(lái)訪問(wèn)。另外,CIP-51的SFR并不能直接訪問(wèn)CAN內(nèi)部寄存器的所有單元,其配置CAN、消息目標(biāo)、讀取CAN狀態(tài)以及獲取接收數(shù)據(jù)、傳遞發(fā)送數(shù)據(jù)都由SFR中的6個(gè)特殊寄存器來(lái)完成,其中CANOCN、CANODAL、CANOADR 3個(gè)寄存器主要用來(lái)訪問(wèn)修改其他不能直接訪問(wèn)的CAN內(nèi)部寄存器,消息處理單元?jiǎng)t用于根據(jù)寄存器中的消息來(lái)控制CAN內(nèi)核中移位寄存器和消息RAM之間的數(shù)據(jù)傳遞,同時(shí),它還可用來(lái)管理中斷的產(chǎn)生。4 C/OS-在C80
48、51F040上的移植4.1 C/OS-硬件平臺(tái)的選擇Cygnal公司(現(xiàn)Sillicon Labs公司)的C8051F系列單片機(jī)是完全集成的混合信號(hào)系統(tǒng)級(jí)芯片(SOC),具有與MCS-51指令集完全兼容的高速 CIP-51內(nèi)核。C8051F系列單片機(jī)在一個(gè)芯片內(nèi)部集成了構(gòu)成一個(gè)單片機(jī)數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有模擬和數(shù)字外設(shè)及其他功能部件,它是完全集成的混合信號(hào)片上系統(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程序存儲(chǔ)器。C8051F040是C8051F04X系列單片
49、機(jī)中一種。其特性如下:(1)高速、流水線結(jié)構(gòu)的8051兼容的CIP-51內(nèi)核(2)控制器局域網(wǎng)控制器,有32個(gè)消息對(duì)象,每個(gè)消息對(duì)象有自己的標(biāo)識(shí)(3)全速、非侵入式的系統(tǒng)調(diào)試接口(4)真正12位、100ksps的ADC,帶PGA和8通道模擬多路開(kāi)關(guān)(5)允許高電壓差分放大器輸入到12/10位ADC,增益可編程(6)真正8位500ksps的ADC,帶PGA和8通道模擬多路開(kāi)關(guān)(7)兩個(gè)12位DAC,具有可編程數(shù)據(jù)更新方式(8)64KB可在系統(tǒng)編程的FLASH存儲(chǔ)器(9)4352字節(jié)的片內(nèi)RAM(10)可尋址64KB地址空間的外部數(shù)據(jù)存儲(chǔ)器接口(11)硬件實(shí)現(xiàn)的SPI、SMBus/12C和兩個(gè)UA
50、RT串行接口(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)行平臺(tái)需要一定的條件如下:(1)由與C/OS-主要是由C語(yǔ)言編寫(xiě)的,所以要求所選CPU的C編譯器能夠產(chǎn)生可重入的代碼。(2)所用C語(yǔ)言提供對(duì)中斷控制的方法。(3)所用CPU支持中斷,并且能夠產(chǎn)生定時(shí)中斷,以便實(shí)現(xiàn)任務(wù)的切換;(4)所用CPU支持具有足夠深度的硬件堆棧;(5)所用CP
51、U的指令系統(tǒng)中,應(yīng)含有可將堆棧指針和其他CPU寄存器的內(nèi)容入棧/出棧,或?qū)懭?讀出內(nèi)存的指令。由此可見(jiàn),C8051F040是適合實(shí)時(shí)操作系統(tǒng)C/OS-的移植的。選擇C8051F040單片機(jī)是正確的。4.2 C/OS-移植內(nèi)容開(kāi)發(fā)環(huán)境選用Keil集成開(kāi)發(fā)環(huán)境,它支持C8051F040單片機(jī),并且具有很高的編譯效率,目標(biāo)板是基于C8051F040的系統(tǒng)。C8051F040單片機(jī)有JTAG接口,通過(guò)Keil開(kāi)發(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三個(gè)文件。但是Keil編譯器的缺省編譯的函數(shù)是不具有可重入性,而系統(tǒng)的多任務(wù)必須要求具有可重人性,因此必須對(duì)在多任務(wù)時(shí)調(diào)用的所有函數(shù)后面都加上reentrant關(guān)鍵字,告訴編譯器該函數(shù)具有可重人性。下面將論述對(duì)與硬件相關(guān)的三個(gè)文件的修改。要將c/OS-移植到一個(gè)新的硬件平臺(tái)上,應(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)體的定義。由于不同的處理器有不同的字長(zhǎng),C/OS-的移植需要重新定義一系列的數(shù)據(jù)結(jié)構(gòu)。需要改動(dòng)部分主要是有三點(diǎn):1、C8051F單片機(jī)的數(shù)據(jù)字節(jié)是8
53、位,故堆棧的數(shù)據(jù)類型OS-STK定義為8位。修改如下:typedef unsigned char OS-STK;2、C8051F單片機(jī)的堆棧指針SP的生長(zhǎng)是從低字節(jié)到高字節(jié),也就是從下往上增長(zhǎng),因此應(yīng)這樣修改:#define OS-STK-GROWTH 0;3、采用的關(guān)中斷的方式是,先將中斷禁止?fàn)顟B(tài)保存到堆棧中,然后禁止中斷。所以開(kāi)關(guān)中斷應(yīng)修改如下:#define OS_ENTER_CRITICAL() EA=0 /關(guān)中斷#define OS_EXIT_CRITICAL() EA=1 /開(kāi)中斷4、C/OS-在8051上的移植采用程序調(diào)用代替,和在8086上的堆棧格式相同:#define OS_
54、TASK_SW() OSCtXSW();4.2.2 OS_CPU_AASM匯編文件的修改C/OS-的移植需要用戶改寫(xiě)OS_CPU_A.ASM中的四個(gè)函數(shù):(1)OSStartHighRdy()(2)OSCtxSw()(3)OSIntCtxSw()(4)OSTickISR()該文件主要包括任務(wù)切換的處理和系統(tǒng)時(shí)鐘的定時(shí),主要的子程序函數(shù)有OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()和OSTickISR()。因?yàn)閰R編子程序?qū)⒈籆函數(shù)所調(diào)用,因此,匯編程序的編寫(xiě)必須遵循Keil C函數(shù)和匯編子程序的調(diào)用規(guī)則。當(dāng)C/OS-啟動(dòng)多任務(wù)時(shí),必須調(diào)用OS- StartHighRdy()函數(shù)使處于最高優(yōu)先級(jí)的任務(wù)處于就緒態(tài)并且開(kāi)始運(yùn)行。OSStartHighRdy()函數(shù)從處于最高優(yōu)先級(jí)任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,從該堆棧中恢復(fù)所有的寄存器內(nèi)容,并把OSRunning置為TRUE后返回執(zhí)行該任務(wù)。系統(tǒng)直接進(jìn)行任務(wù)切換或者應(yīng)用程序通過(guò)處理器軟件陷阱指令執(zhí)行時(shí),系統(tǒng)將通過(guò)調(diào)用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小課題申報(bào)書(shū)范例
- 課題申報(bào)研究計(jì)劃書(shū)模板
- 課題申報(bào)書(shū)查重
- 課題項(xiàng)目申報(bào)書(shū)怎么找
- 中醫(yī)護(hù)理課題申報(bào)書(shū)范文
- 課題申報(bào)書(shū)的撰寫(xiě)及案例
- 決策咨詢課題申報(bào)書(shū)
- 合同范例去買
- 別墅商用租賃合同范本
- 語(yǔ)文課題的申報(bào)書(shū)
- 國(guó)際學(xué)校六年級(jí)數(shù)學(xué)測(cè)(英文)
- 黑河對(duì)俄邊境旅游的發(fā)展現(xiàn)狀及對(duì)策研究
- 《馬克思主義與社會(huì)科學(xué)方法論》課后思考題答案全
- 為人民服務(wù) 公開(kāi)課比賽一等獎(jiǎng)
- 2023年山東省春季高考語(yǔ)文試題詳解
- 休閑農(nóng)業(yè)與鄉(xiāng)村旅游(課件)
- 設(shè)備安裝驗(yàn)收單
- YY/T 1712-2021采用機(jī)器人技術(shù)的輔助手術(shù)設(shè)備和輔助手術(shù)系統(tǒng)
- 高中語(yǔ)文部編版(2023)選擇性必修中冊(cè)第三單元9屈原列傳 屈原列傳(解析版)
- GB/T 31366-2015光伏發(fā)電站監(jiān)控系統(tǒng)技術(shù)要求
- 管理制度-汽修廠環(huán)境保護(hù)管理制度參考范本
評(píng)論
0/150
提交評(píng)論