秋霞电影网午夜鲁丝片无码,真人h视频免费观看视频,囯产av无码片毛片一级,免费夜色私人影院在线观看,亚洲美女综合香蕉片,亚洲aⅴ天堂av在线电影猫咪,日韩三级片网址入口

畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究

上傳人:1777****777 文檔編號:37024978 上傳時間:2021-11-01 格式:DOC 頁數(shù):24 大?。?23KB
收藏 版權(quán)申訴 舉報 下載
畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究_第1頁
第1頁 / 共24頁
畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究_第2頁
第2頁 / 共24頁
畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究_第3頁
第3頁 / 共24頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(論文)嵌入式操作系統(tǒng)μCOSII在C8051F040單片機中移植研究(24頁珍藏版)》請在裝配圖網(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-Ⅱ嵌入式實時操作系統(tǒng)……………………………………………………….…………6 2.1 選擇C/OS-Ⅱ的原因……………………………………………………………..……….6 2.2 C/OS-Ⅱ操作系統(tǒng)內(nèi)容簡介…………………………………………………...…………..7 2.2.1 內(nèi)核結(jié)構(gòu)……………………………………

3、………………………..………………..7 2.2.2 任務(wù)管理……………………………………………………………...……………….8 2.2.3 時間管理……………………………………………………..………………………10 2.2.4 任務(wù)間通信與同步……………………………………………..……………………11 2.2.5 內(nèi)存管理………………………………………………………..……………………12 3. C8051F系列單片機的特點……………………………………………………………………..13 3.1 C8051F系列單片機的特點……………………………………………………………..…13

4、 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.ASM匯編文件的修改…………………………………………………17 4.3

5、C/OS-Ⅱ在C8051F040上的運行測試……………………………………..……….……19 4.4 基于C/OS-Ⅱ的C8051F040運用系統(tǒng)開發(fā)………………………………..…….……..21 5. 結(jié)論………………………………………………………………………………...……………22 參考文獻……………………………………………………………………………………………23 嵌入式操作系統(tǒng)μC/OS-II在C8051F040單片機中移植研究 摘要:隨著現(xiàn)代控制技術(shù)、多媒體技術(shù)與Internet的應(yīng)用和普及,以計算機技術(shù)、芯 技術(shù)和軟件技術(shù)為核心的數(shù)字化技

6、術(shù)得到了迅猛發(fā)展,掀起了一場數(shù)字化技術(shù)革命,促使消費電子、計算機、通信一體化趨勢的步伐加快,嵌入式系統(tǒng)技術(shù)成為發(fā)展重點。 本文主要介紹了嵌入式實時操作系統(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系列單片機的特點;第四部分,詳細的敘述了C/OS-Ⅱ移植的過程。 可以預(yù)見,由于C/OS-Ⅱ具有不可替代的優(yōu)點,C/OS-Ⅱ?qū)⒃谝院蟮那度胧较到y(tǒng)設(shè)計中得到廣泛應(yīng)用。 關(guān)鍵詞:C/OS-Ⅱ;C8051F

7、040;嵌入式實時操作系統(tǒng);移植 Embedded operating system μ C / OS-II in the C8051F040 MCU Transplantation Abstract:With application and popularization of modern control technology , multimedia technology and Internet, the digitized technology taking computer technology

8、, 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 accelerate, embedded systematic technology becomes the developing focus。 This disse

9、rtation 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 management, time management, intertask communication and synchronization, and memory management.;Th

10、e 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 C/OS-Ⅱ will be at a later embedded systems design widely used. Key words:C/OS-Ⅱ;C8051F040;Embedded Rea

11、l-time OS;Porting 23 1 緒論 1.1 嵌入式操作系統(tǒng) 1.1.1 嵌入式系統(tǒng)的發(fā)展?fàn)顩r 嵌入式系統(tǒng)誕生于微型機時代,隨著微型機技術(shù)的完善和發(fā)展,微型機出現(xiàn)了嵌入式應(yīng)用環(huán)境,傳統(tǒng)電子設(shè)備的智能化不同于通用機的嵌入式應(yīng)用。現(xiàn)代計算機有通用計算機和嵌入式計算機兩大分支,他們是兩個完全不同的計算機技術(shù)領(lǐng)域。通用計算機系統(tǒng)是高速海量數(shù)值計算,嵌入式系統(tǒng)是對象嵌入和智能化控制。分工后兩個分支呈現(xiàn)高速發(fā)展的態(tài)勢。 嵌入式系統(tǒng)是嵌入到對象體系中的

12、專用計算機應(yīng)用系統(tǒng)。其嵌入性是指非獨立存在的物理空間,專用性是滿足對象體系要求的軟硬件裁剪,它是智能化的工具保證。由于傳統(tǒng)電子系統(tǒng)的嵌入式應(yīng)用環(huán)境是超小型、超低價、高可靠的嵌入式計算機,這就需要尋求芯片化的徹底解決辦法,單片微型計算機應(yīng)運而生,走單片機獨立發(fā)展道路成了必然選擇。 一個嵌入式系統(tǒng)包括硬件和軟件兩部分。硬件包括微處理器、存儲器及外設(shè)器件等,而軟件包括操作系統(tǒng)軟件和應(yīng)用程序。為了提高系統(tǒng)性能,除了需要對硬件和軟件進行優(yōu)化外,還會引入總線的概念。與普通計算機系統(tǒng)類似,嵌入式系統(tǒng)仍然包括微處理器、存儲設(shè)備和輸入、輸出設(shè)備,但是它與一般的PC系統(tǒng)還有很大的區(qū)別。一般來講,嵌入式系統(tǒng)在功耗

