




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第一章ARM概述與開發(fā)環(huán)境1.1嵌入式系統(tǒng)的概念1.2ARM發(fā)展歷程及應(yīng)用領(lǐng)域1.3ARM芯片級(jí)開發(fā)環(huán)境本章小結(jié)
1.1嵌入式系統(tǒng)的概念
數(shù)字技術(shù)和軟件技術(shù)是嵌入式系統(tǒng)的核心技術(shù),其中,數(shù)字技術(shù)包括數(shù)字信號(hào)處理技術(shù)和數(shù)字化芯片技術(shù),軟件技術(shù)包括芯片級(jí)的程序設(shè)計(jì)技術(shù)和操作系統(tǒng)級(jí)的程序設(shè)計(jì)技術(shù)。電路系統(tǒng)由傳統(tǒng)的模擬電子系統(tǒng)演化為以可編程數(shù)字化芯片為核心,添加必要的外設(shè)接口實(shí)現(xiàn)相應(yīng)功能的嵌入式系統(tǒng),在三個(gè)相互關(guān)聯(lián)又相對(duì)獨(dú)立的技術(shù)領(lǐng)域表現(xiàn)突出,即以單片機(jī)為核心的嵌入式控制領(lǐng)域、以DSP(數(shù)字信號(hào)處理器)或FPGA(現(xiàn)場(chǎng)可編程門陣列)為核心的嵌入式數(shù)字信號(hào)處理領(lǐng)域和以ARM或SOC(片內(nèi)系統(tǒng)芯片)為核心的嵌入式操作系統(tǒng)及其應(yīng)用領(lǐng)域。1.1.1嵌入式系統(tǒng)與ARM的關(guān)系
廣義上講,凡是嵌入到應(yīng)用系統(tǒng)中的電子系統(tǒng)可以統(tǒng)稱為嵌入式系統(tǒng),即使通用的計(jì)算機(jī)系統(tǒng),如果是嵌入在特定的應(yīng)用系統(tǒng)中時(shí),也可被稱為嵌入式系統(tǒng)。例如,在虛擬儀表系統(tǒng)中用于數(shù)據(jù)采集、分析和顯示的嵌入式計(jì)算機(jī)系統(tǒng)。狹義上講,嵌入式系統(tǒng)除具有硬件和軟件之外,還要求硬件系統(tǒng)具有體積小、重量輕、功耗低、成本低、可靠性高、可升級(jí)等特點(diǎn),要求軟件系統(tǒng)具有體積小、可裁剪性、健壯性、專用性、實(shí)時(shí)性等特點(diǎn)。因此,從狹義上講,嵌入式系統(tǒng)硬件往往是以ARM芯片為核心的硬件平臺(tái),嵌入式系統(tǒng)軟件為基于芯片級(jí)開發(fā)的無操作系統(tǒng)匯編或C語言實(shí)時(shí)性軟件,或者是基于嵌入式操作系統(tǒng)開發(fā)的圖形界面應(yīng)用程序。而ARM是指ARM公司設(shè)計(jì)的基于RISC架構(gòu)的32位高性能微處理器,一般采用哈佛總線結(jié)構(gòu),具有高速指令緩存和數(shù)據(jù)緩存,指令長(zhǎng)度固定且多級(jí)流水執(zhí)行,具有MMU(存儲(chǔ)器管理單元)和AMBA(高級(jí)微處理器總線結(jié)構(gòu))總線接口等。ARM芯片除具有ARM核心外,通常還具有豐富的外設(shè)接口,例如,外擴(kuò)RAM(隨機(jī)訪問存儲(chǔ)器)和FLASH控制器、LCD控制器、串行接口、SD接口、USB接口、I2C和I2S總線接口等,此外,ARM芯片還具有低功耗、體積小等特性。ARM芯片的高性能、多接口特點(diǎn)決定了其比單片機(jī)和DSP更適合作為嵌入式系統(tǒng)的核心微處理器,從而,ARM系統(tǒng)幾乎成了嵌入式系統(tǒng)的代名詞。1.1.2嵌入式系統(tǒng)與嵌入式操作系統(tǒng)的關(guān)系
一般地,嵌入式系統(tǒng)是面向特定的應(yīng)用和環(huán)境,集成了硬件和軟件的單板機(jī)。嵌入式系統(tǒng)的硬件資源有限,突出地表現(xiàn)在其具有較小容量的RAM和ROM空間,通過外擴(kuò)SD卡等存儲(chǔ)介質(zhì)擴(kuò)展存儲(chǔ)空間;嵌入式系統(tǒng)的軟件,包括嵌入式操作系統(tǒng)軟件,都固化在FLASH芯片中。因此,嵌入式操作系統(tǒng)軟件體積較小,一般在32?MB以下。嵌入式系統(tǒng)的軟件分為兩種:其一為直接基于ARM芯片開發(fā)的匯編或C語言實(shí)時(shí)性程序,這時(shí)的程序代碼負(fù)責(zé)管理ARM片上所有的資源,包括存儲(chǔ)空間和片上外設(shè),程序除根據(jù)需要設(shè)計(jì)特定的功能之外,還要編寫ARM芯片初始化代碼和中斷向量表,更重要的是,程序在訪問嵌入式系統(tǒng)的硬件時(shí),必須充分考慮硬件接口的時(shí)序特點(diǎn);其二是為嵌入式系統(tǒng)定制多任務(wù)、實(shí)時(shí)的嵌入式操作系統(tǒng),嵌入式操作系統(tǒng)抽象了嵌入式系統(tǒng)的硬件訪問方式,通過提供API(應(yīng)用程序接口)函數(shù)的方式,在嵌入式操作系統(tǒng)基礎(chǔ)上設(shè)計(jì)用戶應(yīng)用程序,只需調(diào)用相應(yīng)的API函數(shù)即可,使得嵌入式系統(tǒng)的應(yīng)用程序設(shè)計(jì)工作更加簡(jiǎn)單方便。嵌入式操作系統(tǒng)也具有桌面操作系統(tǒng)的特點(diǎn),即管理硬件資源、調(diào)度軟件進(jìn)程、處理軟件中斷等。嵌入式操作系統(tǒng)通常包括硬件驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、文件系統(tǒng)、圖形界面等。嵌入式操作系統(tǒng)要求具有實(shí)時(shí)性、多任務(wù)、模塊化、可移植性、可定制等特點(diǎn),流行的嵌入式操作系統(tǒng)有WindowsCE、嵌入式Linux、mC/OS-Ⅱ、VxWorks等。
因此,嵌入式系統(tǒng)可以表示為:
嵌入式系統(tǒng)=ARM硬件系統(tǒng)+嵌入式操作系統(tǒng)
+操作系統(tǒng)級(jí)應(yīng)用軟件系統(tǒng)
或者
嵌入式系統(tǒng)=ARM硬件系統(tǒng)+芯片級(jí)應(yīng)用軟件系統(tǒng)1.1.3嵌入式系統(tǒng)的研發(fā)特點(diǎn)
嵌入式系統(tǒng)研發(fā)可分為四類,即:首先,嵌入式系統(tǒng)的硬件平臺(tái)設(shè)計(jì),需要根據(jù)應(yīng)用環(huán)境選擇合適的ARM芯片,滿足處理速度和存儲(chǔ)深度的要求,同時(shí),需要兼顧性價(jià)比和芯片特點(diǎn)與生存周期等因素。ARM芯片選型后,根據(jù)需要實(shí)現(xiàn)的功能添加相應(yīng)的外設(shè)接口處理芯片和電源與時(shí)鐘芯片等,借助ProtelDXP等EDA軟件完成硬件平臺(tái)的原理性設(shè)計(jì)和PCB設(shè)計(jì)。目前,嵌入式系統(tǒng)硬件平臺(tái)的設(shè)計(jì)基本上實(shí)現(xiàn)了模型化設(shè)計(jì),即ARM芯片與外設(shè)芯片的接口電路都形成了規(guī)范,只需要按“模型”將ARM芯片與所需外設(shè)芯片連接起來就可以得到特定的嵌入式系統(tǒng)硬件平臺(tái)。盡管如此,讀懂和分析這個(gè)“模型”仍然需要一定的電路基礎(chǔ)。其次,基于ARM芯片的芯片級(jí)匯編或C語言程序設(shè)計(jì),這類程序包括系統(tǒng)初始化程序和特定功能的算法程序,要求設(shè)計(jì)者對(duì)ARM芯片工作原理和內(nèi)部結(jié)構(gòu)有較好的認(rèn)識(shí)和理解,需要對(duì)匯編語言和指令以及C語言編程有一定的基礎(chǔ)。目前,芯片級(jí)軟件設(shè)計(jì)達(dá)到了框架化的水平,即在現(xiàn)有的框架程序的基礎(chǔ)上,添加特定的軟件功能達(dá)到程序設(shè)計(jì)的目的。因此,程序員需對(duì)框架程序有全面深入的了解,程序員的主要工作集中在使用C語言開發(fā)算法上。然后,嵌入式操作系統(tǒng)的定制和驅(qū)動(dòng)程序的開發(fā),這類研發(fā)已經(jīng)完全商業(yè)化。設(shè)計(jì)者可以根據(jù)自己選用的ARM芯片,直接購(gòu)買到特定的相兼容的嵌入式操作系統(tǒng)軟件,只需要點(diǎn)幾下鼠標(biāo)就可以定制出功能強(qiáng)大的專用嵌入式操作系統(tǒng),并且,嵌入式操作系統(tǒng)供應(yīng)商也會(huì)提供幾乎所有常見外設(shè)的驅(qū)動(dòng)程序,例如,觸摸屏、LCD屏、網(wǎng)口、串口、USB口等。如果設(shè)計(jì)者想自行研發(fā)具有獨(dú)立知識(shí)產(chǎn)權(quán)的嵌入式操作系統(tǒng),那么認(rèn)真學(xué)好開源的μC/OS-II嵌入式操作系統(tǒng)是一個(gè)建設(shè)性的忠告。最后,基于嵌入式操作系統(tǒng)開發(fā)用戶應(yīng)用程序,特別是開發(fā)具有良好圖形界面的用戶應(yīng)用程序。這是對(duì)設(shè)計(jì)者的一個(gè)挑戰(zhàn)。基于不同的嵌入式操作系統(tǒng),開發(fā)應(yīng)用程序的方式有很大的不同。嵌入式Linux和WindowsCE都提供了良好的界面設(shè)計(jì)支持,分別可以借助QT和VisualStudio進(jìn)行應(yīng)用軟件開發(fā)。用戶可能需要對(duì)基于事件消息驅(qū)動(dòng)的編程有進(jìn)一步的了解,同時(shí),如果是基于WindowsCE,掌握?.NetFramework編程是一條簡(jiǎn)捷的路徑。2008年西安電子科技大學(xué)出版社出版的《WindowsCE應(yīng)用程序設(shè)計(jì)》一書在嵌入式應(yīng)用程序開發(fā)方面能起到較好的引導(dǎo)作用。1.2ARM發(fā)展歷程及應(yīng)用領(lǐng)域
自1985年第一個(gè)ARM1原型誕生至今(ARM公司成立于1990年),ARM公司設(shè)計(jì)的成熟ARM體系結(jié)構(gòu)(或稱指令集體系結(jié)構(gòu)ISA)有ARMv4、ARMv4T、ARMv5TE、ARMv5TEJ、ARMv6和ARMv7等,并且版本號(hào)還在不斷升級(jí),對(duì)應(yīng)的處理器家族有ARM7、ARM9、ARM9E、ARM10E、ARM11、Cortex、SecurCore和XScale等處理器系列。應(yīng)用領(lǐng)域涉及商業(yè)、軍事、航天航空、網(wǎng)絡(luò)與無線通信、消費(fèi)電子、醫(yī)療電子、儀器儀表和汽車電子等各行各業(yè)。1.2.1ARM發(fā)展歷程及命名規(guī)則
每個(gè)ARM處理器都對(duì)應(yīng)于一個(gè)特定的ARM指令集體系結(jié)構(gòu)版本,例如,ARM920T微處理器支持指令集體系結(jié)構(gòu)ARMv4T。ARM體系結(jié)構(gòu)的發(fā)展歷程如表1-1所示。
表1-1中列出了一些典型的ARM微處理器名稱,ARM微處理器是根據(jù)其具有的功能在“ARM”后添加字母來命名的,目前,這些字母有T、D、M、I、E、J、F、S,依次表示支持Thumb指令集、支持在線JTAG調(diào)試、內(nèi)嵌乘法器、支持嵌入式ICE(在線斷點(diǎn)和調(diào)試)技術(shù)、增強(qiáng)DSP指令、支持Java技術(shù)、支持向量浮點(diǎn)處理、可綜合。ARM微處理器名稱中的數(shù)字用于反映處理器系列、存儲(chǔ)管理單元以及高速緩存等信息。1.2.2ARM微處理器系列
目前ARM微處理器主要有八個(gè)系列,即ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、ARM11系列、Cortex系列、SecurCore系列、XScale系列等。各種系列微處理器均有其特點(diǎn)和應(yīng)用場(chǎng)合。
1.ARM7微處理器系列
ARM7微處理器系列內(nèi)核基于馮·諾依曼體系結(jié)構(gòu),數(shù)據(jù)和指令共用相同的總線,內(nèi)核指令三級(jí)流水,支持ARMv4T指令集,包括ARM7TDMI、ARM7TDMI-S、ARM7EJ-S和ARM720T等微處理器核(其中,ARM7EJ-S執(zhí)行ARMv5TEJ指令集,五級(jí)流水,帶Java加速,可綜合;而ARM720T已被ARM926EJ-S替代)。
ARM7TDMI是目前非常流行的32位微處理器內(nèi)核,例如,Samsung公司的S3C4510B芯片采用了該內(nèi)核,它支持16位的Thumb指令集、快速乘法指令和嵌入式ICE調(diào)試技術(shù)。其S變種ARM7TDMI-S是可綜合的。
ARM720T處理器核集成了一個(gè)MMU(存儲(chǔ)器管理單元)和一個(gè)8?KB的高速緩存,支持WindowsCE、Linux、Symbian等實(shí)時(shí)嵌入式操作系統(tǒng)。
ARM7系列微處理器主要應(yīng)用于無線接入手持設(shè)備、打印機(jī)、數(shù)碼相機(jī)和隨身聽等。
ARM7系列微處理器采用0.13mm、0.18?mm或0.25?mm工藝,主頻最高達(dá)130?MIPS,功耗很低,代碼與ARM9、ARM9E和ARM10以及XScale處理器兼容。
ARM7TDMI內(nèi)核的結(jié)構(gòu)框圖如圖1-1所示。圖1-1ARM7TDMI內(nèi)核結(jié)構(gòu)
2.ARM9微處理器系列
ARM9及其后更高系列的微處理器核均采用哈佛體系結(jié)構(gòu),數(shù)據(jù)總線與指令總線相互獨(dú)立,數(shù)據(jù)空間與程序空間相互獨(dú)立。ARM9系列微處理器核包括ARM920T和ARM922T兩種,具有五級(jí)指令流水線(處理速率可達(dá)1.1?MIPS/MHz),ARM922T是ARM920T的變種,其數(shù)據(jù)和指令高速緩存均為8?KB,而ARM920T的數(shù)據(jù)和指令高速緩存均為16KB。
32位的ARM9系列微處理器執(zhí)行ARMv4T指令集,具有兩種工作狀態(tài),即Thumb狀態(tài)和ARM狀態(tài),支持16位的Thumb指令集和32位的ARM指令集。主頻可達(dá)300?MIPS以上,具有一個(gè)32位的AMBA總線接口,具有MMU單元,支持WindowsCE、Linux和SymbianOS等嵌入式操作系統(tǒng)。ARM9核具有8出口的寫緩沖器,用于提高對(duì)外部存儲(chǔ)空間的寫速度。ARM9系列的生產(chǎn)工藝為0.13mm、0.15mm或0.18mm。
ARM9系列微處理器可用于PDA等高檔手持設(shè)備、MP5播放器等數(shù)字終端、數(shù)碼相機(jī)等圖像處理設(shè)備以及汽車電子方面。
ARM920T核的結(jié)構(gòu)框圖如圖1-2所示。圖中,AMBA(AdvancedMicroprocessorBusArchitecture)為高級(jí)微處理器總線結(jié)構(gòu),AHB(AdvancedHigh-performanceBus)為先進(jìn)高性能總線,該總線與APB(AdvancedPeripheralBus)總線協(xié)議隸屬于AMBAv2.0版本。圖1-2ARM920T內(nèi)核結(jié)構(gòu)
ARM920T核是本書的重點(diǎn)。
3.ARM9E微處理器系列
ARM9E微處理器系列目前包括ARM926EJ-S、ARM946E-S、ARM966E-S和ARM996HS等四個(gè)種類,都是可綜合的,采用五級(jí)指令流水技術(shù)(速率可達(dá)1.1?MIPS/MHz),在0.13?mm工藝下主頻可達(dá)300?MIPS,支持ARM、Thumb和DSP指令集,提供了浮點(diǎn)運(yùn)算協(xié)處理器,可用于圖像和視頻處理。其中,ARM926EJ-S微處理器包含了Jazelle技術(shù)(硬件運(yùn)行Java代碼,提高速度近8倍),集成了MMU,支持WindowsCE、Linux等嵌入式操作系統(tǒng)。
ARM9E核具有16出口的寫緩沖器,用于提高處理器向外部存儲(chǔ)空間寫數(shù)據(jù)的速度,支持ETM9,即具有實(shí)時(shí)跟蹤能力的嵌入式跟蹤宏單元,采用軟核技術(shù),工藝為0.13?mm、0.15?mm或0.18?mm。
ARM9E微處理器可應(yīng)用于網(wǎng)絡(luò)通信設(shè)備、移動(dòng)通信設(shè)備、圖像終端、海量數(shù)據(jù)存儲(chǔ)設(shè)備、汽車智能化設(shè)備等。
其中,ARM926EJ-S微處理器執(zhí)行ARMv5TEJ指令集,其內(nèi)核結(jié)構(gòu)框圖如圖1-3所示,圖中,TCM(TightlyCoupledMemory)為緊耦合存儲(chǔ)器。圖1-3ARM926EJ-S內(nèi)核結(jié)構(gòu)這里解釋一下MMU、TCM和Cache的含義。
MMU(MemoryManagementUnit)存儲(chǔ)器管理單元是MPU(MemoryProtectionUnit)存儲(chǔ)器保護(hù)單元的升級(jí)。MPU將物理存儲(chǔ)空間映射到不同的區(qū)域,通過設(shè)置區(qū)域的屬性對(duì)區(qū)域進(jìn)行訪問限制和保護(hù),例如,ARM946E-S核包含MPU。此時(shí),ARM的資源,即存儲(chǔ)器系統(tǒng)和外設(shè)都映射到某個(gè)或某些區(qū)域中。MPU中映射的區(qū)域地址與物理地址是一一映射關(guān)
系,即地址重疊的兩個(gè)程序?qū)?huì)競(jìng)爭(zhēng)資源;而MMU則是通過頁表轉(zhuǎn)換器技術(shù),將實(shí)際的物理存儲(chǔ)空間映射為虛擬存儲(chǔ)器,虛存是獨(dú)立于物理存儲(chǔ)空間的存儲(chǔ)空間,允許不同的程序使用相同的虛擬地址(MMU映射它們到不同的物理地址上),使得各個(gè)程序在各自獨(dú)立的存儲(chǔ)空間中運(yùn)行而互不影響。
Cache即高速緩存,位于內(nèi)核與存儲(chǔ)器之間,對(duì)于馮·諾依曼體系結(jié)構(gòu)來說,指令和數(shù)據(jù)共用一個(gè)Cache;對(duì)于哈佛體系結(jié)構(gòu)來說,指令Cache和數(shù)據(jù)Cache是分開的。由于內(nèi)核的處理速率一般遠(yuǎn)遠(yuǎn)高于總線訪問存儲(chǔ)器的速率,為了保證內(nèi)核全速運(yùn)行,參與處理的數(shù)據(jù)或指令集一方面先由存儲(chǔ)器讀到Cache備用,另一方面,需要寫到存儲(chǔ)器的運(yùn)算結(jié)果數(shù)據(jù)集可由高速Cache暫存,因此,Cache提高了內(nèi)核的處理速率(高檔的處理器又分出一級(jí)Cache、二級(jí)Cache等)。
Cache的確提高了內(nèi)核的性能,但是,程序代碼執(zhí)行的時(shí)間變得不可預(yù)測(cè),因?yàn)?,Cache裝載和存儲(chǔ)指令和數(shù)據(jù)的時(shí)間不可預(yù)測(cè)。而TCM緊耦合存儲(chǔ)器是緊貼內(nèi)核的高速SRAM,用于保證取指令或數(shù)據(jù)操作的準(zhǔn)確時(shí)鐘數(shù),對(duì)于要求確定行為的實(shí)時(shí)算法研究很有幫助。
4.?ARM10E微處理器系列
ARM10E微處理器系列中主推ARM1026EJ-S核,該高性能微處理器核是完全可綜合的軟核,執(zhí)行ARMv5TEJ指令集,六級(jí)指令流水(速度可達(dá)1.35?MIPS/MHz,經(jīng)Dhrystonev2.1測(cè)試),支持ARM、Thumb、DSP和Java指令,支持高性能硬件Java字節(jié)代碼執(zhí)行,同時(shí)具有MPU和MMU,支持實(shí)時(shí)操作系統(tǒng)和WindowsCE、Linux、JavaOS等嵌入式操作系統(tǒng)。Dhrystone是1984年ReinholdP.Weicker開發(fā)的用于測(cè)量微處理器運(yùn)算能力的基準(zhǔn)程序,常用于處理器整形運(yùn)算性能的測(cè)量,用C、Pascal或Java編寫,其計(jì)量單位為多少次Dhrystone,后來把在VAX-11/780機(jī)器上的測(cè)試結(jié)果1757?Dhrystones/s定義為1?DhrystoneMIPS,即1?DMIPS。)
ARM1026EJ-S具有獨(dú)立的指令高速緩存和數(shù)據(jù)高速緩存,緩存大小從4?KB至128?KB可配置;具有獨(dú)立的數(shù)據(jù)TCM和指令TCM,TCM支持插入等待狀態(tài),并且大小從0至1?MB可配置;具有雙64位/32位AMBAAHB總線接口。ARM1026EJ-S主要應(yīng)用于高級(jí)手持通信終端、數(shù)字消費(fèi)電子、汽車自動(dòng)駕駛和復(fù)雜工業(yè)控制系統(tǒng)等。
ARM1026EJ-S的內(nèi)部結(jié)構(gòu)框圖如圖1-4所示,圖中的VIC(VectoredInterruptController)為向量中斷控制器。圖1-4ARM1026EJ-S內(nèi)核結(jié)構(gòu)
5.ARM11微處理器系列
ARM11執(zhí)行ARMv6指令集,指令八級(jí)流水執(zhí)行,于2003年發(fā)布,包括ARM1136J(F)-S、ARM1156T2(F)-S、ARM1176JZ(F)-S單核微處理器和ARM11MPCore多核微處理器(最多四核)等四個(gè)系列。ARM11系列微處理器具有低功耗(0.6?mW/MHz,0.13?mm,1.2?V)、處理高性能(例如具有獨(dú)立的裝入/存儲(chǔ)和算術(shù)運(yùn)算流水線)、存儲(chǔ)高效能(例如具有優(yōu)化的TCM等)等特點(diǎn),主要應(yīng)用于數(shù)字TV、機(jī)頂盒、游戲終端、汽車娛樂電子、網(wǎng)絡(luò)設(shè)備等。
ARM1136JF-S的結(jié)構(gòu)框圖如圖1-5所示。圖1-5ARM1136JF-S內(nèi)核結(jié)構(gòu)
6.Cortex微處理器系列
Cortex微處理器系列包括三個(gè)系列,即Cortex-A、Cortex-R和Cortex-M,均支持Thumb-2指令集。其中,Cortex-A支持復(fù)雜操作系統(tǒng)和用戶應(yīng)用,有Cortex-A8和Cortex-A9(單核/多核)等;Cortex-R面向?qū)崟r(shí)應(yīng)用,有Cortex-R4(F)和Cortex-R4X等;Cortex-M進(jìn)行了內(nèi)存和功耗優(yōu)化,僅支持Thumb-2指令集,包括Cortex-M3和Cortex-M1等。
7.SecurCore微處理器系列
SecurCore系列微處理器面向智能卡、電子商務(wù)、銀行、身份識(shí)別、電子購(gòu)物等信息安全設(shè)備等方面的應(yīng)用,包括SC100、SC200和SC300微處理器,具有高性能和極低功耗等特點(diǎn)。其中,SC100是基于ARM7TDMI內(nèi)核帶有MPU的安全內(nèi)核,而SC200還支持JavaCard2.x加速和其他增強(qiáng)性能。
8.XScale微處理器系列
XScale微處理器是StrongARM的優(yōu)化改良,獨(dú)家許可給Intel公司(現(xiàn)在XScale代工完全轉(zhuǎn)讓給Marvell公司),基于哈佛結(jié)構(gòu),具有獨(dú)立的32?KB數(shù)據(jù)Cache和32?KB指令Cache,五級(jí)流水,指行ARMv5TE架構(gòu)指令,包括MMU,具有動(dòng)態(tài)電源管理特性,工作頻率可達(dá)1?GHz,0.18?mm生產(chǎn)工藝,多媒體處理能力得到增強(qiáng)。XScale微處理器代表芯片為PXA270和PXA320等,主要應(yīng)用于GPS定位系統(tǒng)、無線網(wǎng)絡(luò)設(shè)備、娛樂和消費(fèi)電子等。1.2.3ARM微處理器應(yīng)用領(lǐng)域
ARM微處理器在數(shù)據(jù)密集型應(yīng)用(例如視頻、圖像和數(shù)字信號(hào)處理等)以及控制密集型應(yīng)用(例如流程控制、工業(yè)控制等)方面均得到了廣泛的應(yīng)用,且具有加載嵌入式操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng)的能力,因此,ARM系統(tǒng)在完成特定功能的同時(shí),往往具有友好的人機(jī)交互界面,有取代傳統(tǒng)的單片機(jī)和DSP的趨勢(shì)。
總體而言,ARM在以下幾個(gè)方面具有優(yōu)勢(shì):其一,ARM芯片的生產(chǎn)與設(shè)計(jì)是分離的。ARM公司僅設(shè)計(jì)ARM核,通過出售ARM核知識(shí)產(chǎn)權(quán)給OEM公司而與OEM公司建立合作關(guān)系,OEM公司可以在ARM核的基礎(chǔ)上(不能改變ARM核)添加特定的外設(shè),生產(chǎn)出具有各自特色的芯片,OEM公司出售芯片給第三方用戶。這種經(jīng)營(yíng)運(yùn)作方式帶有全球性、共享性和非壟斷性,在ARM生產(chǎn)與銷售上達(dá)到了共享和私有的統(tǒng)一。其二,ARM公司推廣軟核設(shè)計(jì)。這是一種可定制內(nèi)核的構(gòu)架內(nèi)核技術(shù),面向特定的應(yīng)用,使得構(gòu)架后的ARM核更具有專用性,而ARM內(nèi)核的構(gòu)架設(shè)計(jì)具有通用性,在ARM內(nèi)核設(shè)計(jì)上達(dá)到了專用性與通用性的統(tǒng)一。
其三,ARM公司推廣定制設(shè)計(jì)。ARM公司根據(jù)第三方用戶的需要進(jìn)行內(nèi)核定制,要求第二方OEM公司進(jìn)行代工,這種針對(duì)第三方用戶的定制設(shè)計(jì)使得ARM芯片的應(yīng)用不但具有專一性,而且能高效地節(jié)省成本,即直接針對(duì)應(yīng)用對(duì)內(nèi)核進(jìn)行了優(yōu)化和裁剪,同時(shí)片上外設(shè)進(jìn)行了相應(yīng)的去冗留精。在這方面,ARM芯片達(dá)到了應(yīng)用與設(shè)計(jì)的統(tǒng)一。其四,ARM公司推廣SOC芯片,即集成了一片或多片ARM、DSP、FPGA等數(shù)字化芯片的統(tǒng)一內(nèi)核,用以彌補(bǔ)單核應(yīng)用的不足。多核處理器主要是面向高端應(yīng)用,這樣,ARM公司形成了自低端至高端的完整研發(fā)策略,且低端至高端的應(yīng)用具有共同性,每個(gè)設(shè)計(jì)人員從第一次接觸ARM芯片后,都能在較短的時(shí)間內(nèi)借助“慣性”充分地掌握如何利用ARM系列芯片進(jìn)行特定項(xiàng)目的設(shè)計(jì)開發(fā)。
ARM的這些特點(diǎn),使得數(shù)字化電子設(shè)計(jì)的硬件設(shè)計(jì)和軟件開發(fā)逐漸走向規(guī)范化、標(biāo)準(zhǔn)化和系列化,這對(duì)于時(shí)間有限的研發(fā)人員來說,是期待已久的。研發(fā)人員只需要具有一套仿真設(shè)備、一套EDA軟件、一系列ARM平臺(tái),就可以應(yīng)對(duì)整個(gè)數(shù)字化領(lǐng)域的研發(fā)設(shè)計(jì)。高等院校是推廣ARM應(yīng)用的主要場(chǎng)所,目前幾乎所有高校的電子、通信、計(jì)算機(jī)、軟件、應(yīng)用數(shù)學(xué)等相關(guān)專業(yè)都開設(shè)了ARM類課程。而ARM在數(shù)字圖像處理、數(shù)字信號(hào)處理、人工智能、機(jī)器人、生物醫(yī)學(xué)、特征識(shí)別、網(wǎng)絡(luò)通信、視頻處理與壓縮、語音處理、雷達(dá)技術(shù)、編碼技術(shù)等技術(shù)領(lǐng)域都深深涉足。
1.3ARM芯片級(jí)開發(fā)環(huán)境
ARM芯片級(jí)的開發(fā)環(huán)境由ARM開發(fā)板(或?qū)嶒?yàn)箱)、仿真器、計(jì)算機(jī)以及ARM開發(fā)軟件等組成。借助于ARM仿真器在線調(diào)試程序的過程稱為仿真階段,而將程序下載到ARM開發(fā)板的FLASH上脫離仿真器工作的過程稱為自舉運(yùn)行階段。仿真階段是自舉運(yùn)行階段的仿真測(cè)試運(yùn)行準(zhǔn)備時(shí)期,對(duì)項(xiàng)目的整個(gè)研發(fā)過程起著重要的試金石作用。1.3.1仿真環(huán)境建設(shè)
ARM開發(fā)環(huán)境包括硬件和軟件兩部分,其中,硬件主要包括ARM仿真器和集成了ARM芯片(例如S3C2440A等)的開發(fā)板或?qū)嶒?yàn)箱,提供了JTAG在線仿真接口;軟件主要有RealViewDeveloperSuite(簡(jiǎn)稱RVDS)和H-JTAG等。前者是ARM公司研發(fā)的使用匯編或C/C++語言開發(fā)ARM程序的集成開發(fā)環(huán)境,而后者是ARM芯片的仿真服務(wù)器程序(),用于連接ARM芯片和計(jì)算機(jī)上的RVDS仿真軟件。我們使用過大多數(shù)公司研發(fā)的ARM實(shí)驗(yàn)箱后,最終選取了北京博創(chuàng)科技()和深圳技創(chuàng)科技()的ARM9實(shí)驗(yàn)平臺(tái)作為硬件工作平臺(tái)(其中,博創(chuàng)為S3C2410,技創(chuàng)為S3C2440),并將在第二章中綜合這兩個(gè)平臺(tái)的特點(diǎn),公開一個(gè)相對(duì)完整的ARM系統(tǒng)原理圖。本書的所有程序均以這兩個(gè)平臺(tái)和這個(gè)原理圖為基礎(chǔ),由于ARM核心的兼容性,這些程序也可以運(yùn)行在其他公司的ARM實(shí)驗(yàn)箱上(包括ARM7、ARM10、ARM11等)。除了ARM公司的ARM開發(fā)軟件RVDS之外,一些專業(yè)軟件開發(fā)商也提供了ARM開發(fā)軟件,每種ARM開發(fā)軟件都有其優(yōu)缺點(diǎn),目前這些軟件均為商業(yè)化軟件。本書寫作之時(shí),RVDS的版本號(hào)已升至v4.0以上。本書第一至三章采用RVDS軟件,其版本號(hào)為2.2,針對(duì)ARM9來說,該版本能完全發(fā)掘ARM9的功能。在ARM仿真服務(wù)器軟件上,我們選用了H-JTAG軟件(不但這個(gè)軟件,而且這個(gè)軟件的作者也提供了實(shí)質(zhì)性的幫助)。從第四章開始,將使用RealViewMDK軟件(Keil公司開發(fā)的被ARM公司收購(gòu)的軟件)。第一至三章的程序都將工作在仿真環(huán)境下。完成對(duì)ARM匯編語言指令的測(cè)試,使用RVDS軟件十分方便,本節(jié)重點(diǎn)介紹RVDS仿真環(huán)境建設(shè)。第四章時(shí)將具體介紹RealViewMDK和ULINK2的使用方法。當(dāng)然,本質(zhì)上這兩個(gè)軟件是統(tǒng)一的。
1.硬件平臺(tái)介紹
這里重點(diǎn)介紹博創(chuàng)經(jīng)典UP-NETARM2410教學(xué)科研系統(tǒng),如圖1-6所示。圖1-6UP-NETARM2410實(shí)驗(yàn)箱
UP-NETARM2410實(shí)驗(yàn)箱由核心模塊和主機(jī)板構(gòu)成。其中,核心模塊包括基于ARM920T(編號(hào):0x0032409D)內(nèi)核的SAMSUNGS3C2410處理器芯片、64?MB的SDRAM、64?MB的NandFLASH和一個(gè)IO口控制的LED燈;主機(jī)板提供了核心模塊的外設(shè)擴(kuò)展資源,如8英寸的640×480TFT真彩LCD屏、觸摸屏、8×8矩陣LED顯示模塊、1個(gè)中斷按鍵、17鍵數(shù)字鍵盤、2位LED數(shù)碼管、直流電機(jī)模塊、主從USB口、SD/MMC接口、網(wǎng)卡接口等,同時(shí),還提供了一個(gè)168針的擴(kuò)展槽,用于擴(kuò)展GPS/GPRS等模塊。
UP-NETARM2410實(shí)驗(yàn)箱采用單+12?V電源供電。打開實(shí)驗(yàn)箱后,將配套的12?V電源適配器與實(shí)驗(yàn)箱連接好(電源插口在實(shí)驗(yàn)箱的左上角),然后,使用并口線把計(jì)算機(jī)的并口與實(shí)驗(yàn)箱的JTAG并口相連接(JTAG并口在實(shí)驗(yàn)箱的左上方)。檢查連接正確后,撥動(dòng)實(shí)驗(yàn)箱左上角的開關(guān),實(shí)驗(yàn)箱進(jìn)入上電工作狀態(tài)(出廠配置為嵌入式Linux)。
總之,硬件平臺(tái)需要一臺(tái)帶并口的計(jì)算機(jī)(如果使用USB口ARM仿真器,則只需要USB口即可,例如第四章的ULINK2)、并口線、ARM實(shí)驗(yàn)箱等。
2.H-JTAG使用方法
截止本書定稿之時(shí),H-JTAG軟件的最高版本為v0.8.0,下載并安裝完軟件后,點(diǎn)擊菜單“Settings|LPTJTAGSetting”,設(shè)置并口管腳連接如圖1-7所示(針對(duì)UP-NETARM2410實(shí)驗(yàn)箱,實(shí)驗(yàn)箱上的跳線JP1連接1-2腳,JP1位于左上方;不同的實(shí)驗(yàn)箱需視原理圖而定)。
如圖1-7設(shè)置完成后,點(diǎn)擊“OK”按鈕,出現(xiàn)如圖1-8所示界面,表示H-JTAG服務(wù)器已經(jīng)啟動(dòng)且工作正常。圖1-7H-JTAG并口連接設(shè)置圖1-8H-JTAG服務(wù)器注意:計(jì)算機(jī)并口應(yīng)設(shè)為EPP工作模式。
此外,H-JTAG軟件還提供了H-Flasher和H-Converter功能,即通過JTAG口訪問FLASH芯片和目標(biāo)文件格式轉(zhuǎn)化功能,這兩個(gè)功能非常實(shí)用。
3.RVDS仿真環(huán)境
將H-JTAG服務(wù)器最小化到任務(wù)欄托盤,如圖1-9所示。圖1-9H-JTAG服務(wù)器后臺(tái)運(yùn)行安裝RVDS軟件后從開始菜單中運(yùn)行“所有程序|ARM|RealViewDeveloperSuitev2.2|RealViewDebuggerv1.8”(如果彈出“ListSelection”對(duì)話框,則選擇“ARM”,單擊“OK”按鈕,這個(gè)對(duì)話框配置匯編語言代碼配色方案),進(jìn)入“RVDEBUG”窗口,點(diǎn)擊菜單“Target|ConnecttoTarget…Alt+0”(快捷鍵Alt+數(shù)字鍵0),進(jìn)入“ConnectionControl”對(duì)話框,在對(duì)話框中點(diǎn)擊鼠標(biāo)右鍵,選擇“Add/Remove/EditDevices…”,進(jìn)入“RDITargetList”對(duì)話框,選擇“AddDLL…”,將“C:\ProgramFiles\H-JTAG\H-JTAG.dll”添加至該對(duì)話框中,并在H-JTAG.dll前勾選,點(diǎn)擊“Close”按鈕關(guān)閉“RDITargetList”對(duì)話框,此時(shí),“ConnectionControl”對(duì)話框如圖1-10所示。圖1-10配置好的ConnectionControl對(duì)話框關(guān)閉圖1-10所示對(duì)話框,回到“RVDEBUG”窗口,如圖
1-11所示。圖1-11連接目標(biāo)板后的程序仿真調(diào)試窗口點(diǎn)擊圖1-11中的菜單“File|Open…Ctrl+O”,彈出“SelectFiletoOpen”對(duì)話框,在“文件類型(T)”中選擇“Executable[*.axf;*.out;*.alf…”,然后,找到需要仿真的可執(zhí)行文件(一般擴(kuò)展名為?.axf),點(diǎn)擊“打開”按鈕即進(jìn)入到仿真環(huán)境。仿真界面將出現(xiàn)一個(gè)紅色的長(zhǎng)條框,其框住的語句為當(dāng)前的PC指針。點(diǎn)擊圖1-11中的圖標(biāo)“LowLevelStepInto”可單步調(diào)試程序。
在圖1-11中,點(diǎn)擊菜單“View|Registers”可查看寄存器情況,寄存器值可以十六進(jìn)制數(shù)或十進(jìn)制數(shù)等格式顯示;點(diǎn)擊菜單“View|Memory”可查看程序存儲(chǔ)器結(jié)果,可設(shè)置存儲(chǔ)器單元地址的值。一般地,進(jìn)入代碼編輯器“CodeWarriorforRVDS”后,進(jìn)行源文件的編輯、編譯和連接,連接成合法的目標(biāo)文件后,在“MetrowerksCodeWarrior”窗口中點(diǎn)擊菜單“Project|DebugF5”或直接按下F5鍵,或點(diǎn)擊窗口工具欄中的“Debug”圖標(biāo),可進(jìn)入圖1-11,并自動(dòng)裝載目標(biāo)文件(RVDEBUG在首次使用時(shí)配置好后將保持配置不變)。1.3.2程序仿真實(shí)例與解釋
如上一節(jié)所述,首先準(zhǔn)備硬件平臺(tái);然后,使用并口線連接計(jì)算機(jī)與ARM實(shí)驗(yàn)箱,打開計(jì)算機(jī)和ARM實(shí)驗(yàn)箱電源;接著,在計(jì)算機(jī)上打開H-JTAG軟件,并出現(xiàn)如圖1-8所示界面,表示仿真環(huán)境已經(jīng)建立好。最后,點(diǎn)擊開始菜單“所有程序|ARM|RealViewDeveloperSuitev2.2|CodeWarriorforRVDS”,進(jìn)入代碼編輯窗口,如圖1-12所示,在其中編寫匯編語言或C/C++語言源程序,其中,匯編語言源程序擴(kuò)展名為?.s。圖1-12CodeWarrior代碼編輯器窗口
1.程序代碼編寫
在圖1-12中點(diǎn)擊菜單“File|New…Ctrl+Shift+N”,如圖1-13所示,新建一個(gè)工程文件,文件名為ex1_1(擴(kuò)展名自動(dòng)添加為?.mcp),路徑為D:\ARM9BOOK\ex1_1,工程文件類型為“ARMExecutableImage”,即ARM可執(zhí)行映像文件。點(diǎn)擊“確定”按鈕將創(chuàng)建工程文件。圖1-13新建工程文件創(chuàng)建工程文件ex1_1.mcp后,再次點(diǎn)擊菜單“File|New…Ctrl+Shift+N”,在彈出的“New”對(duì)話框中選擇“File”選項(xiàng)卡,如圖1-14所示,選中“TextFile”,在“Filename:”文件名欄中輸入“init.s”,即匯編語言源程序文件名為init.s,“Location”中輸入文件存儲(chǔ)位置為“D:\ARM9BOOK\ex1_1”,勾選“AddtoProject”,將init.s加入到工程ex1_1.mcp中,并勾選“Debug”項(xiàng)(Debug表示編譯連接時(shí)將向目標(biāo)文件中添加調(diào)試信息和符號(hào),Release表示編譯連接成無調(diào)試信息的可執(zhí)行目標(biāo)文件,一般稱為發(fā)行版本,比調(diào)試版本字節(jié)少一些)。圖1-14新建源程序文件點(diǎn)擊圖1-14中的“確定”按鈕,然后,輸入代碼并存盤,如圖1-15所示。圖1-15輸入源程序后的工程至圖1-15,具有一個(gè)源文件init.s的工程文件ex1_1.mcp已創(chuàng)建完成(這些指令的理解將在1.3.2節(jié)的3.?和第三章中闡述)。點(diǎn)擊菜單“Edit|DebugSettings…Alt+F7”或者點(diǎn)擊工具欄中的“DebugSettings…”按鈕,彈出“DebugSettings”對(duì)話框,如圖1-16所示。按圖1-16設(shè)置“ROBase”(可執(zhí)行映像文件的只讀段碼起始地址)為0x30000000,點(diǎn)擊“OK”按鈕完成設(shè)置。圖1-16DebugSettings設(shè)置在此,闡述一下圖1-16的配置含義:RVDS生成的目標(biāo)文件被稱為映像文件,擴(kuò)展名為?.axf,這種類型用于調(diào)試,如果要下載到FLASH中,需要轉(zhuǎn)化為?.bin文件。借助于RVDS進(jìn)行ARM程序設(shè)計(jì)的過程包括兩個(gè)階段:其一為在計(jì)算機(jī)上編寫程序代碼,并編譯連接成可執(zhí)行文件;其二為將可執(zhí)行文件下載到ARM核心板上調(diào)試運(yùn)行。所以,這個(gè)過程被稱為交叉調(diào)試。可執(zhí)行的映像文件本身包含兩部分:即包含了ARM指令代碼和只讀數(shù)據(jù)的只讀碼段以及包含可讀寫數(shù)據(jù)和未初始化數(shù)據(jù)的讀寫碼段。映射文件在下載到目標(biāo)板上時(shí),需要指定其各個(gè)段的下載地址,圖1-16中“ROBase”指定只讀段碼的起始位置,“RWBase”指定可讀寫段碼的起始位置,如果不指定,則只讀段碼放置完后,緊接著存放可讀寫段碼。此外,還可以為未初始化的數(shù)據(jù)段單獨(dú)分配空間,這需要在圖1-16中的“Linktype”組合框中點(diǎn)選“Scattered”,然后,添加Scatter存儲(chǔ)配置文件。我們建議讀者使用圖1-16給出的“Simple”方法。圖1-16中的“ROBase”指定為0x30000000,僅當(dāng)UP-NETARM2410實(shí)驗(yàn)箱為出廠配置時(shí)才能使用;如果讀者更改了存儲(chǔ)器配置,則此處應(yīng)填寫0x40000000,且仿真程序代碼段長(zhǎng)度不能大于4?KB(將在第四章介紹)。
關(guān)閉圖1-16后,點(diǎn)擊菜單“Project|MakeF7”或直接按下F7鍵,或者點(diǎn)擊工具欄中的“Make”按鈕,均可編譯連接工程形成可執(zhí)行目標(biāo)文件ex1_1.axf,該文件位于目錄“D:\ARM9BOOK\ex1_1\Debug”下。如果程序編譯連接出錯(cuò),需要改正出錯(cuò)的語句,直到編譯連接成功。
2.程序調(diào)試
編譯連接成功后,在圖1-15中,點(diǎn)擊菜單“Project|DebugF5”或點(diǎn)擊工具欄中的“Debug”按鈕,進(jìn)入圖1-17。如果裝入不成功,則勾選圖1-17右側(cè)的“Load”即可。在圖1-17中,點(diǎn)擊工具欄上的“LowLevelStepInto”按鈕,可單步執(zhí)行程序,此時(shí)可觀察到左側(cè)寄存器中的R0和R1值會(huì)發(fā)生相應(yīng)的變化,執(zhí)行完成后,如圖1-18所示,R0為十六進(jìn)制數(shù)D,即十進(jìn)制數(shù)13,R1的值為3。圖1-17調(diào)試窗口圖1-18程序調(diào)試完成
3.程序代碼解釋
工程ex1_1.mcp
中文件init.s的內(nèi)容如下:
1 AREA INIT,CODE,READONLY
2 ENTRY
3start
4 MOV R0,#10
5 MOV R1,#3
6 ADD R0,R0,R1
7stop
8 BL stop
9 END其中,start和stop必須頂格寫。上面程序代碼的含義如下:
第一行:創(chuàng)建具有只讀特性命名為INIT的代碼段;
第二行:ENTRY為匯編語言程序入口點(diǎn);
第三行:start為程序標(biāo)號(hào);
第四行:R0賦值為10;
第五行:R1賦值為3;
第六行:R0(10)+R1(3)后的值賦于R0(13);
第七行:stop為程序標(biāo)號(hào);
第八行:跳轉(zhuǎn)到標(biāo)號(hào)stop處;
第九行:END表示匯編語言程序段結(jié)束。
將在第三章和第五章中進(jìn)一步講述相關(guān)內(nèi)容。本章小結(jié)
本章首先討論了嵌入式系統(tǒng)和嵌入式操作系統(tǒng)的概念;接著論述了ARM的發(fā)展歷程及其應(yīng)用領(lǐng)域,特別是對(duì)ARM家族每個(gè)處理器系列進(jìn)行了對(duì)比闡述;最后,基于博創(chuàng)UP-NETARM2410實(shí)驗(yàn)箱(以后簡(jiǎn)稱ARM9實(shí)驗(yàn)箱),詳細(xì)介紹了ARM芯片級(jí)的交叉開發(fā)環(huán)境。第二章ARM體系結(jié)構(gòu)與接口電路2.1ARM微處理器工作模式2.2ARM寄存器2.3ARM異常2.4S3C2410存儲(chǔ)器配置及接口電路設(shè)計(jì)2.5S3C2410外設(shè)接口電路設(shè)計(jì)本章小結(jié)2.1ARM微處理器工作模式
ARM微處理器支持三種數(shù)據(jù)類型,即32位的字、16位的半字和8位的字節(jié)。對(duì)于無符號(hào)數(shù),取值范圍為0~2N-1,為普通二進(jìn)制碼存儲(chǔ)格式;對(duì)于有符號(hào)數(shù),取值范圍為-2N-1~+2N-1-1,為二進(jìn)制補(bǔ)碼存儲(chǔ)格式,其中,N取8、16或32,為數(shù)據(jù)字長(zhǎng)。ARM指令嚴(yán)格占一個(gè)字或四個(gè)連續(xù)字節(jié)(且首字節(jié)地址最后兩位為00比特)的存儲(chǔ)空間。
目前,ARM體系結(jié)構(gòu)支持七種處理器模式,如表2-1所示。表2-1中的模式碼是指寄存器CPSR(當(dāng)前程序狀態(tài)寄存器)中的低5位,即CPSR[4:0]。需要說明的是,對(duì)于ARM920T核心的S3C2410A處理器,上電復(fù)位后工作于管理模式。工作模式之間可以通過MSR指令、軟中斷、外部中斷或異常等切換。上電復(fù)位后,可執(zhí)行指令“MSRCPSR_c,#0x10”由管理模式切換到用戶模式,大多數(shù)應(yīng)用程序工作在用戶模式下。進(jìn)入用戶模式后,只能通過異常才能切換到其他工作模式,應(yīng)用程序不能訪問一些受保護(hù)的系統(tǒng)資源。用戶模式和系統(tǒng)模式之外的五種工作模式統(tǒng)稱為特權(quán)模式,特權(quán)模式下,可以訪問所有系統(tǒng)資源,工作模式可以借助MSR指令隨意切換,每種特權(quán)模式都有一些專用寄存器,用于保存其工作狀態(tài)。系統(tǒng)模式與用戶模式共用相同的寄存器,但是,系統(tǒng)模式屬于特權(quán)模式,它能訪問所有系統(tǒng)資源,可隨意切換工作模式,主要供需要訪問所有系統(tǒng)資源的操作系統(tǒng)任務(wù)使用。
2.2ARM寄存器
ARM寄存器都是32位的,其組織如圖2-1所示。
從圖2-1中可以看出,每種模式下最多可訪問的寄存器個(gè)數(shù)為18個(gè),其中,用戶模式和系統(tǒng)模式下只能訪問17個(gè)寄存器。圖2-1中同名的寄存器具有相同的物理寄存器,而帶有沙粒三角形的寄存器則具有獨(dú)立的物理寄存器,例如,R0在七種工作模式下都映射到同一個(gè)物理寄存器,而R13、R13_svc、R13_abt等表示在不同工作模式下映射到不同的物理寄存器。圖2-1ARM寄存器組織這樣,ARM共有37個(gè)物理寄存器,即未分組的寄存器R0~R7映射的8個(gè)物理寄存器+分組的寄存器R8~R14映射的22個(gè)物理寄存器+程序計(jì)數(shù)器PC和當(dāng)前程序狀態(tài)寄存器CPSR映射的2個(gè)物理寄存器+異常模式下備份程序狀態(tài)的寄存器SPSR映射的5個(gè)物理寄存器=37(圖2-1上名稱完全相同的寄存器只能計(jì)數(shù)一次,則數(shù)遍圖上所有的寄存器,剛好得到37)。
一般地,如果某條指令可以使用R0,則它也可以使用R1~R13的其他寄存器。在所有工作模式下,R0~R7都對(duì)應(yīng)于相同的物理寄存器,因此,在工作模式切換時(shí),這些寄存器的數(shù)據(jù)可以直接使用,同時(shí),原來的數(shù)據(jù)就有可能被破壞。因此,R0~R7稱為未分組的寄存器,用于存放數(shù)據(jù)。
R8~R12在快速中斷模式時(shí)映射到獨(dú)立的物理寄存器,這些寄存器均加了后綴_fiq,而在其他工作模式下均映射到相同的物理寄存器,這樣R8~R12共占有了10個(gè)物理寄存器,一般用于存放數(shù)據(jù)。R13通常用于堆棧指針(SP),保存當(dāng)前工作模式下的堆棧棧頂;R14被稱為鏈接寄存器(LR),保存子程序調(diào)用或跳轉(zhuǎn)時(shí)的返回地址。R13和R14在五種異常模式下都有其獨(dú)立的物理寄存器,因此,R13和R14共占有12個(gè)物理寄存器。PC即R15,為程序計(jì)數(shù)器,存放的是處理器要取的下一條指令的地址(具體地址與流水線個(gè)數(shù)有關(guān)),在七種工作模式下占有同一個(gè)物理寄存器。R8~R14被稱為分組寄存器,這些寄存器在工作模式切換時(shí),原有工作模式下的寄存器不能被訪問,而使用新工作模式下的同名寄存器替代,這樣,原來的寄存器的數(shù)據(jù)得到了保護(hù)。上述R0~R15通稱為通用寄存器,即這些寄存器可以保存數(shù)據(jù)(或指令數(shù)據(jù)),也可以用于保存指令地址。此外,還有兩個(gè)專用寄存器,用于保存當(dāng)前程序的工作狀態(tài),即CPSR和異常模式下保存CPSR值的寄存器SPSR,這兩個(gè)寄存器占有6個(gè)物理寄存器。
需要重點(diǎn)指出的是,ARM微處理器工作模式雖然可以切換,但是,其工作模式確定后,ARM微處理器僅能訪問圖2-1上該模式下的寄存器。2.2.1通用寄存器
通用寄存器包括未分組寄存器R0~R7、分組寄存器R8~R14和R15(即PC)。如圖2-1所示,分組寄存器在某些異常模式下映射為獨(dú)立的物理地址,此時(shí)的寄存器名稱被描述為
<寄存器名>_<mode>,例如,圖2-1中的R8_fiq和R13_und等,其中,mode分別取為svc、abt、und、irq或fiq等,用戶模式和系統(tǒng)模式的寄存器名可以添加后綴_usr和_sys。需要指出的是,在RVDS程序設(shè)計(jì)時(shí),只需使用寄存器名。
以寄存器R13為例,仿照第1.3.2小節(jié)的1.?和2.?的內(nèi)容調(diào)試如下的程序(注意圖1-16的設(shè)置),可以看到不同工作模式下R13的值是不同的。
1AREA INIT,CODE,READONLY
2ENTRY ;EnterSVCMode
3MOV R13,#0xAA
4MSR CPSR_c,#0x11 ;EnterFIQMode
5MOV R13,#0xBB
6MSR CPSR_c,#0x12 ;Enter
IRQMode
7MOV R13,#0xCC
8MSR CPSR_c,#0x1F ;EnterSYSMode
9MOV R13,#0xDD
10MSR CPSR_c,#0x13 ;EnterSVCMode
11MOV R0,#0x5512MSR CPSR_c,#0x11 ;EnterFIQMode
13MOV R0,#0x55
14MSR CPSR_c,#0x12 ;EnterIRQMode
15MOV R0,#0x55
16MSR CPSR_c,#0x1F ;EnterSYSMode
17MOV R0,#0x55
18MSR CPSR_c,#0x13 ;EnterSVCMode
19MOV R0,#0x55
20stop
21BL stop
22END程序的解釋如下(R13在RVDEBUG中的寄存器視圖中為SP):
第1行:定義只讀代碼段INIT;
第2行:標(biāo)識(shí)程序入口,程序復(fù)位后進(jìn)入SVC模式;
第3行:在SVC模式下,R13置成0xAA;
第4行:進(jìn)入FIQ模式;
第5行:在FIQ模式下,R13置成0xBB;
第6行:進(jìn)入IRQ模式;
第7行:在IRQ模式下,R13置成0xCC;
第8行:進(jìn)入SYS模式;
第9行:在SYS模式下,R13置成0xDD;
第10行:再次進(jìn)入SVC模式;第11行:在SVC模式下,R0置成0x55,此時(shí),可以看到R13的值為0xAA;
第12行:再次進(jìn)入FIQ模式;
第13行:在FIQ模式下,R0置成0x55,此時(shí),可以看到R13的值為0xBB;
第14行:再次進(jìn)入IRQ模式;
第15行:在IRQ模式下,R0置成0x55,此時(shí),可以看到R13的值為0xCC;
第16行:再次進(jìn)入SYS模式;
第17行:在SYS模式下,R0置成0x55,此時(shí),可以看到R13的值為0xDD;
第18行:再次進(jìn)入SVC模式;第19行:在SVC模式下,R0置成0x55,此時(shí),可以看到R13的值為0xAA;
第20、21行:死循環(huán)跳轉(zhuǎn);
第22行:程序段結(jié)束標(biāo)志。
從程序的運(yùn)行情況可以看出,R13在不同的工作模式下雖然具有相同的標(biāo)識(shí)名,但對(duì)應(yīng)于不同的物理寄存器,它們的賦值互不影響(注意:R13一般用作SP指針,上面的賦值意義不大,僅用于說明分組寄存器在不同的工作模式下對(duì)應(yīng)不同的物理寄存器這一特點(diǎn))。2.2.2程序狀態(tài)寄存器
32位的當(dāng)前程序狀態(tài)寄存器(CPSR)分為4個(gè)8位區(qū)域,從高位至低位依次為標(biāo)志位域(CPSR_f)、狀態(tài)位域(CPSR_s)、擴(kuò)展位域(CPSR_x)和控制位域(CPSR_c)。每種異常模式下都各有一個(gè)備份CPSR值用的寄存器,稱為備份的程序狀態(tài)寄存器(SPSR),用于異常發(fā)生時(shí)保存CPSR的值(用戶模式和系統(tǒng)模式下沒有SPSR)。
CPSR(或SPSR)寄存器位如圖2-2所示。圖2-2CPSR寄存器位的含義圖2-2中各位分為四類:其一,保留位,為后續(xù)ARM版本擴(kuò)展功能保留的位,圖中使用Res、RESERVED標(biāo)記這些位;其二,用戶模式下可寫的位,這些位為N、Z、C、V、Q、E和GE[3:0],其中,Q出現(xiàn)在ARMv5E以上版本中,E和GE[3:0]在ARMv6以上版本中,所有這些位特權(quán)模式下也均可寫;其三,特權(quán)模式下可寫的位,這些位為A、I、F和M[4:0],用戶模式下無法向這些位寫入,其中,A用于ARMv6以上版本;其四,執(zhí)行狀態(tài)位,這些位為J和T,在ARM狀態(tài)下必須為0。注意:所有CPSR的各位,在用戶模式下都是可以讀出的。
對(duì)CPSR的訪問操作一般是這樣的:如果想設(shè)置某位或某幾位,先執(zhí)行指令MRS讀出CPSR的值;然后,借助于與、或、異或等位操作僅把需要設(shè)置的位賦值,不需要設(shè)置的位的值保持不變;最后,執(zhí)行MSR指令把設(shè)置好的值寫回CPSR。
1.條件碼標(biāo)識(shí)位
圖2-2的第31位至28位依次為N、Z、C和V,被定義為條件碼標(biāo)識(shí)位,取自Negative、Zero、Carry和oVerflow中的大寫字母。一般地,算術(shù)、邏輯和賦值指令后添加S(目的寄存器不是R15)或比較指令(如CMN、CMP、TEQ和TST)等的執(zhí)行會(huì)影響CPSR中的條件碼標(biāo)識(shí)位。此外,MSR、MRC(目的寄存器為R15)、LDM指令的某些變種、特權(quán)模式下使用REF指令從存儲(chǔ)器向CPSR裝入數(shù)據(jù)、目的寄存器為R15的少數(shù)算術(shù)和邏輯指令變種等的執(zhí)行也會(huì)影響條件碼標(biāo)識(shí)位。對(duì)于二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)運(yùn)算,N=1表示運(yùn)算結(jié)果為負(fù),N=0表示結(jié)果大于或等于0。Z=1表示運(yùn)算結(jié)果為0,Z=0表示運(yùn)算結(jié)果非0。C有兩種情況:對(duì)于加法指令(包括CMN),當(dāng)C=1時(shí)表示有進(jìn)位,當(dāng)C=0時(shí)表示無進(jìn)位;對(duì)于減法指令(包括CMP),當(dāng)C=0時(shí)有借位,C=1時(shí)無借位。無論操作數(shù)是否為二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù),只要V=1,則表示最高位發(fā)生溢出,否則,V=0表示無溢出。
2.中斷狀態(tài)位
圖2-2中CPSR的第7位和第6位依次為I和F,用于表示中
斷狀態(tài)。如果I=1,則IRQ中斷被屏蔽;如果I=0,則IRQ中斷使能。如果F=1,則FIQ中斷被屏蔽;如果F=0,則FIQ中斷被使能。
3.工作模式位
第2.1節(jié)中指出ARM有七種工作模式,工作于哪種模式受CPSR中的工作模式位M[4:0]控制,這些位處于CPSR寄存器的低五位,即圖2-2中的第4~0位。工作模式位的含義如表2-2
所示。2.2.3PC與指令流水線
流水線是RISC處理器執(zhí)行指令的方式,ARM7支持三級(jí)流水線,ARM9支持五級(jí)流水線,ARM10支持六級(jí)流水線。ARM9與ARM7相比,指令吞吐量增加了約13%。ARM7和ARM9的流水線如圖2-3所示。圖2-3ARM7和ARM9的流水線對(duì)于五級(jí)流水線來說,每個(gè)機(jī)器周期內(nèi)可以有五個(gè)指令的不同階段同時(shí)處理,但只有一條指令處于執(zhí)行階段,其他四條指令處于取指、譯碼、存儲(chǔ)和寫階段。當(dāng)某條指令正處于執(zhí)行階段時(shí),PC寄存器指向此時(shí)要取指的指令,對(duì)于ARM7和ARM9來說,如圖2-3所示,PC指向該正在執(zhí)行的指令的地址加上2條指令的地址。對(duì)于所有流水線來說,執(zhí)行階段與取指階段間的管道數(shù)乘以每條指令所占的字節(jié)數(shù),再加上當(dāng)前正處于執(zhí)行階段的指令地址,即為PC指向的下一條指令的地址。對(duì)于ARM7和ARM9來說,雖然流水線級(jí)數(shù)不同,但是執(zhí)行階段與取指階段間的管道數(shù)均為2,所以,PC指向的下一條指令的地址均為當(dāng)前處于執(zhí)行階段的指令地址+8字節(jié)(每條32位的ARM指令占有4個(gè)字節(jié))。對(duì)于ARM10和ARM11等,按相同的方法推理PC的值。
2.3ARM異常
異常是由內(nèi)部或外部的觸發(fā)源引起的,異常發(fā)生后,ARM處理器將中斷當(dāng)前的操作,而跳轉(zhuǎn)到異常向量地址處執(zhí)行異常服務(wù)程序(或稱中斷服務(wù)程序)。除了上電復(fù)位異常之外,其他的異常服務(wù)程序跳轉(zhuǎn)執(zhí)行前,處理器將自動(dòng)保存當(dāng)前的程序狀態(tài),異常服務(wù)程序執(zhí)行完畢后,將返回到被中斷的程序處繼續(xù)執(zhí)行。
異常向量表如表2-3所示。異常發(fā)生后,R14和SPSR用于保存處理器狀態(tài),具體如下:
R14_<異常模式>=返回地址
SPSR_<異常模式>=CPSR
CPSR[4:0]=異常模式標(biāo)識(shí)碼
如果<異常模式>=復(fù)位或FIQ,則
CPSR[6]=1,屏蔽快速中斷
否則,CPSR[6]不變
CPSR[7]=1,屏蔽常規(guī)中斷
PC=異常向量地址對(duì)于上述偽語言表示,當(dāng)某種異常發(fā)生后,程序的返回地址保存在該異常模式下的R14(即LR)中,程序狀態(tài)CPSR保存在該異常模式的SPSR中;然后,CPSR的M[4:0]被置位成該異常模式位,如果發(fā)生的異常為復(fù)位或FIQ異常,則要屏蔽快速中斷;最后,屏蔽常規(guī)中斷,PC指向異常向量表中該異常向量的地址處。異常服務(wù)程序處理完后,SPSR復(fù)制到CPSR,R14(LR)復(fù)制至PC(此時(shí)的PC為程序被異常中斷前的執(zhí)行地址),程序?qū)腜C處繼續(xù)執(zhí)行。異常返回有兩種方式:其一,借助帶S的數(shù)據(jù)處理指令,且PC為目的寄存器;其二,借助多寄存器加載指令賦值CPSR,例如:希望異常返回到特定的地址處,則進(jìn)入異常前將該地址保存在堆棧內(nèi),即
SUBR14,R14,#4 ;獲得R14(即LR)
STMFDSP!,{<其他寄存器列表>,R14}
;R14壓入堆棧中
異常返回時(shí),執(zhí)行
LDMFDSP!,{<其他寄存器列表>,PC}^
;R14出棧,賦給PC
上述三行代碼的含義依次為:R14減去4賦給R14;將其他需要保存內(nèi)容的寄存器和R14壓入堆棧中,SP(即R13,為堆棧指針)指向棧頂,“!”表示SP減少后的值賦給SP;將SP指向的堆棧數(shù)據(jù)依次出棧,賦給寄存器列表中的寄存器和PC,“!”表示SP增加后的值賦給SP,“^”表示將SPSR的值傳回CPSR中。對(duì)這些語句更深入的理解請(qǐng)參考第三章。
下面具體介紹一下每個(gè)異常。2.3.1復(fù)位異常
外部輸入復(fù)位信號(hào)有效后,ARM微處理器將執(zhí)行以下
操作:
R14_svc=不確定值
SPSR_svc=不確定值
CPSR[4:0]=0b10011 //上電復(fù)位后進(jìn)入管理模式
CPSR[5]=0 //工作在ARM狀態(tài)
CPSR[6]=1 //屏蔽快速中斷
CPSR[7]=1 //屏蔽普通中斷
如果高端異常向量地址配置了,則
PC=0xFFFF0000否則,
PC=0x00000000
由此可見,上電復(fù)位后的ARM微處理器處于管理工作模式下,且為執(zhí)行ARM指令的ARM狀態(tài),從地址0x0開始執(zhí)行指令,普通中斷和快速中斷均處于被屏蔽狀態(tài),連接寄存器LR(即R14)和備份的程序狀態(tài)寄存器SPSR的值不確定。復(fù)位異常一般發(fā)生于ARM硬件系統(tǒng)上電工作瞬時(shí),或者由于手工復(fù)位按鍵復(fù)位以及看門狗電路引起的復(fù)位等。
復(fù)位異常服務(wù)程序需要完成系統(tǒng)初始化工作,包括配置時(shí)鐘、存儲(chǔ)器、高速緩存、堆棧、片上外設(shè)寄存器等。復(fù)位異常程序執(zhí)行初始化過程時(shí)應(yīng)避免SWI軟件中斷、未定義指令中斷及存儲(chǔ)器訪問導(dǎo)致的中止等異常,系統(tǒng)初始化成功后ARM處理器進(jìn)入工作狀態(tài)。2.3.2中斷請(qǐng)求異常
ARM微處理器外部IRQ中斷引腳有效,且CPSR的第I位(即CPSR[7])為0時(shí),可產(chǎn)生IRQ普通中斷,ARM微處理器將繼續(xù)執(zhí)行處于流水線“執(zhí)行”階段的指令,然后跳轉(zhuǎn)到IRQ中斷服務(wù)程序。
如果IRQ中斷產(chǎn)生了,ARM微處理器自動(dòng)執(zhí)行如下操作:
R14_irq=下一條將被執(zhí)行的指令地址+4
SPSR_irq=CPSR
CPSR[4:0]=0b10010 //進(jìn)入IRQ模式
CPSR[5]=0 //工作在ARM狀態(tài)
CPSR[6]保持不變
CPSR[7]=1 //屏蔽再次產(chǎn)生的IRQ中斷
如果高端異常向量地址配置了,則
PC=0xFFFF0018
否則,
PC=0x00000018
IRQ中斷服務(wù)程序執(zhí)行完畢后,借助如下指令返回:
SUBSPC,R14,#4
上述SUBS指令中,由于PC為目的操作數(shù),因此,將執(zhí)行兩個(gè)操作:即R14_irq的值賦給PC,SPSR_irq的值賦給CPSR。典型的IRQ中斷服務(wù)程序結(jié)構(gòu)為:
ISR_irq: //IRQ中斷服務(wù)程序開始標(biāo)號(hào)
<中斷處理代碼>
SUBSPC,R14,#4//IRQ中斷服務(wù)程序返回指令
另一種IRQ中斷服務(wù)程序結(jié)構(gòu)為:
ISR_irq://IRQ中斷服務(wù)程序開始標(biāo)號(hào)
SUBR14,R14,#4//IRQ中斷服務(wù)程序第一條語句
<中斷處理代碼>
MOVSPC,R14//IRQ中斷服務(wù)程序返回指令
在MOVS中,PC為目的操作數(shù),因此,“MOVSPC,R14”將R14的值寫入PC中,同時(shí)自動(dòng)實(shí)現(xiàn)從SPSR_irq中恢復(fù)CPSR的值。以上兩種IRQ中斷服務(wù)程序結(jié)構(gòu)具有一個(gè)共同的特點(diǎn),即在中斷處理代碼中不能更改R14的值,否則將導(dǎo)致中斷返回的地址錯(cuò)誤。所以,常用的方法為借助堆棧實(shí)現(xiàn)中斷服務(wù)程序,其結(jié)構(gòu)如下:
ISR_irq:
//IRQ中斷服務(wù)程序開始標(biāo)號(hào)
SUBR14,R14,#4//R14=R14–4
STMFDR13!,{R0–R3,R14}
//R13為堆棧指針,將R0至R3和R14保存在堆棧中
<中斷處理代碼>
LDMFDR13!,{R0–R3,PC}^//IRQ中斷服務(wù)程序返回語句,從堆棧中恢復(fù)PC的值,并強(qiáng)制CPSR從SPSR寄存器恢復(fù)2.3.3快速中斷請(qǐng)求異常
當(dāng)ARM微處理器外部FIQ引腳有效,且CPSR的F位為0時(shí),可產(chǎn)生FIQ快速中斷請(qǐng)求,其優(yōu)先級(jí)高于IRQ,主要用于對(duì)實(shí)時(shí)數(shù)據(jù)流的快速傳輸和處理。ARM微處理器檢測(cè)到FIQ異常時(shí),當(dāng)前處于流水線“執(zhí)行”階段的指令執(zhí)行完成后,跳轉(zhuǎn)到FIQ快速中斷服務(wù)程序,ARM微處理器自動(dòng)實(shí)現(xiàn)如下操作:
R14_fiq=下一條要執(zhí)行的指令地址+4
SPSR_fiq=CPSR
CPSR[4:0]=0b10001//進(jìn)入FIQ工作模式
CPSR[5]=0 //工作在ARM狀態(tài)
CPSR[6]=1 //屏蔽再次產(chǎn)生的快速中斷
CPSR[7]=1 //屏蔽IRQ中斷
如果高端異常向量地址配置了,則
PC=0xFFFF001C
否則,
PC=0x0000001C
從快速中斷返回的方法與從IRQ中斷返回的方法相同,典型的語句為
SUBSPC,R14,#42.3.4軟件中斷異常
ARM微處理器通過執(zhí)行SWI(軟件中斷)指令進(jìn)入管理模式,這是用戶模式轉(zhuǎn)換到特權(quán)模式的常用方法。SWI指令執(zhí)行時(shí),ARM微處理器自動(dòng)實(shí)現(xiàn)如下操作:
R14_svc=SWI指令的下一條指令地址
SPSR_svc=CPSR
CPSR[4:0]=0b10011 //進(jìn)入管理模式
CPSR[5]=0 //工作在ARM狀態(tài)
CPSR[6]保持不變
CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則
PC=0xFFFF0008
否則,
PC=0x00000008
從軟件中斷異常返回的典型語句為
MOVSPC,R142.3.5數(shù)據(jù)中止異常
數(shù)據(jù)中止異常是由存儲(chǔ)系統(tǒng)引發(fā)的。當(dāng)要訪問的存儲(chǔ)空間數(shù)據(jù)無效時(shí),將產(chǎn)生數(shù)據(jù)中止異常。ARM微處理器自動(dòng)實(shí)現(xiàn)以下操作:
R14_abt=被中止的指令地址+8
SPSR_abt=CPSR
CPSR[4:0]=0b10111 //進(jìn)入中止工作模式
CPSR[5]=0 //處于ARM狀態(tài)
CPSR[6]保持不變
CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則
PC=0xFFFF0010
否則,
PC=0x00000010
從數(shù)據(jù)中止異常服務(wù)程序返回的典型語句為
SUBSPC,R14,#82.3.6預(yù)取指令異常
預(yù)取指令異常由存儲(chǔ)系統(tǒng)引發(fā),當(dāng)取指的指令無效,且ARM微處理器試圖執(zhí)行該無效指令時(shí),將產(chǎn)生預(yù)取指令異常,ARM微處理器將自動(dòng)實(shí)現(xiàn)以下操作:
R14_abt=被中止的指令地址+4
SPSR_abt=CPSR
CPSR[4:0]=0b10111 //進(jìn)入中止模式
CPSR[5]=0 //處于ARM狀態(tài)
CPSR[6]保持不變
CPSR[7]=1 //屏蔽IRQ中斷如果高端異常向量地址配置了,則
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨物運(yùn)輸合同的法律影響試題及答案
- CPSM考試樣題及試題及答案
- 考生常見問題:2024年CPMM試題及答案
- 2024年CPSM考試總結(jié)經(jīng)驗(yàn)試題及答案
- 綠色物流的實(shí)施策略及試題及答案
- 2024年采購(gòu)師考試難點(diǎn)試題及答案
- 碳循環(huán)對(duì)生物的影響試題及答案
- 2025年不銹鋼焊接管項(xiàng)目發(fā)展計(jì)劃
- 2024年CPMM職業(yè)發(fā)展分析試題及答案
- 2024年CPSM考試的模擬考試題及試題與答案
- 給排水工程作業(yè)活動(dòng)風(fēng)險(xiǎn)管控清單
- 國(guó)家優(yōu)秀QC小組成果案例(攻關(guān)型)課件
- SSCI文獻(xiàn)查詢培訓(xùn)教程課件
- 【QC成果】提高建筑外窗一次驗(yàn)收合格率2020
- 英語語言學(xué)概論Chapter 2語音學(xué)練習(xí)附有答案
- 正反平衡供電煤耗計(jì)算方法介紹
- 2001滬S313 SG系列消火栓箱
- 中國(guó)工藝美術(shù)史資料(田自秉)課件
- 施工現(xiàn)場(chǎng)防汛安全檢查表
- 定子中心偏差及圓的調(diào)整
- 員工通用請(qǐng)假條Excel模板
評(píng)論
0/150
提交評(píng)論