畢業(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頁(yè)珍藏版)》請(qǐng)?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)的分類(lèi)和發(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)容簡(jiǎn)介…………………………………………………...…………..7 2.2.1 內(nèi)核結(jié)構(gòu)……………………………………
3、………………………..………………..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)……………………………………………………………..…13
4、 3.2 C8051F040的性能概述……………………………………………….…………………...13 4. C/OS-Ⅱ在C8051F040上的移植………………………………………………………….…..15 4.1 C/OS-Ⅱ硬件平臺(tái)的選擇………………………………………………….…………..…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上的運(yùn)行測(cè)試……………………………………..……….……19 4.4 基于C/OS-Ⅱ的C8051F040運(yùn)用系統(tǒng)開(kāi)發(fā)………………………………..…….……..21 5. 結(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ù)字化技
6、術(shù)得到了迅猛發(fā)展,掀起了一場(chǎng)數(shù)字化技術(shù)革命,促使消費(fèi)電子、計(jì)算機(jī)、通信一體化趨勢(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-Ⅱ?qū)⒃谝院蟮那度胧较到y(tǒng)設(shè)計(jì)中得到廣泛應(yīng)用。 關(guān)鍵詞:C/OS-Ⅱ;C8051F
7、040;嵌入式實(shí)時(shí)操作系統(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)誕生于微型機(jī)時(shí)代,隨著微型機(jī)技術(shù)的完善和發(fā)展,微型機(jī)出現(xiàn)了嵌入式應(yīng)用環(huán)境,傳統(tǒng)電子設(shè)備的智能化不同于通用機(jī)的嵌入式應(yīng)用。現(xiàn)代計(jì)算機(jī)有通用計(jì)算機(jī)和嵌入式計(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ì)象體系中的
12、專(zhuān)用計(jì)算機(jī)應(yīng)用系統(tǒng)。其嵌入性是指非獨(dú)立存在的物理空間,專(zhuān)用性是滿足對(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)性能,除了需要對(duì)硬件和軟件進(jìn)行優(yōu)化外,還會(huì)引入總線的概念。與普通計(jì)算機(jī)系統(tǒng)類(lèi)似,嵌入式系統(tǒng)仍然包括微處理器、存儲(chǔ)設(shè)備和輸入、輸出設(shè)備,但是它與一般的PC系統(tǒng)還有很大的區(qū)別。一般來(lái)講,嵌入式系統(tǒng)在功耗
13、、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約。 作為二十世紀(jì)人類(lèi)最偉大的發(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中的鍵盤(pán),都是最典型最簡(jiǎn)單的嵌入式系統(tǒng)。如果說(shuō)PC機(jī)的出現(xiàn)構(gòu)建了信息產(chǎn)業(yè)的框架,推動(dòng)了整個(gè)信息產(chǎn)業(yè)和人類(lèi)文明的發(fā)展和前進(jìn),那么嵌入式系統(tǒng)的發(fā)展將會(huì)更加完善這個(gè)框架,并成為信息產(chǎn)業(yè)發(fā)展的加速器。 根據(jù)IEEE的定義,嵌入式系統(tǒng)是控制、監(jiān)視或者輔
14、助設(shè)備機(jī)器和車(chē)間運(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)格要求的專(zhuā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)。綜觀嵌入式系統(tǒng)技術(shù)的發(fā)展,大致經(jīng)歷了以下三個(gè)階段: (1)第一階段是嵌入式技術(shù)的早期階段。 嵌入式操作系統(tǒng)的發(fā)展歷史悠久,可以說(shuō)它是伴隨著數(shù)字計(jì)算機(jī)的出現(xiàn)而誕生的。但早期的
15、計(jì)算機(jī)主要器件由電子管、晶體管等組成,體積過(guò)于龐大,因而阻礙了嵌入式系統(tǒng)的發(fā)展。早期系統(tǒng)以功能簡(jiǎn)單的專(zhuān)用計(jì)算機(jī)或單片機(jī)為核心的可編程控制器形式存在,具有監(jiān)測(cè)、伺服、設(shè)備指示等功能。這一階段系統(tǒng)的主要特點(diǎn)是系統(tǒng)結(jié)構(gòu)和功能都相對(duì)單一,處理效率較低,存儲(chǔ)容量較小,幾乎沒(méi)有用戶接口,比較適合于各類(lèi)專(zhuān)用領(lǐng)域。 (2) 第二階段是以嵌入式處理器/控制器和嵌入式操作系統(tǒng)為標(biāo)志的嵌入式系統(tǒng)。 隨著并行技術(shù)、先進(jìn)控制、流水線、強(qiáng)有力的中斷系統(tǒng)、操作系統(tǒng)等技術(shù)的發(fā)展,特別是在微處理器問(wèn)世以后,嵌入式系統(tǒng)得到了真正的發(fā)展。微處理器的廣泛應(yīng)用形成了一個(gè)廣闊的嵌入式應(yīng)用市場(chǎng)。 這一階段系統(tǒng)的主要特點(diǎn)是計(jì)算機(jī)硬件出
16、現(xiàn)了高可靠、低功耗的嵌入式處理器;同時(shí),各類(lèi)商業(yè)嵌入式操作系統(tǒng)開(kāi)始出現(xiàn)并得到遜色發(fā)展,嵌入式操作系統(tǒng)能運(yùn)行于各種不同類(lèi)型的微處理器上,兼容性好;操作系統(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)越小,功能越來(lái)越強(qiáng)。隨著NOC的出現(xiàn),以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益密切,嵌入式系統(tǒng)的網(wǎng)絡(luò)化趨勢(shì)將推動(dòng)其更加快速的
17、發(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í)性要求并不高。 (4)電信設(shè)備、控制系統(tǒng)要求的高可靠性,對(duì)嵌入式系統(tǒng)提出了新的要求。 (5)各類(lèi)通用機(jī)上使用的新技術(shù)、新觀念正逐
18、步移植到嵌入式系統(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è)備的功能不再單一,電氣結(jié)構(gòu)也更復(fù)雜。 后PC時(shí)代,計(jì)算機(jī)將無(wú)處不在,家用電器將向數(shù)字化和
19、網(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)橐子谑褂?,攜帶方便、價(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)造新的銷(xiāo)售記錄。整合手機(jī)模塊,為移動(dòng)計(jì)算設(shè)備提供語(yǔ)音功能,也將是大勢(shì)所趨。 1.1.2 嵌入式操作系統(tǒng)的分類(lèi)和發(fā)展 國(guó)外的嵌入式操作系統(tǒng)有VXWORK、QNX
20、、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)、汽車(chē)發(fā)動(dòng)機(jī)系統(tǒng)和防報(bào)死系統(tǒng)、民用微波爐、洗衣機(jī)、冰箱等。這類(lèi)應(yīng)用客觀上要求操作系統(tǒng)體積小,實(shí)時(shí)性強(qiáng),開(kāi)放源代碼的實(shí)時(shí)操作系統(tǒng)C/OS就屬這類(lèi)。芯片技術(shù)的發(fā)展使得高端設(shè)備也成為嵌入式系統(tǒng)。這類(lèi)系統(tǒng)通常具體和計(jì)算機(jī)主板相似的結(jié)構(gòu),使用的CPU是功能強(qiáng)大的16位和32位微處理器。信息化家電、掌上電腦、機(jī)頂盒、WAP手機(jī),WinCE、P
21、ALMOS和Linux便屬于這類(lèi)操作系統(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ā)展不斷促進(jìn)標(biāo)準(zhǔn)的建立,如MIPI、OpenGL、JSR184等。 1
22、.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/O
23、S是一個(gè)實(shí)時(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ī)制被稱(chēng)為實(shí)時(shí)執(zhí)行體或?qū)崟r(shí)操作系統(tǒng)內(nèi)核。操作系統(tǒng)就是一個(gè)實(shí)時(shí)執(zhí)行體??刹眉舻捏w系結(jié)構(gòu)是指一個(gè)軟件系統(tǒng)能
24、夠支持多種應(yīng)用而無(wú)需在接口上做很大的變動(dòng)。因此,可以開(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) 任
25、務(wù)棧:使用C/OS-Ⅱ??臻g校驗(yàn)函數(shù)可以確定任務(wù)有多少棧空間。 (9) 系統(tǒng)服務(wù):C/OS-Ⅱ提供例如郵箱、信號(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-Ⅱ具有很高的性?xún)r(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ī)能滿足以下條件即可:具有堆
26、棧指針,可執(zhí)行CPU內(nèi)部寄存器的入棧、出棧指令;所使用的C編譯器支持內(nèi)嵌匯編指令,或者C編譯器支持可擴(kuò)展、可連接匯編模塊,使得中斷控制能夠在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/O
27、S-Ⅱ試圖將這段中斷禁止時(shí)間減至最小。但是,這在很大程度上還取決于系統(tǒng)的CPU結(jié)構(gòu),以及編譯器生成的代碼質(zhì)量。CPU通常提供禁止/允許中斷的匯編指令,而用戶的編譯器必須支持從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è)宏。
28、OS_ENTER_CRITICAL( )和OS_EXIT_CRTICAL( )可以有三種不同的實(shí)現(xiàn)方法。具體使用哪種,取決于用戶的CPU能力。用戶可通過(guò)#define 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)用返回以后仍要求禁止中斷。
29、 第二種方法:#define OS_CRITICAL_METHOD2 這種實(shí)現(xiàn)方法在實(shí)現(xiàn)OS_ENTER_CRITICAL( )時(shí),是將禁止的中斷狀態(tài)保留在堆棧中,然后禁止中斷。而OS_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ù)類(lèi)型一般與硬件平臺(tái)
30、所對(duì)應(yīng)的編譯器有關(guān)。為了實(shí)現(xiàn)在各種硬件平臺(tái)上的可移植性,C/OS-Ⅱ了自己定義的基本數(shù)據(jù)類(lèi)型。 C/OS-Ⅱ庫(kù)函數(shù)可以分為以下幾類(lèi):任務(wù)控制類(lèi):用于實(shí)現(xiàn)C/OS-Ⅱ啟動(dòng)、任務(wù)管理、任務(wù)調(diào)度、任務(wù)優(yōu)先級(jí)設(shè)置等功能。動(dòng)態(tài)內(nèi)存管理類(lè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ò)展了一些附加的功能。
31、 圖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ù)代碼并不是被真正的刪除了,而只是C/OS-Ⅱ不再理會(huì)該任務(wù)代碼,所以該任務(wù)代碼不會(huì)再運(yùn)行。任務(wù)看起來(lái)與任何C函數(shù)一樣,具有一個(gè)返回類(lèi)型和一個(gè)參數(shù),只是它從不返回。任務(wù)的返回類(lèi)型必須被定義成void型。這里提到的函數(shù)可以在OS_TASK文件中找到。其內(nèi)容包括如何在用戶的應(yīng)用程序中建立任務(wù)、刪除任務(wù)、改變?nèi)蝿?wù)的優(yōu)先級(jí)、掛起和恢復(fù)任務(wù),以及獲得有關(guān)任務(wù)的
32、信息。 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-Ⅱ管理用戶的任務(wù),用戶必須要先建立任務(wù)。 用戶可以通過(guò)傳遞任務(wù)地址和其它參數(shù)到以下兩個(gè)函數(shù)之一來(lái)建立任務(wù):OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()與C/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的擴(kuò)展版本,提供了一些附加的功能。用兩個(gè)函數(shù)中的
33、任何一個(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-Ⅱ功能,使它可以執(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ò)展
34、任務(wù)的OS_TCB。每個(gè)任務(wù)都有自己的堆棧空間。堆棧必須聲明為OS_STK類(lèi)型,并且由連續(xù)的內(nèi)存空間組成。用戶可以靜態(tài)分配堆棧空間(在編譯的時(shí)候分配)也可以動(dòng)態(tài)地分配堆??臻g(在運(yùn)行的時(shí)候分配)。用戶可以用C編譯器提供的malloc()函數(shù)來(lái)動(dòng)態(tài)地分配堆??臻g,在動(dòng)態(tài)分配中,用戶要時(shí)刻注意內(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ù)分配堆棧空間C/OS-Ⅱ 支持的處理器的堆棧既可以從上(高地址)往下(低地址)長(zhǎng)也可以從下往上長(zhǎng)。 用戶在調(diào)用OSTaskCreate()
35、或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í)候必須考慮任務(wù)所調(diào)用的所有函數(shù)的嵌套情況,任務(wù)所調(diào)用的所有函數(shù)會(huì)分配的局部變量的數(shù)目,以及所有可能的中斷服務(wù)例程嵌套的堆棧需求。另外,堆棧必須能儲(chǔ)存所有的CPU寄存器。有時(shí)候決定任務(wù)實(shí)際所需的堆??臻g大小是很有必要的。因?yàn)檫@樣用戶就可以避免為任務(wù)分配過(guò)多的堆??臻g,從而減少自己的應(yīng)用程序代碼所需的RAM(內(nèi)存)數(shù)量
36、。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_TASK_OPT_STK_CLR。將想檢驗(yàn)的任務(wù)的優(yōu)先級(jí)作為OSTaskStkChk()的參數(shù)并調(diào)用之。OSTaskStkChk()順著堆棧的棧底開(kāi)始計(jì)算空閑的堆棧空間大小,具體實(shí)現(xiàn)方法是統(tǒng)計(jì)儲(chǔ)存值為0的
37、連續(xù)堆棧入口的數(shù)目,直到發(fā)現(xiàn)儲(chǔ)存值不為0的堆棧入口。注意堆棧入口的儲(chǔ)存值在進(jìn)行檢驗(yàn)時(shí)使用的是堆棧的數(shù)據(jù)類(lèi)型。 有時(shí)候刪除任務(wù)是很有必要的。刪除任務(wù),是說(shuō)任務(wù)將返回并處于休眠狀態(tài),并不是說(shuō)任務(wù)的代碼被刪除了,只是任務(wù)的代碼不再被C/OS-Ⅱ調(diào)用。任務(wù)的刪除意味著:它的任務(wù)控制塊從OSTCBList鏈表中移到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)用OSTaskChan
38、gePrio()來(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)先級(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至10
39、0次。時(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) OSTimeDlyResume() (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)用該
40、函數(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ì)應(yīng)的時(shí)鐘節(jié)拍的數(shù)目。用戶可以使用定義全局常數(shù)OS_TICKS_PER_SEC的方法將時(shí)間轉(zhuǎn)換成時(shí)鐘段,但這種方法有時(shí)顯得比較愚笨。如果增加了OSTimeDlyHMSM()函數(shù)后,用戶就可以按小時(shí)(H)、分(M)、秒(S)和毫秒(m)來(lái)
41、定義時(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ù)中具有最高的優(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)
42、完成。實(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í)候,這個(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)樵诖?/p>
43、多數(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ù)子程序共享某些數(shù)據(jù)時(shí),可以采用這種方法。二是利用函數(shù)OSSchedLock()和OSSchedUnlock()對(duì)C/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開(kāi)鎖。用這種方法也可以實(shí)現(xiàn)數(shù)據(jù)的共享。 圖2-2
44、事件控制塊的使用 圖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ì)于處于等待狀態(tài)的任務(wù),還可以給它指定一個(gè)最長(zhǎng)等待時(shí)間,以此來(lái)防止因?yàn)榈却氖录](méi)有發(fā)生而無(wú)限期地等下去。 多個(gè)任務(wù)可以同時(shí)等待同一個(gè)事件的發(fā)生。在這種情況下,當(dāng)該事件發(fā)生后,所有等待該事件
45、的任務(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)存碎片。由于這些碎片的大量存在,使得程序到后來(lái)連非常小的內(nèi)存也分配不到。在任務(wù)堆棧中,講過(guò)用malloc()函數(shù)來(lái)分配堆棧時(shí),也討論過(guò)內(nèi)存碎片
46、的問(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ū)中得到不同大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬于的內(nèi)存分區(qū)。 顯然,采用這樣的內(nèi)存管理算法,上面的內(nèi)存碎片
47、問(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)行單位。與8051相比,相同的時(shí)鐘下,單周期指令運(yùn)行速度為原來(lái)的1
48、2倍;全指令集平均運(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è)試提供了邊界掃描功能。 ⑸從引腳復(fù)位到多源復(fù)位。
49、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.7~3.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子系統(tǒng),可以測(cè)量8路外部輸入
50、,最高轉(zhuǎn)換速度為500KS/s。C8051F040的ADC有單端輸入和差分輸入兩種測(cè)量方式,另外它還集成了跟蹤保持電路和可編程窗口檢測(cè)器。同時(shí),C8051F040有兩個(gè)12位電壓方式DAC。每個(gè)DAC的輸出擺幅均為0~VREF(對(duì)應(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ù)存儲(chǔ)器接口,可以編程為復(fù)用和非復(fù)用方式。 C8051F040有8B寬的端口I/O,所有口線均耐5
51、V電壓。它可以同時(shí)使用SMBus,SPI以及2個(gè)UART串口。另外,它還有可編程的16位計(jì)數(shù)器/定時(shí)器陣列,5個(gè)捕捉/比較模塊,5個(gè)通用16位計(jì)數(shù)器/定時(shí)器以及專(zhuān)用的看門(mén)狗定時(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)都有它自己的識(shí)別掩碼
52、,所有的數(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)生。
53、 4 C/OS-Ⅱ在C8051F040上的移植 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字
54、節(jié)(256+4k)內(nèi)部集成的數(shù)據(jù)RAM和64k字節(jié)在系統(tǒng)可編程FLASH程序存儲(chǔ)器。C8051F040是C8051F04X系列單片機(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可
55、在系統(tǒng)編程的FLASH存儲(chǔ)器 (9)4352字節(jié)的片內(nèi)RAM (10)可尋址64KB地址空間的外部數(shù)據(jù)存儲(chǔ)器接口 (11)硬件實(shí)現(xiàn)的SPI、SMBus/12C和兩個(gè)UART串行接口 (12)5個(gè)通用的16位定時(shí)器 (13)具有6個(gè)捕捉/比較模塊的可編程計(jì)數(shù)器/定時(shí)器陣列 (14)片內(nèi)看門(mén)狗定時(shí)器、VDD監(jiān)視器和溫度傳感器 具有片內(nèi)VDD監(jiān)視器、看門(mén)狗定時(shí)器和時(shí)鐘振蕩器的C8051F040MCU是真正能獨(dú)立工作的片上系統(tǒng)。所有模擬和數(shù)字外設(shè)均可由用戶固件使能/禁止和配置。另外,C/OS-Ⅱ的運(yùn)行平臺(tái)需要一定的條件如下: (1)由與C/OS-Ⅱ主要是由C語(yǔ)言編寫(xiě)的,所以要求所選CP
56、U的C編譯器能夠產(chǎn)生可重入的代碼。 (2)所用C語(yǔ)言提供對(duì)中斷控制的方法。 (3)所用CPU支持中斷,并且能夠產(chǎn)生定時(shí)中斷,以便實(shí)現(xiàn)任務(wù)的切換; (4)所用CPU支持具有足夠深度的硬件堆棧; (5)所用CPU的指令系統(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
57、單片機(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_CPU.H、OS_CPU_C.C、OS_CPU_A.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/O
58、S-Ⅱ體系結(jié)構(gòu)示意圖 4.2.1 OS_CPU.H頭文件的修改 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位,故堆棧的數(shù)據(jù)類(lèi)型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)保存
59、到堆棧中,然后禁止中斷。所以開(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_TASK_SW() OSCtXSW(); 4.2.2 OS_CPU_A.ASM匯編文件的修改 C/OS-Ⅱ的移植需要用戶改寫(xiě)OS_CPU_A.ASM中的四個(gè)函數(shù): (1)OSStartHighRdy() (2)OSCtxSw() (3)OSI
60、ntCtxSw() (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置為
61、TRUE后返回執(zhí)行該任務(wù)。系統(tǒng)直接進(jìn)行任務(wù)切換或者應(yīng)用程序通過(guò)處理器軟件陷阱指令執(zhí)行時(shí),系統(tǒng)將通過(guò)調(diào)用OSC-txSw()函數(shù)完成上下文的切換。 該函數(shù)完成的操作是:將通用寄存器壓人硬件堆棧,從當(dāng)前任務(wù)的TCB獲得該任務(wù)的任務(wù)堆棧指針,把當(dāng)前硬件堆棧里的內(nèi)容全部保存到任務(wù)堆棧中,同時(shí)保存仿真堆棧指針?C-XBP的值,接著把等待任務(wù)中最高優(yōu)先級(jí)的任務(wù)置為當(dāng)前任務(wù),最后執(zhí)行OSStartHigh-Rdy()函數(shù)相同的操作。系統(tǒng)每次中斷執(zhí)行中斷服務(wù)子程序后,如果沒(méi)有更高優(yōu)先級(jí)的等待任務(wù)就返回,否則執(zhí)行中斷任務(wù)切換函數(shù)OSIntCtxSw()。該函數(shù)跟OSCtxSw()函數(shù)相似,只是由于是從中斷服務(wù)
62、子程序中進(jìn)入的,必須在開(kāi)始調(diào)整堆棧指針SP,去掉在調(diào)用OSIntExit(),OSIntCtxSw()過(guò)程中壓人堆棧的多余內(nèi)容。 因?yàn)镃/OS-Ⅱ的系統(tǒng)調(diào)度和系統(tǒng)定時(shí)都是由系統(tǒng)節(jié)拍決定的,因此需要提供周期性的系統(tǒng)時(shí)鐘信號(hào),C/OS-Ⅱ建議使用10ms~200ms的系統(tǒng)時(shí)鐘。由于系統(tǒng)在每一個(gè)節(jié)拍都要檢查是否由高優(yōu)先級(jí)的任務(wù)在等待,如果有就進(jìn)行系統(tǒng)的任務(wù)切換,這樣當(dāng)每個(gè)時(shí)鐘周期越短,系統(tǒng)的任務(wù)切換就越頻繁,CPU的負(fù)荷就越重,從而引起系統(tǒng)不能正常工作。相反,當(dāng)時(shí)鐘周期越長(zhǎng),任務(wù)切換的頻率越低,導(dǎo)致不能充分應(yīng)用CPU,任務(wù)的響應(yīng)時(shí)間變長(zhǎng)。所以要根據(jù)系統(tǒng)負(fù)荷的大小合理的確定系統(tǒng)時(shí)鐘,在這里采用定時(shí)器
63、0作為產(chǎn)生20ms的系統(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)硬件堆棧相向生長(zhǎng),中間為空閑間隔,顯然C/OS-Ⅱ原型提供的堆棧檢測(cè)函數(shù)OSTaskStrChk()將失效。 因?yàn)樗腥蝿?wù)堆棧使用相同大小的空間,所以占用空間最大的任務(wù)函數(shù)的空間大小為防真堆棧的空間大小。這里將任務(wù)堆??臻g大小用宏定義在OS_CFG.H文件中,可以根據(jù)實(shí)際情況作以下修改。 圖4-2 堆棧結(jié)構(gòu)圖 (1)OSCtxSw(),該函數(shù)完成的是任務(wù)級(jí)切換工作,其目的是為了保證處理器永遠(yuǎn)
64、運(yùn)行就緒表中優(yōu)先級(jí)最高的任務(wù)。 Void OSCtxSw(void) ﹛ 通過(guò)自定義的宏操作PUSHALL,將寄存器R0-R7、DRH、DPL、B、ACC和PSW保存草硬件堆棧中;得到硬件堆棧長(zhǎng)度=SP-#OSStkStart; 根據(jù)長(zhǎng)度值將內(nèi)容通過(guò)字節(jié)拷貝的方式復(fù)制到當(dāng)前任務(wù)堆棧中,同時(shí)將仿真指針?C_XBP的值也復(fù)制到任務(wù)堆棧中; 調(diào)用用戶定義函數(shù)OSTaskSwHook(); OSTCBCur=OSTCBHighRy; OSPrioCur=OSPrioHighRy; 通過(guò)變量OSTCBCur->OSTCBStkPtr獲得要恢復(fù)的任務(wù)的任務(wù)堆棧指針; 將任務(wù)堆棧中內(nèi)容復(fù)制
65、到硬件堆棧中,恢復(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)先級(jí)最高的就緒任務(wù)。對(duì)C8051F040而言,處理如下: Void OSStarHighRdy(void) ﹛ 調(diào)用用戶可自定義的函數(shù)OSTashSWHook(); 獲取任務(wù)堆棧指針:任務(wù)堆棧指針=OSTCBH個(gè)時(shí)Rdy->OSTCBSskPtr; 要恢復(fù)內(nèi)容的長(zhǎng)度=任務(wù)堆棧起駛地址中存放的內(nèi)容; 根據(jù)長(zhǎng)度,通過(guò)字節(jié)拷貝將內(nèi)容復(fù)制到系統(tǒng)i
66、data空間中的硬件堆棧內(nèi); 恢復(fù)硬件堆棧指針SP和?C_XBP的值; OSRunning=TRUE; 對(duì)硬件堆棧執(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; 通過(guò)變量OSTCBCur->OSTCBStkPtr獲得要恢復(fù)的任務(wù)的任務(wù)堆棧
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)管理制度:常見(jiàn)突發(fā)緊急事件應(yīng)急處置程序和方法
- 某物業(yè)公司冬季除雪工作應(yīng)急預(yù)案范文
- 物業(yè)管理制度:小區(qū)日常巡查工作規(guī)程
- 物業(yè)管理制度:設(shè)備設(shè)施故障應(yīng)急預(yù)案
- 某物業(yè)公司小區(qū)地下停車(chē)場(chǎng)管理制度
- 某物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 物業(yè)管理制度:安全防范十大應(yīng)急處理預(yù)案
- 物業(yè)公司巡查、檢查工作內(nèi)容、方法和要求
- 某物業(yè)公司保潔部門(mén)領(lǐng)班總結(jié)
- 某公司安全生產(chǎn)舉報(bào)獎(jiǎng)勵(lì)制度
- 物業(yè)管理:火情火災(zāi)應(yīng)急預(yù)案
- 某物業(yè)安保崗位職責(zé)
- 物業(yè)管理制度:節(jié)前工作重點(diǎn)總結(jié)
- 物業(yè)管理:某小區(qū)消防演習(xí)方案
- 某物業(yè)公司客服部工作職責(zé)