




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目錄一、嵌入式系統(tǒng)簡介21.1 嵌入式系統(tǒng)的定義和特點(diǎn)21.2 嵌入式系統(tǒng)的構(gòu)成31.3 嵌入式系統(tǒng)的應(yīng)用51.4 嵌入式系統(tǒng)的工具鏈61.5 嵌入式系統(tǒng)的發(fā)展趨勢7二、嵌入式系統(tǒng)的學(xué)習(xí)實(shí)踐8三、實(shí)驗(yàn)內(nèi)容93.1 ZedBoard-Zynq7000介紹93.2 軟件的安裝設(shè)置103.3 main函數(shù)分析103.4 任務(wù)管理123.4.1 任務(wù)優(yōu)先級133.4.2 任務(wù)的堆棧143.4.3 任務(wù)的狀態(tài)143.5 就緒任務(wù)的管理153.6 任務(wù)調(diào)度173.6.1 任務(wù)搶占173.6.2 輪轉(zhuǎn)調(diào)度183.6.3 調(diào)度時(shí)機(jī)193.6.4 調(diào)度實(shí)現(xiàn)193.7 上下文切換20四、工作總結(jié)22一、嵌入式系統(tǒng)
2、簡介1.1 嵌入式系統(tǒng)的定義和特點(diǎn)嵌入式操作系統(tǒng)(Embedded Operation System,EOS)是一種“嵌入機(jī)械或電氣系統(tǒng)內(nèi)部、具有專屬功能的計(jì)算機(jī)系統(tǒng)”,通常要求實(shí)時(shí)計(jì)算性能。被嵌入的系統(tǒng)通常是包含硬件和機(jī)械部件的完整設(shè)備。相反,通用計(jì)算機(jī)如個(gè)人計(jì)算機(jī)則設(shè)計(jì)靈活,以滿足廣大終端用戶的需求?,F(xiàn)在常見的很多設(shè)備都采用嵌入式系統(tǒng)控制。EOS負(fù)責(zé)嵌入系統(tǒng)的全部軟、硬件資源的分配、任務(wù)調(diào)度,控制、協(xié)調(diào)并發(fā)活動。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能。嵌入式系統(tǒng)與對象系統(tǒng)密切相關(guān),其主要技術(shù)發(fā)展方向是滿足嵌入式應(yīng)用要求,不斷擴(kuò)展對象系統(tǒng)要求的外圍電路(如AD
3、C、DAC、PWM、日歷時(shí)鐘、電源監(jiān)測、程序運(yùn)行監(jiān)測電路等),形成滿足對象系統(tǒng)要求的應(yīng)用系統(tǒng)。因此,嵌入式系統(tǒng)作為一個(gè)專用計(jì)算機(jī)系統(tǒng),要不斷向計(jì)算機(jī)應(yīng)用系統(tǒng)發(fā)展。因此,可以把定義中的專用計(jì)算機(jī)系統(tǒng)引伸成,滿足對象系統(tǒng)要求的計(jì)算機(jī)應(yīng)用系統(tǒng)?!扒度胄浴?、“專用性”與“計(jì)算機(jī)系統(tǒng)”是嵌入式系統(tǒng)的三個(gè)基本要素。對象系統(tǒng)則是指嵌入式系統(tǒng)所嵌入的宿主系統(tǒng)。另外,在理解嵌入式系統(tǒng)定義時(shí),不要與嵌入式設(shè)備相混淆。嵌入式設(shè)備是指內(nèi)部有嵌入式系統(tǒng)的產(chǎn)品、設(shè)備,例如,內(nèi)含單片機(jī)的家用電器、儀器儀表、工控單元、機(jī)器人、手機(jī)、PDA等。嵌入式系統(tǒng)的特點(diǎn)與定義不同,它是由定義中的三個(gè)基本要素衍生出來的。不同的嵌入式系統(tǒng)其
4、特點(diǎn)會有所差異。與“嵌入性”的相關(guān)特點(diǎn):由于是嵌入到對象系統(tǒng)中,必須滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣/氣氛環(huán)境(可靠)、成本(價(jià)廉)等要求的特點(diǎn)。與“專用性”的相關(guān)特點(diǎn):軟、硬件的裁剪性。滿足對象要求的最小軟、硬件配置等。與“計(jì)算機(jī)系統(tǒng)”的相關(guān)特點(diǎn):嵌入式系統(tǒng)必須是能滿足對象系統(tǒng)控制要求的計(jì)算機(jī)系統(tǒng)。與上兩個(gè)特點(diǎn)相呼應(yīng),這樣的計(jì)算機(jī)必須配置有與對象系統(tǒng)相適應(yīng)的接口電路。目前,已推出一些應(yīng)用比較成功的EOS產(chǎn)品系列。隨著Internet技術(shù)的發(fā)展、信息家電的普及應(yīng)用及EOS的微型化和專業(yè)化,EOS開始從單一的弱功能向高專業(yè)化的強(qiáng)功能方向發(fā)展。嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的
5、相關(guān)依賴性、軟件固化以及應(yīng)用的專用性等方面具有較為突出的特點(diǎn)。EOS是相對于一般操作系統(tǒng)而言的,它除具備了一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件功能等外,還有以下特點(diǎn):(1)可裝卸性。開放性、可伸縮性的體系結(jié)構(gòu)。(2)強(qiáng)實(shí)時(shí)性。EOS實(shí)時(shí)性一般較強(qiáng),可用于各種設(shè)備控制當(dāng)中。(3)統(tǒng)一的接口。提供各種設(shè)備驅(qū)動接口。(4)操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學(xué)易用。(5)提供強(qiáng)大的網(wǎng)絡(luò)功能,支持TCP/IP協(xié)議及其它協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問層接口,為各種移動計(jì)算設(shè)備預(yù)留接口. (6)強(qiáng)穩(wěn)定性,弱交互性。嵌入式系統(tǒng)一旦
6、開始運(yùn)行就不需要用戶過多的干預(yù),這就要負(fù)責(zé)系統(tǒng)管理的EOS具有較強(qiáng)的穩(wěn)定性。嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過系統(tǒng)調(diào)用命令向用戶程序提供服務(wù)。(7)固化代碼。在嵌入系統(tǒng)中,嵌入式操作系統(tǒng)和應(yīng)用軟件被固化在嵌入式系統(tǒng)計(jì)算機(jī)的ROM中。輔助存儲器在嵌入式系統(tǒng)中很少使用,因此,嵌入式操作系統(tǒng)的文件管理功能應(yīng)該能夠很容易地拆卸,而用各種內(nèi)存文件系統(tǒng).(8)更好的硬件適應(yīng)性,也就是良好的移植性.1.2 嵌入式系統(tǒng)的構(gòu)成嵌入式系統(tǒng)按形態(tài)可分為設(shè)備級(工控機(jī))、板級(單板、模塊)、芯片級(MCU、SoC)。嵌入式系通常由嵌入式處理器、外圍設(shè)備、嵌入式操作系統(tǒng)和應(yīng)用軟件等幾大部分組成。嵌入式系
7、統(tǒng)與對象系統(tǒng)密切相關(guān),其主要技術(shù)發(fā)展方向是滿足嵌入式應(yīng)用要求,不斷擴(kuò)展對象系統(tǒng)要求的外圍電路(如ADC、DAC、PWM、日歷時(shí)鐘、電源監(jiān)測、程序運(yùn)行監(jiān)測電路等),形成滿足對象系統(tǒng)要求的應(yīng)用系統(tǒng)。因此,嵌入式系統(tǒng)作為一個(gè)專用計(jì)算機(jī)系統(tǒng),要不斷向計(jì)算機(jī)應(yīng)用系統(tǒng)發(fā)展。(1)嵌入式處理器嵌入式處理器是嵌入式系統(tǒng)的核心部件。嵌入式處理器與通用處理器的最大不同點(diǎn)在于其大多工作在為特定用戶群設(shè)計(jì)的系統(tǒng)中。它通常把通用計(jì)算機(jī)中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有有利于嵌入式系統(tǒng)設(shè)計(jì)趨于小型化,并具有高效率、高可靠性等特征。嵌入式處理器大概可分為兩類。一類是普通微處理器:使用獨(dú)立的集成電路存儲器和外設(shè)。另
8、一類是單片機(jī):具有片上外設(shè),降低了功耗、尺寸和成本。嵌入式系統(tǒng)的軟件是為某種應(yīng)用定制的,而不是像個(gè)人計(jì)算機(jī)那樣的由終端用戶安裝的商品,因此可以使用各種不同的基本CPU架構(gòu):既有范紐曼型架構(gòu)也有不同程度的哈佛結(jié)構(gòu);既有RISC也有非精簡指令集處理器;字長從4位到64位甚至更高,當(dāng)然最典型的仍然是8/16位。多數(shù)架構(gòu)由幾家不同的公司生產(chǎn),使用了大量不同的變量和類型。嵌入式系統(tǒng)也會使用通用型微處理器,但比單片機(jī)需要更多外圍電路。大的硬件廠商會推出自己的嵌入式處理器,因而現(xiàn)今市面上有1000多種嵌入式處理器芯片,其中使用最為廣泛的有ARM 、MIPS、PowerPC、MC6800等。SoC是一種常見的
9、為超大批量嵌入式系統(tǒng)設(shè)計(jì)的可配置陣列。它在單個(gè)芯片內(nèi)包含了多處理器、乘法器、緩存和接口,形成一個(gè)完整的系統(tǒng);通過特定用途集成電路或現(xiàn)場可編程門陣列來實(shí)現(xiàn)。(2)嵌入式主板嵌入式主板一般理解為嵌入在設(shè)備里面做控制、數(shù)據(jù)處理使用的CPU板,也就是設(shè)備的“大腦”。嵌入式到設(shè)備里面,當(dāng)然就會對主板的體積以及功耗(嵌入式主板的散熱問題)有比較嚴(yán)格的要求。所以一般來講嵌入式主板會具備尺寸小、高集成度、低功耗等特性。目前嵌入式主板比較常見的一般有兩大類:基于X86的嵌入式主板(一般使用INTEL、威盛、AMD或其他產(chǎn)家的X86芯片如:臺灣RDC、臺灣ICOP等等);基于RISC的ARM 嵌入式主板(由ARM
10、公司授權(quán)生產(chǎn),每個(gè)芯片產(chǎn)家各有自己特殊的功能)。嵌入式的ARM板一般都是板載CPU,而基于x86 CPU的主板則不一定。基于RISC 的ARM板一般都是根據(jù)產(chǎn)品的要求做具體設(shè)計(jì),所以主板在尺寸外觀上面通常沒有做定義。PC/104和PC/104+是小型、小批量嵌入式強(qiáng)固系統(tǒng)的標(biāo)準(zhǔn)之一,大多基于x86架構(gòu);通常比標(biāo)準(zhǔn)PC要小,而比多數(shù)簡單的8/16位嵌入式系統(tǒng)要大;使用MSDOS、Linux、NetBSD,或?qū)崟r(shí)嵌入式操作系統(tǒng)如MicroC/OS-II、QNX、VxWorks。有時(shí)這些主板也會使用非x86處理器。在某些應(yīng)用中,小巧、高效并非主要關(guān)注點(diǎn),因而可以使用與x86型PC主板兼容的部件。VI
11、A EPIA系列板卡則可以彌補(bǔ)這個(gè)空缺,它兼容PC但是高度集成、體積較小,或提供其他對嵌入式工程師很有吸引力的特性。這種方法的好處是低成本商品也可以使用通用的軟件開發(fā)工具。用這種方法構(gòu)建的系統(tǒng)仍然是嵌入式系統(tǒng),因?yàn)樗度朐谳^大的設(shè)備中、用于滿足單一用途。例如ATM和電子游戲機(jī),它們都包含了針對各自應(yīng)用的代碼。多數(shù)嵌入式主板都不是圍繞PC設(shè)計(jì)的,也不使用ISA或PCI總線。如果采用SoC處理器,用標(biāo)準(zhǔn)總線連接分立組件就不是上策,此外軟硬件開發(fā)環(huán)境都可能會很不一樣。一種常用的設(shè)計(jì)模式是采用小型系統(tǒng)模塊也許只有商務(wù)卡片大小,容納高密度的BGA芯片如ARM處理器和外設(shè)、用于存儲的外部閃存、作為內(nèi)存的D
12、RAM。模塊廠商通常會提供引導(dǎo)軟件和操作系統(tǒng)選項(xiàng),一般包括Linux和一些實(shí)時(shí)操作系統(tǒng)。這些模塊由熟悉專業(yè)測試方法的組織大批量生產(chǎn),配合較小批量的、帶特殊應(yīng)用外設(shè)的定制主板使用。(3)外圍設(shè)備外圍設(shè)備是指在一個(gè)嵌入式系統(tǒng)中,除了嵌入式處理器以外用于完成存儲、通信、調(diào)試、顯示等輔助功能的其它部件。根據(jù)外圍設(shè)備的功能可以分為存儲器、接口和人機(jī)交互。嵌入式系統(tǒng)通過外設(shè)與外部通信串行,包括通信接口:RS-232、RS-422、RS-485等;同步串行通信接口:I2C、SPI、ESSI等;USB;多媒體卡:SD卡、CF卡等;網(wǎng)絡(luò):以太網(wǎng)、LonWorks等;現(xiàn)場總線:CAN總線、LIN總線、PROFIB
13、US等;定時(shí)器:PLL、捕獲比較模塊和時(shí)間處理單元;分立IO:GPIO;模擬-數(shù)字/數(shù)字-模擬轉(zhuǎn)換(ADC/DAC);調(diào)試接口:JTAG、ISP、ICSP、BDM端口、BITP、DP9端口等。(4)嵌入式操作系統(tǒng)在大型嵌入式應(yīng)用系統(tǒng)中,為了使嵌入式開發(fā)更方便、快捷,需要具備一種穩(wěn)定、安全的軟件模塊集合,用以管理存儲器分配、中斷處理、任務(wù)間通信和定時(shí)器響應(yīng),以及提供多任務(wù)處理等,即嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)的引入大大的提高了嵌入式系統(tǒng)的功能,方便了應(yīng)用軟件的設(shè)計(jì),但同時(shí)占用了寶貴的嵌入式系統(tǒng)資源。一般在比較大型或需要多任務(wù)的應(yīng)用場合才考慮使用嵌入式系統(tǒng)。嵌入式系統(tǒng)常常需要有實(shí)時(shí)要求,所以嵌入
14、式操作系統(tǒng)往往又是“實(shí)時(shí)操作系統(tǒng) ”。早期的嵌入式系統(tǒng)幾乎都用于控制目的,從而或多或少都有些實(shí)時(shí)要求,所以從前“嵌入式操作系統(tǒng)”實(shí)際上是“實(shí)時(shí)操作系統(tǒng)”的代名詞。今年來由于手持式計(jì)算機(jī)和掌上電腦等設(shè)備的出現(xiàn),也有了不帶實(shí)時(shí)要求的嵌入式系統(tǒng)。另外一方面,由于CPU速度的提高,一些原先認(rèn)為是“實(shí)時(shí)”的反應(yīng)速度現(xiàn)在已經(jīng)很普遍了。這樣,一些原先需要在“實(shí)時(shí)”操作系統(tǒng)上才能實(shí)現(xiàn)的應(yīng)用,現(xiàn)在已不難在常的操作系統(tǒng)上實(shí)現(xiàn)。在這樣的背景下,“嵌入式操作系統(tǒng)”和“實(shí)時(shí)操作系統(tǒng)”就成了不同的概念名詞。常見的嵌入式操作系統(tǒng)有: Android、Firefox OS、iPhone OS、uC/OS 、uCLinux、V
15、xWorks、pSOS、Nucleus、PalmOS、Windows CE、Windows XP Embedded、Windows Vista Embedded、嵌入式Linux、ECOS、QNX、Lynx、Symbian、Arm-Linux等。(5)應(yīng)用軟件嵌入式系統(tǒng)的應(yīng)用軟件是針對特定的實(shí)際專業(yè)領(lǐng)域,基于相應(yīng)的嵌入式硬件平臺,并能完成用戶的預(yù)期任務(wù)的計(jì)算機(jī)軟件。用戶的任務(wù)可能有時(shí)間和精度的要求。有些應(yīng)用軟件需要嵌入操作系統(tǒng)的支持,但在簡單的場合下不需要專門的操作系統(tǒng)。由于嵌入式應(yīng)用軟件對成本十分敏感,因此,為減少系統(tǒng)成本,除了精簡每個(gè)硬件單元的成本外,應(yīng)盡可能的減少應(yīng)用軟件的資源消耗,盡可
16、能的優(yōu)化。1.3 嵌入式系統(tǒng)的應(yīng)用嵌入式計(jì)算機(jī)在應(yīng)用數(shù)量上遠(yuǎn)遠(yuǎn)超過了各種通用計(jì)算機(jī),一臺通用計(jì)算機(jī)的外部設(shè)備中就包含了5-10個(gè)嵌入式微處理器。嵌入式系統(tǒng)技術(shù)具有非常廣闊的應(yīng)用前景,其應(yīng)用領(lǐng)域可以包括:工業(yè)控制:業(yè)過程控制、數(shù)字機(jī)床、電力系統(tǒng)、電網(wǎng)安全、電網(wǎng)設(shè)備監(jiān)測、石油化工系統(tǒng);交通管理:在車輛導(dǎo)航、流量控制、信息監(jiān)測與汽車服務(wù)方面,嵌入式系統(tǒng)技術(shù)已經(jīng)獲得了廣泛的應(yīng)用,內(nèi)嵌GPS模塊,GSM模塊的移動定位終端已經(jīng)在各種運(yùn)輸行業(yè)獲得了成功的使用;信息家電:這將稱為嵌入式系統(tǒng)最大的應(yīng)用領(lǐng)域,冰箱、空調(diào)等的網(wǎng)絡(luò)化、智能化將引領(lǐng)人們的生活步入一個(gè)嶄新的空間。即使你不在家里,也可以通過電話線、網(wǎng)絡(luò)進(jìn)行
17、遠(yuǎn)程控制。在這些設(shè)備中,嵌入式系統(tǒng)將大有用武之地。家庭智能管理系統(tǒng):水、電、煤氣表的遠(yuǎn)程自動抄表,安全防火、防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實(shí)現(xiàn)更高,更準(zhǔn)確和更安全的性能;POS網(wǎng)絡(luò)及電子商務(wù):公共交通無接觸智能卡(Contactless Smartcard, CSC)發(fā)行系統(tǒng),公共電話卡發(fā)行系統(tǒng),自動售貨機(jī),各種智能ATM終端將全面走入人們的生活,到時(shí)手持一卡就可以行遍天下。環(huán)境工程與自然:水文資料實(shí)時(shí)監(jiān)測,防洪體系及水土質(zhì)量監(jiān)測、堤壩安全,地震監(jiān)測網(wǎng),實(shí)時(shí)氣象信息網(wǎng),水源和空氣污染監(jiān)測。在很多環(huán)境惡劣,地況復(fù)雜的地區(qū),嵌入式系統(tǒng)將實(shí)現(xiàn)無人監(jiān)測。軍事領(lǐng)域:戰(zhàn)機(jī)、火控系
18、統(tǒng)、導(dǎo)彈、火箭。1.4 嵌入式系統(tǒng)的工具鏈工具對工程師設(shè)計(jì)開發(fā)的成功所起的決定性因素也在提高。應(yīng)用越來越復(fù)雜,工具的選擇也越來越重要?,F(xiàn)在市場上有些工具是免費(fèi)的,也有很多商業(yè)工具。無論是免費(fèi)的還是商業(yè)的,工具的好壞往往會影響整個(gè)工程的最終結(jié)果?,F(xiàn)在的嵌入式系統(tǒng)開發(fā)工具非常多樣化,市場分散。目前據(jù)不完全統(tǒng)計(jì),全世界嵌入式處理器的品種數(shù)已經(jīng)超過1000多種,流行體系結(jié)構(gòu)有30多個(gè)系列,在其上運(yùn)行的操作系統(tǒng)環(huán)境也非常多樣化,包括VxWorks、QNX、Linux、 Nuclears、WinCE等等。不僅各種操作系統(tǒng)有各自的開發(fā)工具,在同一系統(tǒng)下不同的開發(fā)階段也有不同的開發(fā)工具。如在用戶的目標(biāo)板開發(fā)初
19、期,需要硬件仿真器來調(diào)試硬件系統(tǒng)和基本的驅(qū)動程序,在調(diào)試應(yīng)用程序階段使用交互式的開發(fā)環(huán)境進(jìn)行軟件調(diào)試,在測試階段需要專門的測試軟件進(jìn)行功能和性能的測試等等。對于設(shè)計(jì)人員來說,要掌握、駕馭這樣龐大的開發(fā)體系是一件非常困難的事情,而且編程的復(fù)雜度相當(dāng)大。在選擇工具時(shí),主要需要注意以下幾個(gè)方面:編譯器的性能和穩(wěn)定性、代碼覆蓋、仿真(不僅是對CPU的仿真,還有對其他硬件和設(shè)備的仿真)。工具鏈,一般由編譯器、連接器、解釋器和調(diào)試器組成,在嵌入式開發(fā)中一般指交叉工具鏈。在嵌入式開發(fā)中,往往在機(jī)器A中使用工具鏈生成可執(zhí)行程序,而在機(jī)器B中執(zhí)行程序。而機(jī)器A和機(jī)器B的指令系統(tǒng)往往不同,常見的是利用x86機(jī)器上
20、的工具鏈開發(fā)基于ARM或MIPS的嵌入式系統(tǒng)。工具鏈的構(gòu)成往往與目標(biāo)對象和使用工具鏈的操作系統(tǒng)平臺有關(guān)。通常構(gòu)建交叉工具鏈有如下三種方法:(1)分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學(xué)習(xí)構(gòu)建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構(gòu)建交叉工具鏈。(2)通過諸如Crosstool等腳本工具來實(shí)現(xiàn)一次編譯,生成交叉編譯工具鏈。該方法相對要簡單許多,并且出錯(cuò)的機(jī)會也非常少,建議大多數(shù)情況下使用該方法構(gòu)建交叉編譯工具鏈。(3)直接通過網(wǎng)上下載已經(jīng)制作好的交叉編譯工具鏈。該方法的優(yōu)點(diǎn)不用多說,當(dāng)然是簡單省事,但該方法
21、有一定的弊端就是局限性太大,因?yàn)楫吘故莿e人構(gòu)建好的,也就是固定的,沒有靈活性,所以構(gòu)建所用的庫以及編譯器的版本也許并不適合你要編譯的程序,同時(shí)也許會在使用時(shí)出現(xiàn)許多莫名其妙的錯(cuò)誤,建議慎用此方法。對于新手而言,直接下載一些廠商提供的集成開發(fā)環(huán)境(IDE),能夠快速入手嵌入式開發(fā)。常用的IDE有Keil MDK、Xilinx ISE、Xilinx EDK、TKStudio IDE、Atmel的AVR Studio(for AVR以及AVR32)、Microchip的MPLab(for PIC、PIC18與dsPIC等)、Aiji的EDS(for ARM),南京萬利的MedWin(for 8051
22、)、IAR Embedded Workbench等?!罢w解決方案是毒藥”,我們使用IDE但是不要迷信整體解決方案。嵌入式系統(tǒng)開發(fā)工具的發(fā)展已經(jīng)有二十多年的歷史,目前開放性和開放源碼成為一股強(qiáng)大的潮流,推動嵌入式系統(tǒng)設(shè)計(jì)技術(shù)向前發(fā)展,傳統(tǒng)的嵌入式系統(tǒng)開發(fā)工具已不能適應(yīng)這一潮流。最新的發(fā)展趨勢是,使用Eclipse開放源碼集成化開發(fā)環(huán)境(IDE)平臺,采用插件技術(shù),在這樣的平臺基礎(chǔ)上擴(kuò)展許多開發(fā)工具套件。越來越多的嵌入式系統(tǒng)軟件供應(yīng)商將Eclipse平臺作為自身工具的基礎(chǔ),推出個(gè)性化的開發(fā)工具套件,除提供標(biāo)準(zhǔn)的編譯器、編輯器、調(diào)試器,還提供增強(qiáng)的操作系統(tǒng)內(nèi)核級調(diào)試手段和高級的系統(tǒng)分析工具,如內(nèi)存
23、泄漏檢測、系統(tǒng)性能監(jiān)控等??傊?,嵌入式開發(fā)工具將向高度集成、編譯優(yōu)化、具有系統(tǒng)設(shè)計(jì)、可視化建模、仿真和驗(yàn)證功能方向發(fā)展。1.5 嵌入式系統(tǒng)的發(fā)展趨勢在嵌入式系統(tǒng)開發(fā)領(lǐng)域,技術(shù)發(fā)展的最新趨勢可以從企業(yè)層面、平臺層面和部件層面分別觀察,其核心是以盡可能快的速度、盡可能低的成本來滿足迅速變化的市場需求。(1)以往,嵌入式軟件開發(fā)的技術(shù)問題主要是在工程師和開發(fā)團(tuán)隊(duì)的層面來解決。不同的工程師和開發(fā)項(xiàng)目之間可以共享的資源并沒有得到足夠的重視和利用,這是業(yè)界經(jīng)常說的一個(gè)問題制造每輛汽車都必須從輪子開始。共享資源、提高軟件部件的可重用性,這是整個(gè)軟件業(yè)界幾十年來的普遍趨勢,只是這個(gè)趨勢在嵌入式軟件領(lǐng)域的步伐比
24、企業(yè)軟件慢了不少。隨著DSO(Device Software Optimization,設(shè)備軟件優(yōu)化)概念的提出,嵌入式軟件的可重用性將會得到快速提高。這就是嵌入式軟件在企業(yè)層面的主流趨勢。(2)從開發(fā)平臺層面來看,開放已經(jīng)成為一種主流思想,對于開放系統(tǒng)首先會讓人想到的就是Linux。不過,開放本身不是一種技術(shù),而是一種包容先進(jìn)技術(shù)的思路和方法。新技術(shù)往往是從封閉開始,通過走向開放而發(fā)揮更大的價(jià)值。(3)從部件層面來看,最主流的趨勢是多核技術(shù)的興起。這個(gè)趨勢從處理器芯片巨頭的動向可以一目了然。對于嵌入式軟件工程師來講,采用開放、高效并且能夠讓自己不斷積累開發(fā)成果的開發(fā)平臺與工具,讓自己能夠?qū)W?/p>
25、于產(chǎn)品功能特性的開發(fā),而不是花費(fèi)太多精力去做維護(hù)工具和基礎(chǔ)性、重復(fù)性的功能開發(fā)。二、嵌入式系統(tǒng)的學(xué)習(xí)實(shí)踐目前從事嵌入式開發(fā)的主要有兩類人。一類是學(xué)電子工程、通信工程等偏硬件專業(yè)出身的人,他們主要是搞硬件設(shè)計(jì),需要開發(fā)一些與硬件關(guān)系最密切的最底層軟件:BootLoader、Board SupportPackage(像PC的BIOS一樣,往下驅(qū)動硬件,往上支持操作系統(tǒng)),最初級的硬件驅(qū)動程序等。他們的優(yōu)勢是對硬件原理非常清楚,不足是他們更擅長定義各種硬件接口,但對復(fù)雜軟件系統(tǒng)往往力不從心(例如嵌入式操作系統(tǒng)原理和復(fù)雜應(yīng)用軟件等)。另一類是學(xué)軟件、計(jì)算機(jī)專業(yè)出身的人,主要從事嵌入式操作系統(tǒng)和應(yīng)用軟件
26、的開發(fā)。如果我們學(xué)軟件的人對硬件原理和接口有較好的掌握,我們完全也可寫B(tài)SP和硬件驅(qū)動程序。嵌入式硬件設(shè)計(jì)完后,各種功能就全靠軟件來實(shí)現(xiàn)了,嵌入式設(shè)備的增值很大程度上取決于嵌入式軟件,這占了嵌入式系統(tǒng)的最主要工作。目前有很多公司將硬件設(shè)計(jì)包給了專門的硬件公司,稍復(fù)雜的硬件都交給臺灣或國外公司設(shè)計(jì),國內(nèi)的硬件設(shè)計(jì)力量很弱,很多嵌入式公司自己只負(fù)責(zé)開發(fā)軟件,因?yàn)楣径贾?,嵌入式產(chǎn)品的差異很大程度在軟件上,在軟件方面是最有“花頭”可做的,所以搞軟件的人完全不用擔(dān)心我們在嵌入式市場上的用武之地,越是智能設(shè)備越是復(fù)雜系統(tǒng),軟件越起關(guān)鍵作用,而且這是目前的趨勢。中國的學(xué)生能夠在大學(xué)相關(guān)課程中充分對MCU
27、基礎(chǔ)知識進(jìn)行學(xué)習(xí),這已經(jīng)走在了很多國家(甚至包括日本)的前面。但中國新一代工程師面對的主要問題是如何去積累經(jīng)驗(yàn)。嵌入式系統(tǒng)的開發(fā)通常是硬件和軟件同時(shí)進(jìn)行的,其在開發(fā)過程中出現(xiàn)不良狀況的原因有可能是硬件或是軟件,有時(shí)甚至可能是兩者同時(shí)發(fā)生故障。在這樣的狀況下,就要求從事硬件的技術(shù)人員要相當(dāng)程度的懂得軟件,從事軟件的技術(shù)開發(fā)人員也要在一定程度上懂得硬件。另外,目前該行業(yè)存在最終產(chǎn)品的壽命較短的情況,這就意味著每年都有必要開發(fā)新的產(chǎn)品。但是從初級階段進(jìn)行開發(fā),需要花費(fèi)大量的開發(fā)成本及開發(fā)時(shí)間。因此,有效地歸納總結(jié)現(xiàn)有的開發(fā)成果,并有效地投入新開發(fā)中加以利用是十分重要的。很多工程師在設(shè)計(jì)嵌入式系統(tǒng)的時(shí)
28、候往往選擇最底層的工具,把絕大部分的時(shí)間都花在了底層的細(xì)節(jié),而往往忽視了創(chuàng)新性和系統(tǒng)級的把握。工程師無論是為了自身的發(fā)展還是為了所設(shè)計(jì)產(chǎn)品的競爭力,這兩點(diǎn)其實(shí)都是至關(guān)重要的。首先是“工欲善其事,必先利其器”,若有條件要盡可能采用更快更強(qiáng)的工具進(jìn)行開發(fā)。其次是“磨刀不誤砍柴工”,要盡可能挖掘集成開發(fā)軟件中的資源,如花些時(shí)間去了解許多實(shí)用輔助軟件,如DMA、Cache和片內(nèi)帶寬分析工具等。同時(shí),在至少一個(gè)領(lǐng)域中具有深入的技術(shù)知識。工程師能夠分析問題或是編寫程序是遠(yuǎn)遠(yuǎn)不夠的,他們還要能夠利用自己的知識完成獨(dú)特創(chuàng)新的設(shè)計(jì)。所以,工程師要體現(xiàn)自身價(jià)值,必須有系統(tǒng)性的眼光,能夠進(jìn)行有創(chuàng)新性的設(shè)計(jì)。在這種情
29、況下,工程師們更多的應(yīng)該從底層的編程細(xì)節(jié)中脫身,讓工具去處理那些“常規(guī)”事務(wù),而工程師本身就可以專注于自己的設(shè)計(jì)或研究領(lǐng)域,從更高的角度來看待自己在設(shè)計(jì)的系統(tǒng),而不是只見樹木,不見森林。三、實(shí)驗(yàn)內(nèi)容我所在的小組的實(shí)驗(yàn)任務(wù),基于ZedBoard-Zynq7000的C/OS-III代碼的分析和調(diào)試,重點(diǎn)分析C/OS-III操作系統(tǒng)的任務(wù)調(diào)度機(jī)制。3.1 ZedBoard-Zynq7000介紹ZedBoard是一款基于賽靈思Zynq-7000可擴(kuò)展處理平臺(EPP)的低成本開發(fā)板,也是行業(yè)首款面向廣大開源小區(qū)的Zynq -7000 EP可擴(kuò)展處理平臺開發(fā)工具包。開發(fā)板為基于Linux、安卓、Wind
30、ows或其它操作系統(tǒng)/實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)開發(fā)提供了所需的一切。另外,該平臺提供數(shù)款擴(kuò)展連接器,便于用戶訪問處理系統(tǒng)和可編程邏輯。Zynq-7000 EPP緊密集成了ARM®處理系統(tǒng)和7系列可編程邏輯,充分利用它們的優(yōu)勢,并結(jié)合ZedBoard可以開發(fā)出獨(dú)樹一幟且功能強(qiáng)大的設(shè)計(jì)。圖一:ZedBoard-Zynq7000Zynq7000系列是基于Xilinx的可編程SOC架構(gòu),集成了一個(gè)雙核的ARM® Cortex-A9 處理器,一個(gè)Xilinx可編程邏輯(PL)。Zynq7000集成有仿真芯片,提供了板載USB-JTAG編程、USB-UART,方便開發(fā)者進(jìn)行調(diào)試。圖二:Zyn
31、q-7000 AP SoC系統(tǒng)框架3.2 軟件的安裝設(shè)置(1)安裝UART驅(qū)動。目前只有32位版本的,在windows 7以下可安裝。在windows 8安裝失敗。(2)安裝Vivado Design Suite.選擇默認(rèn)安裝即可。(3)uCOS-III項(xiàng)目的構(gòu)建。Micrium-ZC702-uCOS-III源碼壓縮包中有“Micrium ZC702 uCOS-III Readme.pdf”說明書。打開Xilinx SDK,安裝說明書里面的步驟一步一步進(jìn)行配置即可完成uCOS-III 項(xiàng)目的構(gòu)建。3.3 main函數(shù)分析結(jié)合Micrium-uCOS-III-UserManual對代碼進(jìn)行靜態(tài)分
32、析,最好的方法是找到程序入口函數(shù)main(ZC702_uCOSIIIApplicationapp.c),然后在main函數(shù)內(nèi)逐行代碼分析從而對程序的流程有一個(gè)大體的了解。在分析過程中碰到關(guān)鍵或感興趣的函數(shù)或結(jié)構(gòu)可以進(jìn)一步跟入分析。int main (void) OS_ERR os_err; Xil_DCacheDisable();/關(guān)數(shù)據(jù)cache Xil_ICacheDisable();/關(guān) instruction cache Reset_Handler(); /* Scatter loading is complete. */ /* Now the caches can be activa
33、ted. */ BSP_BranchPredictorEn(); /* Enable branch prediction. */ BSP_L2C310Config(); /* Configure the L2 cache controller. */ BSP_CachesEn(); /* Enable L1 I&D caches + L2 unified cache. */ CPU_Init(); /* Initialize the uC/CPU services */ BSP_Init(); OSInit(&os_err); /* Initialize uC/OS-III.
34、*/ OSTaskCreate(OS_TCB *)&AppTaskStartTCB,/任務(wù)控制塊 /* Create the start task */ (CPU_CHAR *)"Startup Task", (OS_TASK_PTR ) AppTaskStart,/任務(wù)地址 (void *) 0, (OS_PRIO ) APP_CFG_TASK_START_PRIO, (CPU_STK *)&AppTaskStartStk0, (CPU_STK_SIZE) APP_CFG_TASK_START_STK_SIZE / 10u, (CPU_STK_SIZE)
35、APP_CFG_TASK_START_STK_SIZE, (OS_MSG_QTY ) 0u, (OS_TICK ) 0u, (void *) 0, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&os_err); OSStart(&os_err); /* Start multitasking (i.e. give control to uC/OS-III). */ for(;) 對main函數(shù)內(nèi)調(diào)用的一些函數(shù)和結(jié)構(gòu)做進(jìn)一步分析,可知OS_TCB(ZC702_uCOSIIIuCOS-IIISourc
36、eos.h)是系統(tǒng)用于表示一個(gè)任務(wù)的結(jié)構(gòu),是系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)之一。OSInit(ZC702_uCOSIIIuCOS-IIISourceos_core.c)函數(shù)是值得重點(diǎn)看的函數(shù)。main->OSInit->OS_IdleTaskInit,通過調(diào)用OS_IdleTaskInit的調(diào)用創(chuàng)建了系統(tǒng)的一個(gè)名叫“uC/OS-III Idle Task”的任務(wù),其優(yōu)先級值為31。這個(gè)任務(wù)相應(yīng)執(zhí)行的函數(shù),基本沒有做任何操作,簡單對OSIdleTaskCtr、OSStatTaskCtr兩個(gè)系統(tǒng)計(jì)數(shù)進(jìn)行增加。OSIdleTaskHook()是用戶可以自定義的函數(shù),uCOS-III代碼中有大量這種H
37、ook函數(shù),方便用戶進(jìn)行功能擴(kuò)展。當(dāng)然用戶也可直接對任意代碼進(jìn)行修改,但是對系統(tǒng)Hook函數(shù)進(jìn)行重寫能夠很好地保持原有uCOS-III系統(tǒng)的完整性。void OS_IdleTask (void *p_arg) while (DEF_ON) CPU_CRITICAL_ENTER(); OSIdleTaskCtr+;#if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCtr+;#endif CPU_CRITICAL_EXIT(); OSIdleTaskHook(); /* Call user definable HOOK */ main->OSInit->
38、;OS_TickTaskInit創(chuàng)建了一個(gè)名叫"uC/OS-III Tick Task"的任務(wù)(優(yōu)先級為10),任務(wù)的創(chuàng)建都得通過OSTaskCreate來創(chuàng)建,main函數(shù)中又創(chuàng)建"Startup Task"任務(wù)。這三個(gè)任務(wù)對應(yīng)的運(yùn)行函數(shù)內(nèi)都包含了while死循環(huán),因此系統(tǒng)運(yùn)行起來后至少有三個(gè)任務(wù),分別是Idle任務(wù)、Tick任務(wù)、Startup任務(wù)。3.4 任務(wù)管理C/OS-III支持多任務(wù),理論上可以支持任意多個(gè)任務(wù),但實(shí)際通常受限于系統(tǒng)內(nèi)存的多少。所有任務(wù)管理都是基于OS_TCB結(jié)構(gòu)來進(jìn)行的,接下來我們詳細(xì)分析OS_TCB的定義(uCOS-III
39、Sourceos.h),可知一個(gè)任務(wù)有優(yōu)先級、狀態(tài)、堆棧,下面分別予以介紹。3.4.1 任務(wù)優(yōu)先級C/OS-III的優(yōu)先級共有32個(gè)(0-31),數(shù)值越小優(yōu)先級越高,一般地優(yōu)先級0和31保留給系統(tǒng)使用。中斷處理任務(wù)的優(yōu)先級最高,空閑任務(wù)的優(yōu)先級最低。圖三:C/OS-III任務(wù)優(yōu)先級3.4.2 任務(wù)的堆棧在利用OSTaskCreate創(chuàng)建新任務(wù)前,必須先創(chuàng)建好任務(wù)堆棧,如Startup任務(wù)就用如下代碼來分配堆棧:static CPU_STK AppTaskStartStkAPP_CFG_TASK_START_STK_SIZE;堆棧主要的大小是可以由用戶自己定義(需考慮任務(wù)里函數(shù)的嵌套層數(shù)和局部變
40、量占用空間多少。另外在嵌入式開發(fā)中,應(yīng)盡可能避免遞歸的調(diào)用),堆棧是向下增長的。堆棧溢出(這里的溢出是指堆??臻g不夠用)是操作系統(tǒng)必須考慮的問題,C/OS-III有三種解決方法:(1)利用內(nèi)存管理單元(MMU)或內(nèi)存保護(hù)單位(MPU);(2)利用某些CPU提供的堆棧溢出檢測功能;(3)基于軟件實(shí)現(xiàn)的堆棧溢出檢測。前兩者都依賴于硬件提供該功能。圖四:C/OS-III堆棧結(jié)構(gòu)3.4.3 任務(wù)的狀態(tài)OS_TCB結(jié)構(gòu)中的TaskState表示任務(wù)的狀態(tài)。在C/OS-III中,從用戶的角度來看任務(wù)有五個(gè)狀態(tài):靜止(Dormant)、就緒(Ready)、運(yùn)行(Running)、掛起(Pending)、中斷
41、(Inrerrupted)。任務(wù)的狀態(tài)是動態(tài)轉(zhuǎn)換的,構(gòu)造好OS_TCB結(jié)構(gòu)后,此時(shí)任務(wù)處于靜止?fàn)顟B(tài),OSTaskCreate函數(shù)中調(diào)用OS_TaskInitTCB函數(shù)將任務(wù)狀態(tài)設(shè)為OS_TASK_STATE_RDY并調(diào)用OS_RdyListInsertTail將任務(wù)插入相應(yīng)優(yōu)先級的就緒隊(duì)列中。圖五:任務(wù)狀態(tài)的轉(zhuǎn)換3.5 就緒任務(wù)的管理任務(wù)在運(yùn)行前都處于就緒狀態(tài)或中斷狀態(tài),CPU的調(diào)度基本上就是以某種策略從所有就緒任務(wù)中挑選一個(gè)任務(wù)運(yùn)行。C/OS-III利用一個(gè)就緒優(yōu)先級位圖和一個(gè)就緒隊(duì)列表來管理就緒任務(wù)。OSInit->OS_PrioInit()中對任務(wù)優(yōu)先級位圖表進(jìn)行了初始化。C/OS
42、-III 有OS_CFG_PRIO_MAX優(yōu)先級(見os_cfg.h),優(yōu)先級值越小表示優(yōu)先級越高。優(yōu)先級0表示最高級別,優(yōu)先級OS_CFG_PRIO_MAX-1最低(在本實(shí)驗(yàn)中OS_CFG_PRIO_MAX=32). 如果某個(gè)優(yōu)先級上存在就緒的任務(wù),那么就在位圖表中相應(yīng)的位設(shè)置為1,否則設(shè)置為0.位圖寬度可以是8bit、16bit、32bit,這樣依賴于CPU_DATA的值即依賴所用CPU的特性(本實(shí)驗(yàn)中是32bit,優(yōu)先級總數(shù)為32,因此位圖大小為32*1)。查找最高就緒的優(yōu)先級,只需在優(yōu)先級位圖中找第一不為0的bit。OS_PRIO OS_PrioGetHighest (void)CPU
43、_DATA *p_tbl;OS_PRIO prio;prio = (OS_PRIO)0;p_tbl = &OSPrioTbl0;while (*p_tbl = (CPU_DATA)0) prio += DEF_INT_CPU_NBR_BITS;)p_tbl+;prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl); return (prio);圖六:就緒優(yōu)先級位圖就緒列表實(shí)際上是一包含OS_CFG_PRIO_MAX個(gè)OS_RDY_LIST(見os.h)類型實(shí)體的數(shù)組(OSRdyList)。OS_RDY_LIST實(shí)體包含三個(gè)成員:Entries、TailPtr
44、、HeadPtr。Entries表示該優(yōu)先級別上任務(wù)個(gè)數(shù),TailPtr和HeadPt用于創(chuàng)建包含該所有優(yōu)先級別上的就緒任務(wù)的雙向鏈表。代碼中包含了OS_RdyListInit()、OS_RdyListInsert() 、OS_RdyListInsertHead()、OS_RdyListInsertTail()、 OS_RdyListMoveHeadToTail()、OS_RdyListRemove()等函數(shù)用于操作就緒列表。圖七:任務(wù)創(chuàng)建后加入就緒列表3.6 任務(wù)調(diào)度3.6.1 任務(wù)搶占在C/OS-III中,任務(wù)調(diào)度器(scheduler)即分發(fā)器(dispatcher)負(fù)責(zé)任務(wù)的調(diào)度。C/
45、OS-III使用基于優(yōu)先級、搶占式的調(diào)度策略。搶占是指當(dāng)由于某種原因使更高優(yōu)先級任務(wù)變成就緒狀態(tài)(較當(dāng)前任務(wù)),那么調(diào)度器立即將CPU分別給該更高優(yōu)先級任務(wù),而當(dāng)前任務(wù)變成掛起狀態(tài)。類似地,當(dāng)中斷服務(wù)程序(ISR)將一個(gè)處于掛起狀態(tài)的更高優(yōu)先級任務(wù)喚醒時(shí),當(dāng)前被中斷的任務(wù)保持掛起狀態(tài),被喚醒的那個(gè)更高優(yōu)先級任務(wù)得到執(zhí)行。如圖八,是一種直接的搶占方式,C/OS-III還支持一種較Post Defferd即延時(shí)的搶占方式(圖九)。延時(shí)搶占方式,多一步ISR Handler(在操作系統(tǒng)中被稱為中斷軟處理,主要目的是減少關(guān)中斷的時(shí)間) 用于處理在ISR(中斷硬處理)中來不及處理事情。圖八:任務(wù)搶占圖九
46、:帶延遲處理的任務(wù)搶占3.6.2 輪轉(zhuǎn)調(diào)度如果未開啟輪轉(zhuǎn)策略,正在執(zhí)行的任務(wù)除非主動放棄執(zhí)行(包括等待某些時(shí)間、或者調(diào)用睡眠函數(shù))或者被搶占,那么同級別的任務(wù)得等到該任務(wù)執(zhí)行完采用機(jī)會執(zhí)行。當(dāng)同一個(gè)優(yōu)先級上有兩個(gè)以上就緒任務(wù)時(shí),C/OS-III 采用時(shí)間片策略使得該優(yōu)先級上所有任務(wù)得到依次輪轉(zhuǎn)執(zhí)行。當(dāng)然如果一個(gè)任務(wù)的時(shí)間片未用完,也可主動放棄CPU使得下個(gè)任務(wù)得到執(zhí)行。輪轉(zhuǎn)調(diào)度策略不是必須的,C/OS-III允許用戶開啟或關(guān)閉該策略。圖九:時(shí)間片調(diào)度3.6.3 調(diào)度時(shí)機(jī)調(diào)度可能發(fā)生時(shí)機(jī)包括:(1)一個(gè)任務(wù)給其他任務(wù)發(fā)送(send)消息或信號時(shí);(2)任務(wù) OSTimeDly() 或者 OSTi
47、meDlyHMSM();(3)任務(wù)調(diào)用等待函數(shù)OS?Pend()等待尚未發(fā)生的任務(wù);(4)任務(wù)放棄掛起:其它任務(wù)調(diào)用OS?PendAbort()改變該任務(wù)狀態(tài);(5)任務(wù)創(chuàng)建時(shí):創(chuàng)建的任務(wù)可能擁有比當(dāng)前任務(wù)較高優(yōu)先級;(6)任務(wù)被刪除時(shí):如果該任務(wù)就是當(dāng)前任務(wù);(7)內(nèi)核對象被刪除時(shí);(7)任務(wù)優(yōu)先級發(fā)生改變時(shí);(8)任務(wù)調(diào)用OSTaskSuspend()掛起自己;(9)任務(wù)調(diào)用OSTaskResume()喚醒了其它任務(wù);(10)所有嵌套的ISR退出時(shí):調(diào)度由OSIntExit()發(fā)起而不是 OSSched();(11)調(diào)度器被解鎖;(12)任務(wù)調(diào)用OSSchedRoundRobinYield()主動放棄時(shí)間片;(12)用戶調(diào)用了OSSched();(13)任務(wù)時(shí)間片用完了。3.6.4 調(diào)度實(shí)現(xiàn)調(diào)度器的實(shí)現(xiàn)在函數(shù)OSSched() 和 OSIntExit()中。其中,OSSched()由任務(wù)級別代碼發(fā)起而OSIntExit()是有中斷服務(wù)程序發(fā)起。任務(wù)的調(diào)度是基于前面提
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45360-2025棉及化纖純紡、混紡印染布檢驗(yàn)、標(biāo)志與包裝
- 三打操作教學(xué)設(shè)計(jì)
- 冬季小學(xué)生防溺水教育
- 如何提高自我學(xué)習(xí)與成長能力計(jì)劃
- 如何康復(fù)重癥患者護(hù)理
- 加強(qiáng)營銷渠道管理減少資源浪費(fèi)計(jì)劃
- 家校合作增強(qiáng)班級凝聚力計(jì)劃
- 全面提升學(xué)生綜合素質(zhì)計(jì)劃
- 幼兒園小班的教學(xué)目標(biāo)設(shè)定計(jì)劃
- 深度解析2024陪診師考試內(nèi)容:試題及答案
- 人事行政管理培訓(xùn)課程
- 量具能力準(zhǔn)則Cg-Cgk評價(jià)報(bào)告
- GB/T 43392-2023地鐵防災(zāi)系統(tǒng)安全性能測試與評估方法
- 全宋詞目錄完整版本
- 諾基亞改革與失敗案例分析
- 福建師范大學(xué)地理科學(xué)學(xué)院859人文地理學(xué)歷年考研真題匯編(含部分答案)
- 單原子催化劑
- 九十年代生活
- GB/T 20688.4-2023橡膠支座第4部分:普通橡膠支座
- bilibili內(nèi)容審核筆試題
- 手術(shù)室護(hù)理實(shí)踐指南之術(shù)中保溫(手術(shù)科培訓(xùn)課件)術(shù)中低體溫的預(yù)防
評論
0/150
提交評論