13、、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約。 作為二十世紀(jì)人類最偉大的發(fā)明之一,計算機在期待著第五代出現(xiàn)的同時,也邁入了其另一個新階段——后PC時代。后PC時代的到來,使得人們開始越來越多的接觸到一個新的概念——嵌入式產(chǎn)品,如手機、PDA、數(shù)控機床等。其實,嵌入式操作系統(tǒng)很早以前就出現(xiàn)就得到了廣泛應(yīng)用,如微型計算器、PC中的鍵盤,都是最典型最簡單的嵌入式系統(tǒng)。如果說PC機的出現(xiàn)構(gòu)建了信息產(chǎn)業(yè)的框架,推動了整個信息產(chǎn)業(yè)和人類文明的發(fā)展和前進,那么嵌入式系統(tǒng)的發(fā)展將會更加完善這個框架,并成為信息產(chǎn)業(yè)發(fā)展的加速器。 根據(jù)IEEE的定義,嵌入式系統(tǒng)是控制、監(jiān)視或者輔

14、助設(shè)備機器和車間運行的裝置,這主要是從產(chǎn)品的應(yīng)用角度加以定義的。按照目前業(yè)界和學(xué)術(shù)界對嵌入式系統(tǒng)的普遍看法,嵌入式操作系統(tǒng)被定義為以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計算機系統(tǒng)。 嵌入式系統(tǒng)技術(shù)是將先進的計算機技術(shù)、半導(dǎo)體技術(shù)及電子技術(shù)和各個行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,這一點就決定了它必然是一個技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。綜觀嵌入式系統(tǒng)技術(shù)的發(fā)展,大致經(jīng)歷了以下三個階段: (1)第一階段是嵌入式技術(shù)的早期階段。 嵌入式操作系統(tǒng)的發(fā)展歷史悠久,可以說它是伴隨著數(shù)字計算機的出現(xiàn)而誕生的。但早期的

15、計算機主要器件由電子管、晶體管等組成,體積過于龐大,因而阻礙了嵌入式系統(tǒng)的發(fā)展。早期系統(tǒng)以功能簡單的專用計算機或單片機為核心的可編程控制器形式存在,具有監(jiān)測、伺服、設(shè)備指示等功能。這一階段系統(tǒng)的主要特點是系統(tǒng)結(jié)構(gòu)和功能都相對單一,處理效率較低,存儲容量較小,幾乎沒有用戶接口,比較適合于各類專用領(lǐng)域。 (2) 第二階段是以嵌入式處理器/控制器和嵌入式操作系統(tǒng)為標(biāo)志的嵌入式系統(tǒng)。 隨著并行技術(shù)、先進控制、流水線、強有力的中斷系統(tǒng)、操作系統(tǒng)等技術(shù)的發(fā)展,特別是在微處理器問世以后,嵌入式系統(tǒng)得到了真正的發(fā)展。微處理器的廣泛應(yīng)用形成了一個廣闊的嵌入式應(yīng)用市場。 這一階段系統(tǒng)的主要特點是計算機硬件出

16、現(xiàn)了高可靠、低功耗的嵌入式處理器;同時,各類商業(yè)嵌入式操作系統(tǒng)開始出現(xiàn)并得到遜色發(fā)展,嵌入式操作系統(tǒng)能運行于各種不同類型的微處理器上,兼容性好;操作系統(tǒng)內(nèi)核小、效率高,并具備高度的模塊化和擴展性;具備文件和目錄管理、設(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)越來越小,功能越來越強。隨著NOC的出現(xiàn),以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益密切,嵌入式系統(tǒng)的網(wǎng)絡(luò)化趨勢將推動其更加快速的

17、發(fā)展。 近幾年嵌入式操作系統(tǒng)技術(shù)的發(fā)展有以下幾個顯著的變化: (1)新的處理器越來越多,一方面,嵌入式操作系統(tǒng)自身結(jié)構(gòu)的設(shè)計更易于移植,以便在短時間內(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),它們對實時性要求并不高。 (4)電信設(shè)備、控制系統(tǒng)要求的高可靠性,對嵌入式系統(tǒng)提出了新的要求。 (5)各類通用機上使用的新技術(shù)、新觀念正逐

18、步移植到嵌入式系統(tǒng)中。 (6)各種嵌入式Linux操作系統(tǒng)正迅速發(fā)展,已經(jīng)形成了能與Windows CE等嵌入式操作系統(tǒng)進行有力競爭的局面。 (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)用項目多種多樣,嵌入式電子設(shè)備的功能不再單一,電氣結(jié)構(gòu)也更復(fù)雜。 后PC時代,計算機將無處不在,家用電器將向數(shù)字化和

19、網(wǎng)絡(luò)化發(fā)展,電視機、冰箱、微波爐、電話等都將嵌入計算機,并通過家庭控制中心與Internet聯(lián)接,轉(zhuǎn)變?yōu)橹悄芫W(wǎng)絡(luò)家電,還可以實現(xiàn)遠程醫(yī)療、遠程教育等。中國擁有最大的手機用戶,而掌上電腦和PDA等因為易于使用,攜帶方便、價格便宜而得到了快速發(fā)展,PDA與手機已呈現(xiàn)融合趨勢。用掌上電腦或PDA上網(wǎng),人們可以隨時隨地獲取信息。新的手持設(shè)備將使無線互聯(lián)訪問成為更加普遍的現(xiàn)象。與互聯(lián)網(wǎng)聯(lián)接,結(jié)合音頻應(yīng)用,如MP3功能,將會促使移動計算設(shè)備市場創(chuàng)造新的銷售記錄。整合手機模塊,為移動計算設(shè)備提供語音功能,也將是大勢所趨。 1.1.2 嵌入式操作系統(tǒng)的分類和發(fā)展 國外的嵌入式操作系統(tǒng)有VXWORK、QNX

