版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄摘要 11.1選題的目的和意義 31.2國內(nèi)外的研究現(xiàn)狀和趨勢(shì) 31.2.1ARM處理器 31.2.2操作系統(tǒng) 52系統(tǒng)設(shè)計(jì) 72.1可行性分析 72.2需求分析 72.3系統(tǒng)功能設(shè)計(jì) 82.3.1總體結(jié)構(gòu) 82.3.2RTOS內(nèi)核處理流程 83系統(tǒng)開發(fā)環(huán)境和工具 103.1開發(fā)環(huán)境 103.2開發(fā)工具 104系統(tǒng)詳細(xì)設(shè)計(jì) 104.1任務(wù)創(chuàng)建模塊 114.2任務(wù)調(diào)度模塊 124.3任務(wù)通信模塊 125系統(tǒng)具體實(shí)現(xiàn) 135.1任務(wù)創(chuàng)建模塊 135.1.1任務(wù) 135.1.2任務(wù)狀態(tài) 135.1.3任務(wù)控制塊 145.1.4任務(wù)就緒表 155.2任務(wù)調(diào)度模塊 175.2.1基于優(yōu)先級(jí)搶占調(diào)度 175.2.2時(shí)鐘節(jié)拍函數(shù) 185.3任務(wù)間的通信 196系統(tǒng)測(cè)試 216.1項(xiàng)目一:內(nèi)核移植到周立功LPC2138測(cè)試及RS232串口的實(shí)現(xiàn) 216.2項(xiàng)目二:內(nèi)核多任務(wù)的搶占調(diào)度及任務(wù)的睡眠機(jī)制 226.3項(xiàng)目三:任務(wù)管理測(cè)試 226.4項(xiàng)目四:任務(wù)間通信測(cè)試-互斥信號(hào)量 227總結(jié)和展望 22Abstract 24參考文獻(xiàn) 25摘要微實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)田德偉(德州學(xué)院計(jì)算機(jī)系,山東德州253023)摘要:隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)在人們的生活中的作用日益凸顯。嵌入式操作系統(tǒng)在嵌入式開發(fā)中也逐步得到了開發(fā)人員的關(guān)注,如何在保證嵌入式系統(tǒng)的效率的前提下,降低開發(fā)成本,成為諸多廠商關(guān)注的焦點(diǎn)。該微實(shí)時(shí)操作系統(tǒng)與現(xiàn)行l(wèi)inux系統(tǒng)具有相比,具有更高實(shí)時(shí)性;與μ/COS-ii相比內(nèi)核更精簡(jiǎn)、在控制產(chǎn)品成本中有巨大優(yōu)勢(shì)。該系統(tǒng)主要針對(duì)低端微處理器平臺(tái),旨在降低開發(fā)成本同時(shí)提高嵌入式系統(tǒng)對(duì)外圍設(shè)備管理效率。該系統(tǒng)支持八個(gè)優(yōu)先級(jí),每個(gè)優(yōu)先級(jí)可以創(chuàng)建一個(gè)任務(wù),任務(wù)間同步采用信號(hào)量機(jī)制。關(guān)鍵字:嵌入式實(shí)時(shí)操作系統(tǒng),μ/COS-ii,嵌入式系統(tǒng)
1引言1.1選題的目的和意義隨著微電子技術(shù)的快速發(fā)展,芯片功能更加強(qiáng)大,微嵌入式實(shí)時(shí)操作系統(tǒng)必將成為嵌入式操作系統(tǒng)發(fā)展的趨勢(shì),這不僅能降低成本,縮小產(chǎn)品體積,還能增強(qiáng)產(chǎn)品的可靠性。同時(shí),軟件硬件的緊密結(jié)合,嵌入式軟件與硬件界線更加模糊,嵌入式軟件時(shí)常以硬件形態(tài)存在,這種方式可提高實(shí)時(shí)性,增強(qiáng)可維護(hù)性。1.2國內(nèi)外的研究現(xiàn)狀和趨勢(shì)嵌入式操作系統(tǒng)種類繁多,有資源開銷很少的IC卡操作系統(tǒng),也有功能較強(qiáng)的網(wǎng)絡(luò)計(jì)算機(jī)操作系統(tǒng)。這些嵌入式操作系統(tǒng)從功能到性能各具特色,為各種硬件環(huán)境及應(yīng)用提供了相應(yīng)的支持和服務(wù)。目前市場(chǎng)上共有幾十種操作系統(tǒng),有多任務(wù)系統(tǒng),也有單任務(wù)系統(tǒng);有實(shí)時(shí)系統(tǒng)系統(tǒng),也有分時(shí)系統(tǒng)??傊煌瑥S商推出的操作系統(tǒng)或多或少都有差異,但許多嵌入式操作系統(tǒng)一般具有如下一些內(nèi)容和功能:系統(tǒng)核心、窗口圖形系統(tǒng)、文件系統(tǒng)、設(shè)備驅(qū)動(dòng)程序和網(wǎng)絡(luò)協(xié)議等。嵌入式操作系統(tǒng)系統(tǒng)將有以下方向趨勢(shì):1.隨著微電子技術(shù)的快速發(fā)展,芯片功能更加強(qiáng)大,嵌入式實(shí)時(shí)操作系統(tǒng)必將成為嵌入式操作系統(tǒng)的發(fā)展趨勢(shì),這不僅能降低成本,縮小產(chǎn)品體積,還能增強(qiáng)產(chǎn)品的可靠性。同時(shí),軟件硬件的緊密結(jié)合,嵌入式軟件與硬件界線更加模糊,嵌入式軟件時(shí)常以硬件形態(tài)存在,這種方式可提高實(shí)時(shí)性,增強(qiáng)可維護(hù)性。2.嵌入式操作系統(tǒng)會(huì)與嵌入應(yīng)用軟件協(xié)同發(fā)展。嵌入式系統(tǒng)中的重要角色包括嵌入式應(yīng)用軟件,嵌入式系統(tǒng)應(yīng)用領(lǐng)域千差萬別,只有充分重視應(yīng)用軟件的發(fā)展,才能滿足豐富多彩的應(yīng)用要求。1.2.1ARM處理器ARM(AdvancedRISCMachines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗小的特點(diǎn)。適用于多種領(lǐng)域,比如嵌入控制、消費(fèi)/教育類多媒體、DSP和移動(dòng)式應(yīng)用等。ARM處理器共有7種運(yùn)行模式:用戶模式(user,use)正常程序執(zhí)行模式快速中斷模式(fiq)用于高速數(shù)據(jù)傳輸和通道處理外部中斷模式(irq)用于通常的中斷處理管理模式(sve)操作系統(tǒng)使用的一種保護(hù)模式數(shù)據(jù)訪問終止模式(abt)用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)未定義指令終止模式(und)用于支持通過軟件方針硬件的協(xié)處理器系統(tǒng)模式(sys)用于運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù)除了用戶模式之外的6種處理器模式稱為特權(quán)模式(privilegedmodes)。在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意的進(jìn)行處理器模式切換。除系統(tǒng)模式外,其他5種特權(quán)模式又稱為異常模式。處理器模式可以通過軟件控制進(jìn)行切換,也可以通過外部中斷或異常處理過程進(jìn)行切換。大多數(shù)的用戶程序運(yùn)行在用戶模式下。這時(shí),應(yīng)用程序不能夠訪問一些受操作系統(tǒng)保護(hù)的系統(tǒng)資源,應(yīng)用程序也不能直接進(jìn)行處理器模式的切換。當(dāng)需要進(jìn)行處理器模式切換時(shí),應(yīng)用程序可以產(chǎn)生異常處理,在異常處理過程中進(jìn)行處理器處理器模式的切換。這種體系結(jié)構(gòu)可以使系統(tǒng)控制整個(gè)系統(tǒng)的資源。當(dāng)應(yīng)用程序發(fā)生異常中斷時(shí),處理器進(jìn)入相應(yīng)的異常模式。在每一種異常模式中都有一組寄存器,供相應(yīng)的異常處理程序使用,這樣就可以保證在進(jìn)入異常模式時(shí),擁護(hù)模式下的寄存器(保存了程序運(yùn)行狀態(tài))不被破壞。系統(tǒng)模式并不是通過異常過程進(jìn)入的,它和用戶模式具有完全一樣的寄存器。但是系統(tǒng)模式屬于特權(quán)模式,可以訪問所有的系統(tǒng)資源,也可以直接進(jìn)行處理器模式切換。它主要供操作系統(tǒng)任務(wù)使用。通常操作系統(tǒng)的任務(wù)需要訪問所有的系統(tǒng)資源,同時(shí)該任務(wù)仍然使用擁護(hù)模式的寄存組,而不是使用異常模式下相應(yīng)的寄存器組,這樣可以保證當(dāng)異常中斷發(fā)生時(shí)任務(wù)狀態(tài)不被破壞。ARM處理器含有37個(gè)寄存器,這些寄存器包括以下兩類寄存器。(1)31個(gè)通用寄存器:包括程序計(jì)數(shù)器PC等,這些寄存器都是32位寄存器。(2)6個(gè)狀態(tài)寄存器:狀態(tài)寄存器也是32位的寄存器,但是只使用了其中的12位。在ARM處理器的7種模式下都有一組對(duì)應(yīng)的寄存器組。在任意時(shí)刻,可見的寄存器組包括15個(gè)通用寄存器R0~R14、一個(gè)或兩個(gè)狀態(tài)寄存器和PC。在所有的寄存器中,有些是各種模式下共用的同一個(gè)物理寄存器,有些是各種模式自己獨(dú)立擁有的物理寄存器。七種運(yùn)行模式下寄存器分配如下圖1.1所示:圖1-11.2.2操作系統(tǒng)目前的操作系統(tǒng)種類繁多,很難用單一標(biāo)準(zhǔn)統(tǒng)一分類。根據(jù)操作系統(tǒng)的使用環(huán)境和對(duì)作業(yè)處理方式來考慮,可分為批處理系統(tǒng)、分時(shí)系統(tǒng)、實(shí)時(shí)系統(tǒng)。下面介紹一操作系統(tǒng)的五大類型:批處理操作系統(tǒng)、分時(shí)操作系統(tǒng)、實(shí)時(shí)操作系統(tǒng)、網(wǎng)絡(luò)操作系統(tǒng)、分布式操作系統(tǒng)。1.批處理操作系統(tǒng)批處理(BatchProcessing)操作系統(tǒng)的工作方式是:用戶將作業(yè)交給系統(tǒng)操作員,系統(tǒng)操作員將許多用戶的作業(yè)組成一批作業(yè),之后輸入到計(jì)算機(jī)中,在系統(tǒng)中形成一個(gè)自動(dòng)轉(zhuǎn)接的連續(xù)的作業(yè)流,然后啟動(dòng)操作系統(tǒng),系統(tǒng)自動(dòng)、依次執(zhí)行每個(gè)作業(yè),最后由操作員將作業(yè)結(jié)果交給用戶。批處理操作系統(tǒng)的特點(diǎn)是:多道和成批處理。2.分時(shí)操作系統(tǒng)分時(shí)(TimeSharing)操作系統(tǒng)的工作方式是:一臺(tái)主機(jī)連接了若干個(gè)終端,每個(gè)終端有一個(gè)用戶在使用。用戶交互式地向系統(tǒng)提出命令請(qǐng)求,系統(tǒng)接受每個(gè)用戶的命令,采用時(shí)間片輪轉(zhuǎn)方式處理服務(wù)請(qǐng)求,并通過交互方式在終端上向用戶顯示結(jié)果。用戶根據(jù)上步結(jié)果發(fā)出下道命。分時(shí)操作系統(tǒng)將CPU的時(shí)間劃分成若干個(gè)片段,稱為時(shí)間片。操作系統(tǒng)以時(shí)間片為單位,輪流為每個(gè)終端用戶服務(wù)。每個(gè)用戶輪流使用一個(gè)時(shí)間片而使每個(gè)用戶并不感到有別的用戶存在。分時(shí)系統(tǒng)具有多路性、交互性、“獨(dú)占”性和及時(shí)性的特征。多路性指,伺時(shí)有多個(gè)用戶使用一臺(tái)計(jì)算機(jī),宏觀上看是多個(gè)人同時(shí)使用一個(gè)CPU,微觀上是多個(gè)人在不同時(shí)刻輪流使用CPU。交互性是指,用戶根據(jù)系統(tǒng)響應(yīng)結(jié)果進(jìn)一步提出新請(qǐng)求(用戶直接干預(yù)每一步)?!蔼?dú)占”性是指,用戶感覺不到計(jì)算機(jī)為其他人服務(wù),就像整個(gè)系統(tǒng)為他所獨(dú)占。及時(shí)性指,系統(tǒng)對(duì)用戶提出的請(qǐng)求及時(shí)響應(yīng)。它支持位于不同終端的多個(gè)用戶同時(shí)使用一臺(tái)計(jì)算機(jī),彼此獨(dú)立互不干擾,用戶感到好像一臺(tái)計(jì)算機(jī)全為他所用。常見的通用操作系統(tǒng)是分時(shí)系統(tǒng)與批處理系統(tǒng)的結(jié)合。其原則是:分時(shí)優(yōu)先,批處理在后。“前臺(tái)”響應(yīng)需頻繁交互的作業(yè),如終端的要求;“后臺(tái)”處理時(shí)間性要求不強(qiáng)的作業(yè)。3.實(shí)時(shí)操作系統(tǒng)實(shí)時(shí)操作系統(tǒng)(RealTimeOperatingSystem,RTOS)是指使計(jì)算機(jī)能及時(shí)響應(yīng)外部事件的請(qǐng)求在規(guī)定的嚴(yán)格時(shí)間內(nèi)完成對(duì)該事件的處理,并控制所有實(shí)時(shí)設(shè)備和實(shí)時(shí)任務(wù)協(xié)調(diào)一致地工作的操作系統(tǒng)。實(shí)時(shí)操作系統(tǒng)要追求的目標(biāo)是:對(duì)外部請(qǐng)求在嚴(yán)格時(shí)間范圍內(nèi)做出反應(yīng),有高可靠性和完整性。其主要特點(diǎn)是資源的分配和調(diào)度首先要考慮實(shí)時(shí)性然后才是效率。此外,實(shí)時(shí)操作系統(tǒng)應(yīng)有較強(qiáng)的容錯(cuò)能力。4.網(wǎng)絡(luò)操作系統(tǒng)網(wǎng)絡(luò)操作系統(tǒng)是基于計(jì)算機(jī)網(wǎng)絡(luò)的,是在各種計(jì)算機(jī)操作系統(tǒng)上按網(wǎng)絡(luò)體系結(jié)構(gòu)協(xié)議標(biāo)準(zhǔn)開發(fā)的軟件,包括網(wǎng)絡(luò)管理、通信、安全、資源共享和各種網(wǎng)絡(luò)應(yīng)用。其目標(biāo)是相互通信及資源共享。在其支持下,網(wǎng)絡(luò)中的各臺(tái)計(jì)算機(jī)能互相通信和共享資源。其主要特點(diǎn)是與網(wǎng)絡(luò)的硬件相結(jié)合來完成網(wǎng)絡(luò)的通信任務(wù)。5.分布式操作系統(tǒng)它是為分布計(jì)算系統(tǒng)配置的操作系統(tǒng)。大量的計(jì)算機(jī)通過網(wǎng)絡(luò)被連結(jié)在一起,可以獲得極高的運(yùn)算能力及廣泛的數(shù)據(jù)共享。這種系統(tǒng)被稱作分布式系統(tǒng)(DistributedSystem)。它在資源管理,通信控制和操作系統(tǒng)的結(jié)構(gòu)等方面都與其他操作系統(tǒng)有較大的區(qū)別。由于分布計(jì)算機(jī)系統(tǒng)的資源分布于系統(tǒng)的不同計(jì)算機(jī)上,操作系統(tǒng)對(duì)用戶的資源需求不能像一般的操作系統(tǒng)那樣等待有資源時(shí)直接分配的簡(jiǎn)單做法而是要在系統(tǒng)的各臺(tái)計(jì)算機(jī)上搜索,找到所需資源后才可進(jìn)行分配。對(duì)于有些資源,如具有多個(gè)副本的文件,還必須考慮一致性。所謂一致性是指若干個(gè)用戶對(duì)同一個(gè)文件所同時(shí)讀出的數(shù)據(jù)是一致的。為了保證一致性,操作系統(tǒng)須控制文件的讀、寫、操作,使得多個(gè)用戶可同時(shí)讀一個(gè)文件,而任一時(shí)刻最多只能有一個(gè)用戶在修改文件。分布操作系統(tǒng)的通信功能類似于網(wǎng)絡(luò)操作系統(tǒng)。由于分布計(jì)算機(jī)系統(tǒng)不像網(wǎng)絡(luò)分布得很廣,同時(shí)分布操作系統(tǒng)還要支持并行處理,因此它提供的通信機(jī)制和網(wǎng)絡(luò)操作系統(tǒng)提供的有所不同,它要求通信速度高。分布操作系統(tǒng)的結(jié)構(gòu)也不同于其他操作系統(tǒng),它分布于系統(tǒng)的各臺(tái)計(jì)算機(jī)上,能并行地處理用戶的各種需求,有較強(qiáng)的容錯(cuò)能力。2系統(tǒng)設(shè)計(jì)2.1可行性分析(1)技術(shù)可行性:根據(jù)開發(fā)人員提供的系統(tǒng)函數(shù)接口、實(shí)時(shí)性及實(shí)現(xiàn)系統(tǒng)的各項(xiàng)條件,從技術(shù)的角度研究實(shí)現(xiàn)系統(tǒng)的可行性。(2)經(jīng)濟(jì)可行性:經(jīng)濟(jì)可行性是可行性研究的重要組成部分,它用于評(píng)估基于計(jì)算機(jī)系統(tǒng)的經(jīng)濟(jì)合理性,給出系統(tǒng)開發(fā)的成本論證。本系統(tǒng)是為保險(xiǎn)公司信息管理而做的系統(tǒng),裝上該應(yīng)用系統(tǒng)后即可使用,在系統(tǒng)移植方面簡(jiǎn)單,對(duì)硬件設(shè)備的要求進(jìn)一步降低,節(jié)約了不必要的支出,所帶來的效益大于系統(tǒng)的開發(fā)成本,在經(jīng)濟(jì)上完全可行。(3)法律可行性:研究在系統(tǒng)開發(fā)過程中可能涉及的各種合同、侵權(quán)、責(zé)任以及各種與法律相關(guān)的抵觸問題。本系統(tǒng)的開發(fā)不觸犯國家的任何法律規(guī)章,不涉及侵權(quán)等內(nèi)容,法律上完全可行。綜上所述,該系統(tǒng)符合所有的開發(fā)目標(biāo),能夠保證系統(tǒng)開發(fā)有一定的實(shí)時(shí)性和穩(wěn)定性。因此,該微實(shí)時(shí)操作系統(tǒng)的開發(fā)是可行的。2.2需求分析1.參考硬件平臺(tái)為:ARM92410。實(shí)際上,也可用其他博創(chuàng)科技系列CPU和實(shí)驗(yàn)班,只要CPU有足夠的RAM、Flash存儲(chǔ)器和一個(gè)串口擴(kuò)展就可以了。但與ARM92410區(qū)別越小越好,最終驗(yàn)證功能在都統(tǒng)一在ARM92410上進(jìn)行測(cè)試;2.硬件抽象層的接口遵循μC/OS-II的借口規(guī)范;3.操作系統(tǒng)的調(diào)用采用函數(shù)調(diào)用方式,不用中斷陷入方式;4.每個(gè)任務(wù)擁有自己獨(dú)立的任務(wù)堆棧,作為任務(wù)的私有存儲(chǔ)區(qū);5.同時(shí)支持任務(wù)數(shù)不多于8個(gè),空閑任務(wù)編號(hào)為0;7.串口接口參數(shù):波特率115200,8位數(shù)據(jù),1為停止位,無硬件流控制;8.任務(wù)優(yōu)先級(jí)級(jí)數(shù)多于8級(jí),最高優(yōu)先級(jí)為0,最低優(yōu)先級(jí)為7,空閑任務(wù)優(yōu)先級(jí)為7。2.3系統(tǒng)功能設(shè)計(jì)2.3.1總體結(jié)構(gòu)圖2-11.硬件層硬件層主要包括:含量Flash存儲(chǔ)器、串口RS232等,它是保證系統(tǒng)實(shí)現(xiàn)指定任務(wù)的最底層的部件。2.驅(qū)動(dòng)層驅(qū)動(dòng)層的作用是給操作系統(tǒng)提供接口,使其能管理相應(yīng)的硬件。3.RTOS內(nèi)核RTOS內(nèi)核主要任務(wù)是完成多任務(wù)之間的調(diào)度和同步。4.應(yīng)用層在用戶的應(yīng)用程序中可以創(chuàng)建用戶自己的任務(wù)。任務(wù)之間的通信主要依賴信號(hào)量。2.3.2RTOS內(nèi)核處理流程1.RTOS內(nèi)核結(jié)構(gòu)框架圖2-22.查找最高優(yōu)先級(jí)任務(wù)流程圖2-33.任務(wù)通信中使等待狀態(tài)優(yōu)先級(jí)最高的任務(wù)從等待列表中刪除,并把其放入就緒列表中流程如下:圖2-43系統(tǒng)開發(fā)環(huán)境和工具3.1開發(fā)環(huán)境硬件平臺(tái):博創(chuàng)科技ARM92410,也可用其他博創(chuàng)科技系列CPU和實(shí)驗(yàn)板,只要CPU有足夠的RAM、Flash存儲(chǔ)器和一個(gè)串口擴(kuò)展就可以了。但與ARM92410區(qū)別越小越好,最終的驗(yàn)證都統(tǒng)一在ARM92410上進(jìn)行。內(nèi)存:4MBROM:64MB開發(fā)工具:ADS1.23.2開發(fā)工具ADS1.2ADS是ARM公司的集成開發(fā)環(huán)境軟件,他的功能非常強(qiáng)大。他的前身是SDT,SDT是ARM公司幾年前的開發(fā)環(huán)境軟件,目前SDT早已經(jīng)不再升級(jí)。ADS包括了四個(gè)模塊分別是:SIMULATOR;c編譯器;實(shí)時(shí)調(diào)試器;應(yīng)用函數(shù)庫。ADS的編譯器調(diào)試器較SDT都有了非常大的改觀,ADS1.2提供完整的WINDOWS界面開發(fā)環(huán)境。c編譯器效率極高,支持c以及c++,使工程師可以很方便的使用C語言進(jìn)行開發(fā)。提供軟件模擬仿真功能,使沒有Emulators的學(xué)習(xí)者也能夠熟悉ARM的指令系統(tǒng)。配合FFT-ICE使用,ADS1.2提供強(qiáng)大的實(shí)時(shí)調(diào)試跟蹤功能,片內(nèi)運(yùn)行情況盡在掌握。ADS1.2需要硬件支持才能發(fā)揮強(qiáng)大功能。目前支持的硬件調(diào)試器有Multi-ICE以及兼容Multi-ICE的調(diào)試工具如FFT-ICE。4系統(tǒng)詳細(xì)設(shè)計(jì)該內(nèi)核設(shè)計(jì)采用結(jié)構(gòu)化設(shè)計(jì)方法,以算法為中心,從處理到處理的數(shù)據(jù)流。內(nèi)核一級(jí)數(shù)據(jù)流圖如圖4-1所示:圖4-14.1任務(wù)創(chuàng)建模塊首先,創(chuàng)建任務(wù)taskCreate()函數(shù)從空閑TCB池取得空閑的TCB,并根據(jù)用戶分配堆棧的大小確定任務(wù)堆棧的棧頂指針,調(diào)用任務(wù)堆棧初始化函數(shù)OSTaskStkInit()對(duì)任務(wù)堆棧進(jìn)行初始化,返回任務(wù)堆棧的棧頂指針;然后調(diào)用函數(shù)OSTCBInit()完成對(duì)任務(wù)控制塊的初始化工作;最后把任務(wù)控制塊存放任務(wù)就緒列表中,具體流程如圖4-2所示:圖4-24.2任務(wù)調(diào)度模塊首先taskStart()函數(shù)根據(jù)任務(wù)編號(hào)和任務(wù)列表得到任務(wù)控制塊,把任務(wù)的編號(hào)和優(yōu)先級(jí)放存放到OSIDPrioTbl[]和就緒列表中,然后啟動(dòng)任務(wù)調(diào)度器,根據(jù)OSIDPrioTbl[]和就緒列表查找進(jìn)入就緒態(tài)優(yōu)先級(jí)最高的任務(wù),最后調(diào)用函數(shù)OS_TASK_SW()完成任務(wù)切換。任務(wù)調(diào)度具體流程如圖4-3所示:圖4-34.3任務(wù)通信模塊首先,semCreate()函數(shù)從空閑的OS_EVENT池中取得一個(gè)空閑事件控制塊,并完成對(duì)其的初步初始化,將其放到事件列表中;然后,當(dāng)前任務(wù)調(diào)用函數(shù)semTake()時(shí),檢查互斥信號(hào)量是否可用,如果可用當(dāng)前任務(wù)占用該信號(hào)量,否則調(diào)用OSEventTaskWait()函數(shù)將當(dāng)前任務(wù)從就緒列表移除存放到事件等待列表中;最后,如果占用該互斥信號(hào)量任務(wù)的任務(wù)調(diào)用semGive()釋放信號(hào)量,調(diào)用函數(shù)OSEventTaskRdy(),查找等待該互斥信號(hào)量優(yōu)先級(jí)最高的任務(wù),將其從等待列表移除存放到就緒列表中,等待任務(wù)調(diào)度。具體數(shù)據(jù)流程如圖4-4所示:圖4-45系統(tǒng)具體實(shí)現(xiàn)5.1任務(wù)創(chuàng)建模塊5.1.1任務(wù)一個(gè)任務(wù)通常是一個(gè)無限的循環(huán)。一個(gè)任務(wù)看起來像其它C的函數(shù)一樣,有函數(shù)返回類型,有形式參數(shù)變量,任務(wù)返回類型必須定義為void型,但是任務(wù)是絕不會(huì)返回的。任務(wù)可以在一次執(zhí)行完畢之后被刪除,并不是任務(wù)代碼被刪除,只是內(nèi)核不會(huì)再理會(huì)該任務(wù)的代碼,該任務(wù)再也不能運(yùn)行了。5.1.2任務(wù)狀態(tài)圖5-1是RTOS內(nèi)核控制下的任務(wù)狀態(tài)轉(zhuǎn)換土,在任一給定時(shí)刻,任務(wù)的狀態(tài)一定是在這六種狀態(tài)之一。圖5-1僵死狀態(tài)(OS_STAT_DORMANT)指任務(wù)駐留在程序空間中,還沒有交給RTOS管理,把任務(wù)交給RTOS管理通過函數(shù)taskStart()來實(shí)現(xiàn)。任務(wù)一旦被創(chuàng)建就處于僵死狀態(tài),通過taskStart()使任務(wù)進(jìn)入就緒態(tài)。任何任務(wù)的創(chuàng)建可以是在多任務(wù)運(yùn)行之前,也可以是動(dòng)態(tài)地被一個(gè)運(yùn)行著的任務(wù)建立。如果一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而這個(gè)任務(wù)的優(yōu)先級(jí)高于建立它的那個(gè)任務(wù),則這個(gè)剛剛建立的任務(wù)將立即得到CPU的控制權(quán)。一個(gè)任務(wù)可以通過taskDelete()返回到僵死狀態(tài),也可以通過調(diào)用該函數(shù)使另一個(gè)任務(wù)進(jìn)入僵死狀態(tài)。正在運(yùn)行的任務(wù)可以通過調(diào)用函數(shù)taskSleep()使自身主動(dòng)放棄CPU控制權(quán),休眠一段時(shí)間,這個(gè)任務(wù)進(jìn)入睡眠態(tài),等待這段時(shí)間過去,下一個(gè)最高優(yōu)先級(jí)的就緒態(tài)任務(wù)立即獲得CPU的控制權(quán)。等待的時(shí)間過去以后,由系統(tǒng)服務(wù)函數(shù)OSTimeTick()使處于睡眠狀態(tài)的任務(wù)進(jìn)入就緒態(tài)。正在運(yùn)行的任務(wù)等待某一事件時(shí)要等待,當(dāng)任務(wù)因等待事件被阻塞,下一個(gè)優(yōu)先級(jí)最高的任務(wù)立即得到CPU的控制權(quán)。當(dāng)?shù)却氖录派?,阻塞狀態(tài)最高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài)。事件發(fā)生的報(bào)告可能來自另一個(gè)任務(wù),也可能來自中斷服務(wù)子程序。正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了或者RTOS將中斷關(guān)了。被中斷了的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)被掛起,中斷服務(wù)子程序控制了CPU的使用權(quán)。中斷服務(wù)子程序可能會(huì)報(bào)告一個(gè)或多個(gè)事件的發(fā)生,而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài)。在這種情況下,從中斷服務(wù)子程序返回之前,RTOS要判定被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的。如果中斷服務(wù)子程序使一個(gè)優(yōu)先級(jí)更高的任務(wù)進(jìn)入了就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得以運(yùn)行;否則原來被中斷了的任務(wù)才能繼續(xù)運(yùn)行。5.1.3任務(wù)控制塊為了避免動(dòng)態(tài)內(nèi)存分配引起的問題,該RTOS內(nèi)核采用內(nèi)存靜態(tài)分配的方式,同時(shí)為了減少對(duì)內(nèi)存的需求量引入了回收和復(fù)用的機(jī)制。任務(wù)控制塊(OS_TCB)回收使用和任務(wù)編號(hào)(tid)復(fù)用的分配機(jī)制。在任務(wù)控制塊初始化時(shí)獲得一個(gè)空閑的TCB方式如圖5-2下:圖5-2ptcb=OSTCBFreeList;/*獲得空閑的TCB*/OSTCBFreeList=ptcb->OSTCBNext;/*修改空閑TCB鏈表的指針*/在任務(wù)被刪除時(shí)回收TCB,如圖5-3所示:圖5-3ptcb->OSTCBNext=OSTCBFreeList;/*回收TCB所占用的資源*/OSTCBFreeList=ptcb; /*修改空閑TCB鏈表的指針*/為了降低任務(wù)列表對(duì)內(nèi)存的需求量,引入了任務(wù)編號(hào)的復(fù)用機(jī)制,任務(wù)的編號(hào)與系統(tǒng)最多運(yùn)行的任務(wù)有關(guān),而與其他的優(yōu)先級(jí)無關(guān),從而減少了RTOS對(duì)RAM的需求量。任務(wù)編號(hào)的復(fù)用機(jī)制如下所示:ptcb表示任務(wù)控制塊ptcb=OSTCBFreeList;/*從TCB表中獲得空閑的TCB*/任務(wù)控制塊OS_TCB中的幾個(gè)成員的算法:OSTCBX =priority&0x07;OSTCBBitX=OSMapTbl[priority&0x07];上述變量主要用于加速任務(wù)就緒態(tài)的過程或進(jìn)入等待事件發(fā)生狀態(tài)的過程(避免在運(yùn)行中去計(jì)算這些值)。這些值是在任務(wù)創(chuàng)建時(shí)算好的,或者是在改變?nèi)蝿?wù)優(yōu)先級(jí)時(shí)算出的。5.1.4任務(wù)就緒表每個(gè)任務(wù)被賦予不同的優(yōu)先級(jí),從0級(jí)到最低優(yōu)先級(jí)OS_LOWEST_PRIO,包括0和OS_LOWEST_PRIO在內(nèi)。當(dāng)系統(tǒng)初始化的時(shí)候,最低優(yōu)先級(jí)OS_LOWEST_PRIO總是被賦給空閑任務(wù)idletask。注意,最多任務(wù)數(shù)目OS_MAX_TASK和最低優(yōu)先級(jí)時(shí)沒有關(guān)系的。每個(gè)任務(wù)的就緒態(tài)都放入就緒表中,OSRdyTbl中的相應(yīng)元素的相應(yīng)位也置位。就緒表OSRdyTbl[]數(shù)組的大小取決于OS_LOWEST_PRIO。當(dāng)用戶的應(yīng)用程序中的任務(wù)數(shù)目比較少時(shí),減少OS_LOWEST_PRIO的值可以降低RTOS對(duì)RAM的需求量。為了確定下次改哪個(gè)優(yōu)先級(jí)的任務(wù)運(yùn)行了,內(nèi)核調(diào)度器總是將OS_LOWEST_PRIO在就緒表中相應(yīng)就緒表中的相應(yīng)字節(jié)的相應(yīng)位置置1。如圖5-4當(dāng)優(yōu)先級(jí)0時(shí),OSRdyTbl的第0位置1,當(dāng)優(yōu)先級(jí)1時(shí),OSRdyTbl的第1位置1,當(dāng)優(yōu)先級(jí)2時(shí),OSRdyTbl的第2位置1,當(dāng)優(yōu)先級(jí)3時(shí),OSRdyTbl的第3位置1,當(dāng)優(yōu)先級(jí)4時(shí),OSRdyTbl的第4位置1,當(dāng)優(yōu)先級(jí)5時(shí),OSRdyTbl的第5位置1,當(dāng)優(yōu)先級(jí)6時(shí),OSRdyTbl的第6位置1,當(dāng)優(yōu)先級(jí)7時(shí),OSRdyTbl的第7位置1,圖5-4把任務(wù)放入等待列表中,采用位圖的方式,將任務(wù)放入等待列表。priority表示任務(wù)的優(yōu)先級(jí):OSMapTbl[]的值下標(biāo)二進(jìn)制掩碼000000001100000010200000100300001000400010000500100000601000000710000000OSRdyTbl [priority>>3] |=OSMapTbl[priority&0x07];5.2任務(wù)調(diào)度模塊5.2.1基于優(yōu)先級(jí)搶占調(diào)度當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了或者說是掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立即得到CPU的控制權(quán)。如果中斷服務(wù)子程序使一個(gè)高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級(jí)高的那個(gè)任務(wù)得到運(yùn)行。調(diào)度流程如圖5-5所示:圖5-5基于優(yōu)先級(jí)搶占的內(nèi)核,最高優(yōu)先級(jí)的任務(wù)什么時(shí)候可以執(zhí)行,可以得到CPU的控制權(quán)是可知的。使用基于優(yōu)先級(jí)的搶占式內(nèi)核使得任務(wù)響應(yīng)時(shí)間得以最優(yōu)化?;趦?yōu)先級(jí)調(diào)度的內(nèi)核總是讓就緒態(tài)的高優(yōu)先級(jí)的任務(wù)先運(yùn)行,中斷服務(wù)程序可以搶占CPU,到中斷服務(wù)完成時(shí),內(nèi)核使優(yōu)先級(jí)最高的任務(wù)運(yùn)行,任務(wù)響應(yīng)時(shí)間得到了最優(yōu)化,且是可知的。查找進(jìn)入就緒態(tài)優(yōu)先級(jí)最高的任務(wù)的TCB并完成任務(wù)前換的步驟如圖5-6所示:圖5-6第一步:利用就緒表查找處于就緒態(tài)的最高優(yōu)先級(jí);利用任務(wù)就緒表和OSUnMapTbl[]查詢處于就緒態(tài)優(yōu)先級(jí)最高的任務(wù)的方法如下:priority表示任務(wù)的優(yōu)先級(jí)X=OSUnMapTbl[OSRdyTbl];priority=(INT16U)X;OSUnMapTab[]數(shù)組結(jié)構(gòu)如下所示:INT8UconstOSUnMapTbl[256]={0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00to0x0F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x10to0x1F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x20to0x2F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x30to0x3F*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x40to0x4F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x50to0x5F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x60to0x6F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x70to0x7F*/7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x80to0x8F*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x90to0x9F*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xA0to0xAF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xB0to0xBF*/6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xC0to0xCF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xD0to0xDF*/5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0xE0to0xEF*/4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0/*0xF0to0xFF*/};第二步:查找最高優(yōu)先級(jí)對(duì)應(yīng)的任務(wù)的任務(wù)控制塊,如圖5-7所示;圖5-7第三步:任務(wù)切換保存當(dāng)前任務(wù)的寄存器,把求得的最高優(yōu)先級(jí)的任務(wù)切換為運(yùn)行態(tài),最高優(yōu)先級(jí)得到執(zhí)行。5.2.2時(shí)鐘節(jié)拍函數(shù)時(shí)鐘節(jié)拍是特定的周期性中斷,這個(gè)中斷可以看作是系統(tǒng)心臟的脈動(dòng)。中斷之間的時(shí)間間隔取決于不同的應(yīng)用,一般在10ms到200ms之間,該實(shí)時(shí)內(nèi)核的時(shí)鐘節(jié)拍間隔定義為10ms。時(shí)鐘節(jié)拍率越高,系統(tǒng)的額外負(fù)擔(dān)就越大。OSTimeTick()函數(shù)的處理流程如圖5-8所示:圖5-85.3任務(wù)間的通信RTOS中定義了OS_EVENT數(shù)據(jù)結(jié)構(gòu)來維護(hù)一個(gè)時(shí)間控制塊的所有信息,也成為事件控制塊。除了包括事件的本身的定義,還包括等待該事件任務(wù)的列表。代碼清單如下所示:typedefstruct{ void*OSEventPtr; /*指向消息隊(duì)列的指針*/ INT8U OSEventTbl[OS_EVENT_TBL_SIZE];/*等待任務(wù)列表*/ INT32UOSEventCnt;/*事件計(jì)數(shù)器*/ structtask_id*OSTaskIdTbl[OS_LOWEST_PRIO+1];/*等待狀態(tài)ID塊*/}當(dāng)優(yōu)先級(jí)0時(shí),OSRdyTbl的第0位置1,當(dāng)優(yōu)先級(jí)1時(shí),OSRdyTbl的第1位置1,當(dāng)優(yōu)先級(jí)2時(shí),OSEventTbl的第2位置1,當(dāng)優(yōu)先級(jí)3時(shí),OSEventTbl的第3位置1,當(dāng)優(yōu)先級(jí)4時(shí),OSEventTbl的第4位置1,當(dāng)優(yōu)先級(jí)5時(shí),OSEventTbl的第5位置1,當(dāng)優(yōu)先級(jí)6時(shí),OSEventTbl的第6位置1,當(dāng)優(yōu)先級(jí)7時(shí),OSEventTbl的第7位置1,圖5-9把任務(wù)放入等待列表中,采用位圖存儲(chǔ)的方式,優(yōu)先級(jí)位圖存儲(chǔ)方式中使任務(wù)進(jìn)入阻塞狀態(tài),將任務(wù)放入等待列表。利用.OSEventTbl確定優(yōu)先級(jí)在中的位置。priority是任務(wù)的優(yōu)先級(jí),pevent是等待的事件:pevent.OSEventTbl[priority>>3] |=OSMapTbl[priority&0x07];OSMapTbl[]的值下標(biāo)二進(jìn)制掩碼000000001100000010200000100300001000400010000500100000601000000710000000查找處于等待狀態(tài)優(yōu)先級(jí)最高的任務(wù)并把任務(wù)并將其放入就緒表中步驟如圖5-10所示:圖5-10第一步:查找等待列表中最高優(yōu)先級(jí);利用OSUnMapTbl[]查找最高優(yōu)先級(jí)的方法如下所示:X=OSUnMapTbl[OSEventTbl];priority=(INT16U)X;第二步:查找最高優(yōu)先級(jí)任務(wù)的ID:.OSTaskIdTbl[]數(shù)組是以任務(wù)的優(yōu)先級(jí)為索引,利用最高優(yōu)先級(jí)可以直接找到最高優(yōu)先級(jí)任務(wù)的ID;圖5-11第三步:將最高優(yōu)先級(jí)的任務(wù)編號(hào)從等待列表中刪除,并將其放入就緒列表。6系統(tǒng)測(cè)試6.1項(xiàng)目一:內(nèi)核移植到周立功LPC2138測(cè)試及RS232串口的實(shí)現(xiàn)內(nèi)容:完成對(duì)硬件層的抽象,內(nèi)核可否正常運(yùn)行。輸入:在主函數(shù)中創(chuàng)建任務(wù)。輸出:通過串口在超級(jí)終端顯示相關(guān)信息。測(cè)試方法:在主函數(shù)中輸出部分信息如printf(“runtask\n”),檢查RS232串口驅(qū)動(dòng)是否已經(jīng)實(shí)現(xiàn)。6.2項(xiàng)目二:內(nèi)核多任務(wù)的搶占調(diào)度及任務(wù)的睡眠機(jī)制內(nèi)容:在主函數(shù)中創(chuàng)建兩個(gè)以上的任務(wù),每個(gè)任務(wù)賦予不同的優(yōu)先級(jí),在任務(wù)中調(diào)用taskSleep使任務(wù)主動(dòng)的睡眠一段時(shí)間,觀察在超級(jí)終端中輸出信息。輸入:主函數(shù)中創(chuàng)建的多任務(wù)。輸出:超級(jí)終端輸出的任務(wù)信息。測(cè)試方法:在主函數(shù)中創(chuàng)建兩個(gè)以上的任務(wù),并在函數(shù)中調(diào)用taskSleep使任務(wù)主動(dòng)的睡眠一段時(shí)間,在創(chuàng)建的任務(wù)中輸出相應(yīng)的任務(wù)信息。6.3項(xiàng)目三:任務(wù)管理測(cè)試內(nèi)容:測(cè)試任務(wù)管理的實(shí)現(xiàn)情況,包括=1\*GB3①在任務(wù)中創(chuàng)建任務(wù)和啟動(dòng)任務(wù);=2\*GB3②在任務(wù)中刪除其他任務(wù)以及刪除自身;=3\*GB3③修改任務(wù)的優(yōu)先級(jí):修改自身的優(yōu)先級(jí)和修改其他任務(wù)的優(yōu)先級(jí);=4\*GB3④任務(wù)掛起與恢復(fù):掛起其他任務(wù)和掛起自身,恢復(fù)掛起的任務(wù);=5\*GB3⑤獲得任務(wù)的優(yōu)先級(jí);輸入:在任務(wù)中創(chuàng)建多任務(wù)。輸出:超級(jí)終端輸出的任務(wù)信息。測(cè)試方法:=1\*GB3①在任務(wù)中創(chuàng)建任務(wù)(taskCreate)和啟動(dòng)任務(wù)(taskStart);=2\*GB3②在任務(wù)中刪除其他任務(wù)以及刪除自身(taskDelete());=3\*GB3③修改任務(wù)的優(yōu)先級(jí)(taskPrioritySet):修改自身的優(yōu)先級(jí)和修改其他任務(wù)的優(yōu)先級(jí);=4\*GB3④任務(wù)掛起與恢復(fù)(taskSuspendtaskResume):掛起其他任務(wù)和掛起自身,恢復(fù)掛起的任務(wù);=5\*GB3⑤獲得任務(wù)的優(yōu)先級(jí)(taskPriorityGet);6.4項(xiàng)目四:任務(wù)間通信測(cè)試-互斥信號(hào)量內(nèi)容:互斥信號(hào)量實(shí)現(xiàn)對(duì)資源的互斥訪問,并測(cè)試優(yōu)先級(jí)反轉(zhuǎn)問題是否解決;輸入:主函數(shù)中創(chuàng)建多個(gè)任務(wù)和互斥信號(hào)量;輸出:超級(jí)終端顯示的任務(wù)信息測(cè)試方法:在主函數(shù)中創(chuàng)建信號(hào)量(semCreate),任務(wù)申請(qǐng)得到該互斥型信號(hào)量(semTake),同時(shí)測(cè)試擁有互斥信號(hào)量的任務(wù)是否可以釋放信號(hào)量(semGive);7總結(jié)和展望經(jīng)過了兩個(gè)多月的學(xué)習(xí)和努力,我終于完成了微實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的畢業(yè)設(shè)計(jì)和畢業(yè)論文。從開始選擇設(shè)計(jì)題目到查找相關(guān)資料,從設(shè)計(jì)的逐步完成再到論文文章的結(jié)束,每一階段都有或多或少的問題,但經(jīng)過查看相關(guān)的資料,經(jīng)過老師和同學(xué)們的幫助,原本模糊的概念逐漸清晰,使自己的作品慢慢的完善起來,對(duì)自己的大學(xué)四年學(xué)習(xí)生活有了更深刻的認(rèn)識(shí)。因?yàn)樽陨淼乃较拗?,我設(shè)計(jì)的系統(tǒng)不是很成熟,還有相當(dāng)多的不足之處,但我也學(xué)到了很多的知識(shí)。這次畢業(yè)設(shè)計(jì)使我受益匪淺,我感受到做事情只要認(rèn)真的去做,任何困難都會(huì)解決的。從解決困難的過程中我也體會(huì)到學(xué)習(xí)、研究、思考的樂趣,回顧大學(xué)四年學(xué)習(xí)生活此刻感慨頗多,這四年會(huì)成為我人生中最寶貴的回憶,因?yàn)閷W(xué)校帶給我一生的財(cái)富,無話不談的同學(xué),和藹親切的老師,懷念我的大學(xué)。在以后的工作生活中,我會(huì)充分利用所學(xué)的一切去奮斗。
AbstractDesignandImplementationofMicro-embeddedRealTimeOperatingSystemTianDewei(DepartmentofComputerScienceandTechnology,DezhouUniversity,Dezhou,Abstract:Withthedevelopmentoftheinternetofthings,embeddedsystemsarebecomingincreasinglyimportantinpeople'sdailylives.Embeddedoperatingsysteminembeddeddevelopmentisalsograduallyattractingmoreandmoredevelopers,ithasbecomethefocusofmanymanufact
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度企業(yè)員工績效評(píng)估與薪酬調(diào)整合作合同3篇
- 2024年企事業(yè)單位綠植擺放與養(yǎng)護(hù)管理服務(wù)合同3篇
- 2024年某餐飲企業(yè)與食材供應(yīng)商之間的食材采購合同
- 2024年幕墻腳手架施工分包質(zhì)量檢測(cè)及整改合同3篇
- 2024年度淘寶電商團(tuán)隊(duì)管理與領(lǐng)導(dǎo)力培訓(xùn)服務(wù)協(xié)議3篇
- 2024年商鋪?zhàn)赓U合同模板:市中心黃金地段商鋪?zhàn)赓U管理規(guī)范2篇
- 建筑物拆除爆破工程合約
- 食品加工攪拌機(jī)租賃合同
- 企業(yè)員工績效承諾書樣版
- 企業(yè)用工信息化管理策略
- 機(jī)電安裝工操作規(guī)程
- 2023年現(xiàn)場(chǎng)管理與改善手法
- 心跳驟停后目標(biāo)體溫管理
- 數(shù)獨(dú)-九宮格學(xué)習(xí)資料課件
- 市場(chǎng)調(diào)研員工作流程圖
- 生態(tài)毒理學(xué)-山西大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 動(dòng)畫分鏡頭腳本文檔模板
- 大事記編寫規(guī)范
- 當(dāng)代大學(xué)生國家安全教育學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 外立面泛光照明施工方案
- 住院患者非計(jì)劃拔管危險(xiǎn)因素評(píng)估量表
評(píng)論
0/150
提交評(píng)論