20、、PALMOS、Windows CE、Linux、C/OS-Ⅱ等,國內(nèi)有基于Windows CE的機頂盒系統(tǒng)和HOPEN OS等。 從應(yīng)用方面分為面向低端設(shè)備的嵌入式操作系統(tǒng)和面向高端設(shè)備的嵌入式操作系統(tǒng)。傳統(tǒng)的嵌入式系統(tǒng)主要是面向低端設(shè)備的操作系統(tǒng),如各種工業(yè)系統(tǒng)、汽車發(fā)動機系統(tǒng)和防報死系統(tǒng)、民用微波爐、洗衣機、冰箱等。這類應(yīng)用客觀上要求操作系統(tǒng)體積小,實時性強,開放源代碼的實時操作系統(tǒng)C/OS就屬這類。芯片技術(shù)的發(fā)展使得高端設(shè)備也成為嵌入式系統(tǒng)。這類系統(tǒng)通常具體和計算機主板相似的結(jié)構(gòu),使用的CPU是功能強大的16位和32位微處理器。信息化家電、掌上電腦、機頂盒、WAP手機,WinCE、P

21、ALMOS和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īng)用系統(tǒng)架構(gòu)的開發(fā)越來越復(fù)雜,嵌入式操作系統(tǒng)軟件的開發(fā)往往開始得很晚,導(dǎo)致軟硬件的集成被推遲,所以,很可能導(dǎo)致研發(fā)出有設(shè)計錯誤的產(chǎn)品,錯失市場機會,造成設(shè)計反復(fù)、成本高昂等問題。因此,軟件成為設(shè)計開發(fā)的關(guān)鍵,軟件需要在標(biāo)準(zhǔn)化平臺上運行,軟件發(fā)展需要工具支持,軟件發(fā)展不斷促進標(biāo)準(zhǔn)的建立,如MIPI、OpenGL、JSR184等。 1

22、.2 本課題研究的目的和意義 嵌入式操作系統(tǒng)是嵌入式系統(tǒng)發(fā)展到一定階段的產(chǎn)物,是為了滿足日益復(fù)雜的嵌入式系統(tǒng)設(shè)計的要求而產(chǎn)生的。隨著微處理器功能的不斷提升,嵌入式操作系統(tǒng)的應(yīng)用范圍也變得越來越強大。對基于特定嵌入式操作系統(tǒng)上的軟件設(shè)計研究已成為了近年來的熱點,并且對于嵌入式操作系統(tǒng)在實際工程中的推廣應(yīng)用有著重要的意義。本課題研究在存儲器資源受限,但應(yīng)用非常廣泛的8位單片機(以C8051F040為例)中移入嵌入式C/OS-Ⅱ操作系統(tǒng),為8位單片機的應(yīng)用提供新的空間。 2 C/OS-Ⅱ嵌入式實時操作系統(tǒng) 2.1 選擇C/OS-Ⅱ的原因 C/O

23、S是一個實時操作系統(tǒng),是由Jean J.Labrosse于1992年首先設(shè)計編寫的。1999年,Labrosse又編寫了C/OS-Ⅱ。該操作系統(tǒng)是一個高度簡潔、可ROM固化、可裁剪、實現(xiàn)搶先式實時多任務(wù)的操作系統(tǒng)內(nèi)核,可用于各種微處理機系統(tǒng)。C/OS-Ⅱ可管理多達64個任務(wù),并可提供如下服務(wù): (1)信號燈 (2)互斥式信號燈 (3)事件標(biāo)志 (4)消息隊列 (5)任務(wù)管理 (6)存儲塊管理 (7)定時管理 實時執(zhí)行體一般包括一套支持實時系統(tǒng)所必需的機制。在嵌入式應(yīng)用中,這一套機制被稱為實時執(zhí)行體或?qū)崟r操作系統(tǒng)內(nèi)核。操作系統(tǒng)就是一個實時執(zhí)行體??刹眉舻捏w系結(jié)構(gòu)是指一個軟件系統(tǒng)能

24、夠支持多種應(yīng)用而無需在接口上做很大的變動。因此,可以開發(fā)出成本低、品種多的軟件產(chǎn)品。 C/OS-Ⅱ的特點如下: (1) 開放的源代碼 (2) 可移植性:絕大部分用ANSI C寫,和硬件相關(guān)的用匯編語言寫。 (3) 可固化性:只要有合適的軟件工具就可以C/OS-Ⅱ嵌入到產(chǎn)品中去。 (4) 可裁剪性:產(chǎn)品可以只調(diào)用很少的C/OS-Ⅱ,這樣可以減少存儲空間,這是依靠條件編譯來實現(xiàn)的。 (5) 占先式:C/OS-Ⅱ是運行就緒條件下優(yōu)先級最高的任務(wù)。 (6) 多任務(wù):C/OS-Ⅱ可以管理64個任務(wù),8個給系統(tǒng)。 (7) 可確定性:C/OS-Ⅱ函數(shù)調(diào)用與服務(wù)執(zhí)行時間是可知的。 (8) 任

25、務(wù)棧:使用C/OS-Ⅱ??臻g校驗函數(shù)可以確定任務(wù)有多少棧空間。 (9) 系統(tǒng)服務(wù):C/OS-Ⅱ提供例如郵箱、信號量、消息隊列等系統(tǒng)服務(wù)。 (10) 中斷管理:中斷足以使正在執(zhí)行的任務(wù)暫時掛起。 (11) 穩(wěn)定性和可靠性:C/OS-Ⅱ是基于C/OS的,已有幾百個商業(yè)應(yīng)用。 對于國內(nèi)大多數(shù)使用8051系列單片機的用戶來說,C/OS-Ⅱ具有很高的性價比,很適合這樣的嵌入式應(yīng)用。C/OS-Ⅱ是基于優(yōu)先級的搶占式實時多任務(wù)操作系統(tǒng),具有如下特點:開放源代碼,可移植性,可裁剪性,良好的穩(wěn)定性和可靠性。 C/OS-Ⅱ很容易地移植到各種各樣的CPU平臺上,只要這一種微處理機能滿足以下條件即可:具有堆

26、棧指針,可執(zhí)行CPU內(nèi)部寄存器的入棧、出棧指令;所使用的C編譯器支持內(nèi)嵌匯編指令,或者C編譯器支持可擴展、可連接匯編模塊,使得中斷控制能夠在C語言匯總實現(xiàn)。 C/OS-Ⅱ可以在絕大多數(shù)的8位、16位、32位,甚至是64位的微處理機系統(tǒng)或數(shù)字信號處理器系統(tǒng)中運行。 2.2 C/OS-Ⅱ操作系統(tǒng)內(nèi)容簡介 2.2.1 內(nèi)核結(jié)構(gòu) 就像所有的實時內(nèi)核一樣,C/OS-Ⅱ 需要在存取代碼核心區(qū)時禁止中斷,在存取完成后再將中斷重新打開。禁止中斷是為了保護核心區(qū)代碼,以免出現(xiàn)多個任務(wù)或中斷服務(wù)程序同時進入該代碼區(qū)。中斷禁止時間是實時內(nèi)核的一項最重要的指標(biāo),因為它影響著系統(tǒng)對實時事件的響應(yīng)能力。 C/O

27、S-Ⅱ試圖將這段中斷禁止時間減至最小。但是,這在很大程度上還取決于系統(tǒng)的CPU結(jié)構(gòu),以及編譯器生成的代碼質(zhì)量。CPU通常提供禁止/允許中斷的匯編指令,而用戶的編譯器必須支持從C語言中直接執(zhí)行這種操作。有一些編譯器允許用戶在C原碼中插入?yún)R編語句,這樣,就使得插入允許和禁止中斷的指令非常方便。 為了將由于上述編譯器的差異而導(dǎo)致的中斷設(shè)置差異隱藏起來,C/OS-Ⅱ了兩個宏來實現(xiàn)對中斷的允許和禁止:OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )。這兩個宏的實現(xiàn)是由CPU決定的,它們在os_cpu.h的頭文件中定義,每種CPU都會在os_cpu.h中移植實現(xiàn)這個宏。

28、OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )可以有三種不同的實現(xiàn)方法。具體使用哪種,取決于用戶的CPU能力。用戶可通過#define OS_CRITICAL_METHOD 來定義選用一種實現(xiàn)方法。 第一種方法:#define OS_CRITICAL_METHOD1 這也是最簡單的一種實現(xiàn)OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )的方法。如果用戶在中斷禁止的情況下調(diào)用了一個C/OS-Ⅱ函數(shù),而在從一個C/OS-Ⅱ函數(shù)返回時,中斷將被允許。但是,如果用戶在調(diào)用C/OS-Ⅱ之前已禁止了中斷,而一般在調(diào)用返回以后仍要求禁止中斷。

29、 第二種方法:#define OS_CRITICAL_METHOD2 這種實現(xiàn)方法在實現(xiàn)OS_ENTER_CRITICAL( )時,是將禁止的中斷狀態(tài)保留在堆棧中,然后禁止中斷。而OS_EXIT_CRTICAL( )的實現(xiàn)只需要簡單地將中斷狀態(tài)從堆棧中恢復(fù)出來。通過這種方案,無論是在中斷禁止時,還是中斷允許時調(diào)用C/OS-Ⅱ服務(wù),都可以在該調(diào)用前后保留中斷狀態(tài)。 第三種方法:# define OS_CRITICAL_METHOD3 有些編譯器提供了一些功能擴展,允許用戶獲取CPU狀態(tài)字,并可以將它存入函數(shù)的局部變量中。C/OS-Ⅱ代碼主要由C語言實現(xiàn),而C語言中的數(shù)據(jù)類型一般與硬件平臺

30、所對應(yīng)的編譯器有關(guān)。為了實現(xiàn)在各種硬件平臺上的可移植性,C/OS-Ⅱ了自己定義的基本數(shù)據(jù)類型。 C/OS-Ⅱ庫函數(shù)可以分為以下幾類:任務(wù)控制類:用于實現(xiàn)C/OS-Ⅱ啟動、任務(wù)管理、任務(wù)調(diào)度、任務(wù)優(yōu)先級設(shè)置等功能。動態(tài)內(nèi)存管理類:用于實現(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()的擴展,擴展了一些附加的功能。

31、 圖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ù)代碼并不是被真正的刪除了,而只是C/OS-Ⅱ不再理會該任務(wù)代碼,所以該任務(wù)代碼不會再運行。任務(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ù)的

32、信息。 C/OS-Ⅱ可以管理多達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-Ⅱ管理用戶的任務(wù),用戶必須要先建立任務(wù)。 用戶可以通過傳遞任務(wù)地址和其它參數(shù)到以下兩個函數(shù)之一來建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()與C/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的擴展版本,提供了一些附加的功能。用兩個函數(shù)中的

33、任何一個都可以建立任務(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)識符可以擴展C/OS-Ⅱ功能,使它可以執(zhí)行的任務(wù)數(shù)超過目前的64個。pbos是指向任務(wù)的堆棧棧底的指針,用于堆棧的檢驗。stk_size用于指定堆棧成員數(shù)目的容量。也就是說,如果堆棧的入口寬度為4字節(jié)寬,那么stk_size為10000是指堆棧有40000個字節(jié)。該參數(shù)與pbos一樣,也用于堆棧的檢驗。pext是指向用戶附加的數(shù)據(jù)域的指針,用來擴展

34、任務(wù)的OS_TCB。每個任務(wù)都有自己的堆棧空間。堆棧必須聲明為OS_STK類型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆棧空間(在編譯的時候分配)也可以動態(tài)地分配堆??臻g(在運行的時候分配)。用戶可以用C編譯器提供的malloc()函數(shù)來動態(tài)地分配堆??臻g,在動態(tài)分配中,用戶要時刻注意內(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()

35、或OSTaskCreateExt()的時候必須知道堆棧是怎樣長的,因為用戶必須得把堆棧的棧頂傳遞給以上兩個函數(shù),當(dāng)OS_CPU.H文件中的OS_STK_GROWTH置為0時,用戶需要將堆棧的最低內(nèi)存地址傳遞給任務(wù)創(chuàng)建函數(shù)。任務(wù)所需的堆棧的容量是由應(yīng)用程序指定的。用戶在指定堆棧大小的時候必須考慮任務(wù)所調(diào)用的所有函數(shù)的嵌套情況,任務(wù)所調(diào)用的所有函數(shù)會分配的局部變量的數(shù)目,以及所有可能的中斷服務(wù)例程嵌套的堆棧需求。另外,堆棧必須能儲存所有的CPU寄存器。有時候決定任務(wù)實際所需的堆??臻g大小是很有必要的。因為這樣用戶就可以避免為任務(wù)分配過多的堆??臻g,從而減少自己的應(yīng)用程序代碼所需的RAM(內(nèi)存)數(shù)量

36、。C/OS-Ⅱ提供的OSTaskStkChk()函數(shù)可以提供這種有價值的信息。 為了使用C/OS-Ⅱ的堆棧檢驗功能,必須要 做以下幾件事情:在OS_CFG.H文件中設(shè)OS_TASK_CREATE_EXT為1。用OSTaskCreateExt()建立任務(wù),并給予任務(wù)比實際需要更多的內(nèi)存空間。在OSTaskCreateExt()中,將參數(shù)opt設(shè)置為OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR。將想檢驗的任務(wù)的優(yōu)先級作為OSTaskStkChk()的參數(shù)并調(diào)用之。OSTaskStkChk()順著堆棧的棧底開始計算空閑的堆??臻g大小,具體實現(xiàn)方法是統(tǒng)計儲存值為0的

37、連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)儲存值不為0的堆棧入口。注意堆棧入口的儲存值在進行檢驗時使用的是堆棧的數(shù)據(jù)類型。 有時候刪除任務(wù)是很有必要的。刪除任務(wù),是說任務(wù)將返回并處于休眠狀態(tài),并不是說任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被C/OS-Ⅱ調(diào)用。任務(wù)的刪除意味著:它的任務(wù)控制塊從OSTCBList鏈表中移到OSTCBFreeList,這樣時鐘節(jié)拍函數(shù)中就不會處理它了,這樣調(diào)度把它置入就緒表的可能性就沒了;如果它已經(jīng)處于就緒表中,那么它將被移出,這樣調(diào)度器函數(shù)就不會處理它,這樣它被調(diào)度運行的機會就沒了;在建立任務(wù)的時候會分配給任務(wù)一個優(yōu)先級。在程序運行期間,用戶可以通過調(diào)用OSTaskChan

38、gePrio()來改變?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)先級。用戶還必須指定任務(wù)的新優(yōu)先級。因為C/OS-Ⅱ不允許多個任務(wù)具有相同的優(yōu)先級,所以O(shè)STaskChangePrio()需要檢驗新優(yōu)先級是否是合法的。 2.2.3 時間管理 C/OS-Ⅱ要求提供定時中斷來實現(xiàn)延時與超時控制等功能。這個定時中斷叫做時鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至10

39、0次。時鐘節(jié)拍的實際頻率是由用戶的應(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) OSTimeDlyResume() (4) OSTimeGet() (5) OSTimeSet() C/OS-Ⅱ提供了這樣一個系統(tǒng)服務(wù):申請該服務(wù)的任務(wù)可以延時一段時間,這段時間的長短是用時鐘節(jié)拍的數(shù)目來確定的。實現(xiàn)這個系統(tǒng)服務(wù)的函數(shù)叫做OSTimeDly()。調(diào)用該

40、函數(shù)會使C/OS-Ⅱ進行一次任務(wù)調(diào)度,并且執(zhí)行下一個優(yōu)先級最高的就緒態(tài)任務(wù)。任務(wù)調(diào)用OSTimeDly()后,一旦規(guī)定的時間期滿或者有其它的任務(wù)通過調(diào)用OSTimeDlyResume()取消了延時,它就會馬上進入就緒狀態(tài)。只有當(dāng)該任務(wù)在所有就緒任務(wù)中具有最高的優(yōu)先級時,它才會立即運行。 OSTimeDly()雖然是一個非常有用的函數(shù),但應(yīng)用程序需要知道延時時間對應(yīng)的時鐘節(jié)拍的數(shù)目。用戶可以使用定義全局常數(shù)OS_TICKS_PER_SEC的方法將時間轉(zhuǎn)換成時鐘段,但這種方法有時顯得比較愚笨。如果增加了OSTimeDlyHMSM()函數(shù)后,用戶就可以按小時(H)、分(M)、秒(S)和毫秒(m)來

41、定義時間了,這樣會顯得更自然些。與OSTimeDly()一樣,調(diào)用OSTimeDlyHMSM()函數(shù)也會使C/OS-Ⅱ進行一次任務(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ù)中具有最高的優(yōu)先級時,它才會立即運行。 C/OS-Ⅱ允許用戶結(jié)束延時正處于延時期的任務(wù)。延時的任務(wù)可以不等待延時期滿,而是通過其它任務(wù)取消延時來使自己處于就緒態(tài)。這可以通過調(diào)用OSTimeDlyResume()和指定要恢復(fù)的任務(wù)的優(yōu)先級來

42、完成。實際上,OSTimeDlyResume()也可以喚醒正在等待事件的任務(wù),雖然這一點并沒有提到過。在這種情況下,等待事件發(fā)生的任務(wù)會考慮是否終止等待事件。 無論時鐘節(jié)拍何時發(fā)生,C/OS-Ⅱ都會將一個32位的計數(shù)器加1。這個計數(shù)器在用戶調(diào)用OSStart()初始化多任務(wù)和4,294,967,295個節(jié)拍執(zhí)行完一遍的時候從0開始計數(shù)。在時鐘節(jié)拍的頻率等于100Hz的時候,這個32位的計數(shù)器每隔497天就重新開始計數(shù)。 用戶可以通過調(diào)用OSTimeGet()來獲得該計數(shù)器的當(dāng)前值。也可以通過調(diào)用OSTimeSet()來改變該計數(shù)器的值注意,在訪問OSTime的時候中斷是關(guān)掉的。這是因為在大

43、多數(shù)8位處理器上增加和拷貝一個32位的數(shù)都需要數(shù)條指令,這些指令一般都需要一次執(zhí)行完畢,而不能被中斷等因素打斷。 2.2.4 任務(wù)間通信與同步 在C/OS-Ⅱ中,有多種方法可以保護任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通訊。這里只講其中的兩種:一是利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來關(guān)閉中斷和打開中斷。當(dāng)兩個任務(wù)或者一個任務(wù)和一個中斷服務(wù)子程序共享某些數(shù)據(jù)時,可以采用這種方法。二是利用函數(shù)OSSchedLock()和OSSchedUnlock()對C/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開鎖。用這種方法也可以實現(xiàn)數(shù)據(jù)的共享。 圖2-2

44、事件控制塊的使用 圖2.2表示任務(wù)和中斷服務(wù)子程序之間是如何進行通訊的。一個任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊ECB(Event Control Blocks)來向另外的任務(wù)發(fā)信號。這里,所有的信號都被看成是事件(Event)。這也說明為什么上面把用于通訊的數(shù)據(jù)結(jié)構(gòu)叫做事件控制塊。 一個任務(wù)還可以等待另一個任務(wù)或中斷服務(wù)子程序給它發(fā)送信號。只有任務(wù)可以等待事件發(fā)生,中斷服務(wù)子程序是不能這樣做的。對于處于等待狀態(tài)的任務(wù),還可以給它指定一個最長等待時間,以此來防止因為等待的事件沒有發(fā)生而無限期地等下去。 多個任務(wù)可以同時等待同一個事件的發(fā)生。在這種情況下,當(dāng)該事件發(fā)生后,所有等待該事件

45、的任務(wù)中,優(yōu)先級最高的任務(wù)得到了該事件并進入就緒狀態(tài),準(zhǔn)備執(zhí)行。上面講到的事件,可以是信號量、郵箱或者消息隊列等。當(dāng)事件控制塊是一個信號量時,任務(wù)可以等待它,也可以給它發(fā)送消息。 2.2.5 內(nèi)存管理 在ANSI C中可以用malloc()和free()兩個函數(shù)動態(tài)地分配內(nèi)存和釋放內(nèi)存。但是,在嵌入式實時操作系統(tǒng)中,多次這樣做會把原來很大的一塊連續(xù)內(nèi)存區(qū)域,逐漸地分割成許多非常小而且彼此又不相鄰的內(nèi)存區(qū)域,也就是內(nèi)存碎片。由于這些碎片的大量存在,使得程序到后來連非常小的內(nèi)存也分配不到。在任務(wù)堆棧中,講過用malloc()函數(shù)來分配堆棧時,也討論過內(nèi)存碎片

46、的問題。另外,由于內(nèi)存管理算法的原因,malloc()和free()函數(shù)執(zhí)行時間是不確定的。 在C/OS-Ⅱ中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個分區(qū)中包含有整數(shù)個大小相同的內(nèi)存塊。利用這種機制,C/OS-Ⅱ 對malloc()和free()函數(shù)進行了改進,使得它們可以分配和釋放固定大小的內(nèi)存塊。這樣一來,malloc()和free()函數(shù)的執(zhí)行時間也是固定的了。 如圖2.3,在一個系統(tǒng)中可以有多個內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時必須重新放回它以前所屬于的內(nèi)存分區(qū)。 顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片

47、問題就得到了解決。為了便于內(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系列單片機的特點 3.1 C8051F系列單片機的特點 Cygnal公司推出的C8051F系列單片機將80C51系列單片機從MCU推向了SOC(片上系列)時代,其主要特點是: ⑴指令運行速度大大提高。C8051F系列采用CIP-51的CPU模式,指令以時鐘周期為運行單位。與8051相比,相同的時鐘下,單周期指令運行速度為原來的1

48、2倍;全指令集平均運行速度為原來的9.5倍。 ⑵I/O從固定方式到交叉開關(guān)配置。C8051F系列采用開關(guān)網(wǎng)絡(luò)以硬件方式實現(xiàn)I/O端口的靈活配置。在這種通過交叉開關(guān)配置的I/O端口系統(tǒng)中,單片機外部為通用I/O口,內(nèi)部有輸入/輸出的電路單元,通過相應(yīng)的配置寄存器控制的交叉開關(guān)配置到所選擇的端口上。 ⑶為單片機提供了一個完善的時鐘系統(tǒng)。當(dāng)程序運行時,可實現(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)測試提供了邊界掃描功能。 ⑸從引腳復(fù)位到多源復(fù)位。

49、C8051F的多復(fù)位源提供了上電復(fù)位、掉電復(fù)位、外部引腳復(fù)位、軟件復(fù)位、時鐘檢測復(fù)位、比較0復(fù)位、WDT復(fù)位和引腳配置復(fù)位。眾多的復(fù)位源為保障系統(tǒng)的安全、操作的靈活以及零功耗系統(tǒng)設(shè)計帶來極大的好處。 3.2 C8051F040的性能概述 C8051F040在一個芯片內(nèi)集成了構(gòu)成單片機數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有的模擬和數(shù)字外設(shè)及其他功能部件。它的供電電壓為2.7~3.6V,帶有內(nèi)部可編程振蕩器。 C8051F040的A/D轉(zhuǎn)換部分包括:一個12位ADCO子系統(tǒng),可以測量12路外部輸入和1路內(nèi)部溫度傳感器輸出,最高轉(zhuǎn)換速度為100KS/s;一個8位ADC1子系統(tǒng),可以測量8路外部輸入

50、,最高轉(zhuǎn)換速度為500KS/s。C8051F040的ADC有單端輸入和差分輸入兩種測量方式,另外它還集成了跟蹤保持電路和可編程窗口檢測器。同時,C8051F040有兩個12位電壓方式DAC。每個DAC的輸出擺幅均為0~VREF(對應(yīng)的輸入碼范圍是0x000~0Xfff)。 C8051F040的內(nèi)核采用流水線指令結(jié)構(gòu),70%的指令的執(zhí)行時間為1個或2個系統(tǒng)時鐘周期,它的最高時鐘頻率可達25MHz。同時,它具有64KB的FLASH,可以進行在系統(tǒng)編程,扇區(qū)大小512B,另外,它還有64KB的外部數(shù)據(jù)存儲器接口,可以編程為復(fù)用和非復(fù)用方式。 C8051F040有8B寬的端口I/O,所有口線均耐5

51、V電壓。它可以同時使用SMBus,SPI以及2個UART串口。另外,它還有可編程的16位計數(shù)器/定時器陣列,5個捕捉/比較模塊,5個通用16位計數(shù)器/定時器以及專用的看門狗定時器。 除上述功能外,C8051F040還集成了BOTSH-CAN,它兼容CAN技術(shù)規(guī)范2。0A和2.0B,主要由CAN內(nèi)核、消息RAM(獨立于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)都有它自己的識別掩碼

52、,所有的數(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)生。

53、 4 C/OS-Ⅱ在C8051F040上的移植 4.1 C/OS-Ⅱ硬件平臺的選擇 Cygnal公司(現(xiàn)Sillicon Labs公司)的C8051F系列單片機是完全集成的混合信號系統(tǒng)級芯片(SOC),具有與MCS-51指令集完全兼容的高速 CIP-51內(nèi)核。C8051F系列單片機在一個芯片內(nèi)部集成了構(gòu)成一個單片機數(shù)據(jù)采集或控制系統(tǒng)所需要的幾乎所有模擬和數(shù)字外設(shè)及其他功能部件,它是完全集成的混合信號片上系統(tǒng)型MCU,具有64個數(shù)字I/O引腳,C8051F040具有CAN2.0B控制器、 4352字

54、節(jié)(256+4k)內(nèi)部集成的數(shù)據(jù)RAM和64k字節(jié)在系統(tǒng)可編程FLASH程序存儲器。C8051F040是C8051F04X系列單片機中一種。其特性如下: (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可

55、在系統(tǒng)編程的FLASH存儲器 (9)4352字節(jié)的片內(nèi)RAM (10)可尋址64KB地址空間的外部數(shù)據(jù)存儲器接口 (11)硬件實現(xiàn)的SPI、SMBus/12C和兩個UART串行接口 (12)5個通用的16位定時器 (13)具有6個捕捉/比較模塊的可編程計數(shù)器/定時器陣列 (14)片內(nèi)看門狗定時器、VDD監(jiān)視器和溫度傳感器 具有片內(nèi)VDD監(jiān)視器、看門狗定時器和時鐘振蕩器的C8051F040MCU是真正能獨立工作的片上系統(tǒng)。所有模擬和數(shù)字外設(shè)均可由用戶固件使能/禁止和配置。另外,C/OS-Ⅱ的運行平臺需要一定的條件如下: (1)由與C/OS-Ⅱ主要是由C語言編寫的,所以要求所選CP

56、U的C編譯器能夠產(chǎn)生可重入的代碼。 (2)所用C語言提供對中斷控制的方法。 (3)所用CPU支持中斷,并且能夠產(chǎn)生定時中斷,以便實現(xiàn)任務(wù)的切換; (4)所用CPU支持具有足夠深度的硬件堆棧; (5)所用CPU的指令系統(tǒng)中,應(yīng)含有可將堆棧指針和其他CPU寄存器的內(nèi)容入棧/出棧,或?qū)懭?讀出內(nèi)存的指令。 由此可見,C8051F040是適合實時操作系統(tǒng)C/OS-Ⅱ的移植的。選擇C8051F040單片機是正確的。 4.2 C/OS-Ⅱ移植內(nèi)容 開發(fā)環(huán)境選用Keil集成開發(fā)環(huán)境,它支持C8051F040單片機,并且具有很高的編譯效率,目標(biāo)板是基于C8051F040的系統(tǒng)。C8051F040

57、單片機有JTAG接口,通過Keil開發(fā)環(huán)境與目標(biāo)板進行在系統(tǒng)編程和非侵入式的全速、在系統(tǒng)調(diào)試。由C/OS-Ⅱ的軟件體系結(jié)構(gòu)如圖4.1可知,進行C/OS-Ⅱ的移植只需要修改與硬件有關(guān)的OS_CPU.H、OS_CPU_C.C、OS_CPU_A.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/O

58、S-Ⅱ體系結(jié)構(gòu)示意圖 4.2.1 OS_CPU.H頭文件的修改 OS_CPU.H 文件中包含與處理器相關(guān)的常量,宏和結(jié)構(gòu)體的定義。由于不同的處理器有不同的字長,C/OS-Ⅱ的移植需要重新定義一系列的數(shù)據(jù)結(jié)構(gòu)。需要改動部分主要是有三點: 1、C8051F單片機的數(shù)據(jù)字節(jié)是8位,故堆棧的數(shù)據(jù)類型OS-STK定義為8位。修改如下: typedef unsigned char OS-STK; 2、C8051F單片機的堆棧指針SP的生長是從低字節(jié)到高字節(jié),也就是從下往上增長,因此應(yīng)這樣修改: #define OS-STK-GROWTH 0; 3、采用的關(guān)中斷的方式是,先將中斷禁止?fàn)顟B(tài)保存

59、到堆棧中,然后禁止中斷。所以開關(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_TASK_SW() OSCtXSW(); 4.2.2 OS_CPU_A.ASM匯編文件的修改 C/OS-Ⅱ的移植需要用戶改寫OS_CPU_A.ASM中的四個函數(shù): (1)OSStartHighRdy() (2)OSCtxSw() (3)OSI

60、ntCtxSw() (4)OSTickISR() 該文件主要包括任務(wù)切換的處理和系統(tǒng)時鐘的定時,主要的子程序函數(shù)有OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()和OSTickISR()。 因為匯編子程序?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)并且開始運行。 OSStartHighRdy()函數(shù)從處于最高優(yōu)先級任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,從該堆棧中恢復(fù)所有的寄存器內(nèi)容,并把OSRunning置為

61、TRUE后返回執(zhí)行該任務(wù)。系統(tǒng)直接進行任務(wù)切換或者應(yīng)用程序通過處理器軟件陷阱指令執(zhí)行時,系統(tǒng)將通過調(diào)用OSC-txSw()函數(shù)完成上下文的切換。 該函數(shù)完成的操作是:將通用寄存器壓人硬件堆棧,從當(dāng)前任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,把當(dāng)前硬件堆棧里的內(nèi)容全部保存到任務(wù)堆棧中,同時保存仿真堆棧指針?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ù)

62、子程序中進入的,必須在開始調(diào)整堆棧指針SP,去掉在調(diào)用OSIntExit(),OSIntCtxSw()過程中壓人堆棧的多余內(nèi)容。 因為C/OS-Ⅱ的系統(tǒng)調(diào)度和系統(tǒng)定時都是由系統(tǒng)節(jié)拍決定的,因此需要提供周期性的系統(tǒng)時鐘信號,C/OS-Ⅱ建議使用10ms~200ms的系統(tǒng)時鐘。由于系統(tǒng)在每一個節(jié)拍都要檢查是否由高優(yōu)先級的任務(wù)在等待,如果有就進行系統(tǒng)的任務(wù)切換,這樣當(dāng)每個時鐘周期越短,系統(tǒng)的任務(wù)切換就越頻繁,CPU的負(fù)荷就越重,從而引起系統(tǒng)不能正常工作。相反,當(dāng)時鐘周期越長,任務(wù)切換的頻率越低,導(dǎo)致不能充分應(yīng)用CPU,任務(wù)的響應(yīng)時間變長。所以要根據(jù)系統(tǒng)負(fù)荷的大小合理的確定系統(tǒng)時鐘,在這里采用定時器

63、0作為產(chǎn)生20ms的系統(tǒng)定時,系統(tǒng)定時是一個中斷服務(wù)子程序。該中斷服務(wù)子程序是OSTicklSR()函數(shù),當(dāng)定時器0發(fā)生中斷時進入中斷服務(wù)子程序。 如圖4.2可知,任務(wù)堆棧中保存的仿真堆棧與系統(tǒng)硬件堆棧相向生長,中間為空閑間隔,顯然C/OS-Ⅱ原型提供的堆棧檢測函數(shù)OSTaskStrChk()將失效。 因為所有任務(wù)堆棧使用相同大小的空間,所以占用空間最大的任務(wù)函數(shù)的空間大小為防真堆棧的空間大小。這里將任務(wù)堆??臻g大小用宏定義在OS_CFG.H文件中,可以根據(jù)實際情況作以下修改。 圖4-2 堆棧結(jié)構(gòu)圖 (1)OSCtxSw(),該函數(shù)完成的是任務(wù)級切換工作,其目的是為了保證處理器永遠

64、運行就緒表中優(yōu)先級最高的任務(wù)。 Void OSCtxSw(void) ﹛ 通過自定義的宏操作PUSHALL,將寄存器R0-R7、DRH、DPL、B、ACC和PSW保存草硬件堆棧中;得到硬件堆棧長度=SP-#OSStkStart; 根據(jù)長度值將內(nèi)容通過字節(jié)拷貝的方式復(fù)制到當(dāng)前任務(wù)堆棧中,同時將仿真指針?C_XBP的值也復(fù)制到任務(wù)堆棧中; 調(diào)用用戶定義函數(shù)OSTaskSwHook(); OSTCBCur=OSTCBHighRy; OSPrioCur=OSPrioHighRy; 通過變量OSTCBCur->OSTCBStkPtr獲得要恢復(fù)的任務(wù)的任務(wù)堆棧指針; 將任務(wù)堆棧中內(nèi)容復(fù)制

65、到硬件堆棧中,恢復(fù)SP和?C_XBP的值; 執(zhí)行宏操作POPALL恢復(fù)處理器寄存器的值; 執(zhí)行中斷返回指令RETI; ﹜ (2)OSStartHighRdy(),該函數(shù)是由操作系統(tǒng)啟動函數(shù)OSStart()調(diào)用的,功能是使系統(tǒng)能即使運行優(yōu)先級最高的就緒任務(wù)。對C8051F040而言,處理如下: Void OSStarHighRdy(void) ﹛ 調(diào)用用戶可自定義的函數(shù)OSTashSWHook(); 獲取任務(wù)堆棧指針:任務(wù)堆棧指針=OSTCBH個時Rdy->OSTCBSskPtr; 要恢復(fù)內(nèi)容的長度=任務(wù)堆棧起駛地址中存放的內(nèi)容; 根據(jù)長度,通過字節(jié)拷貝將內(nèi)容復(fù)制到系統(tǒng)i

66、data空間中的硬件堆棧內(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個時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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!