ARM設(shè)計(jì)進(jìn)階(共74張PPT)_第1頁(yè)
ARM設(shè)計(jì)進(jìn)階(共74張PPT)_第2頁(yè)
ARM設(shè)計(jì)進(jìn)階(共74張PPT)_第3頁(yè)
ARM設(shè)計(jì)進(jìn)階(共74張PPT)_第4頁(yè)
ARM設(shè)計(jì)進(jìn)階(共74張PPT)_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ARM設(shè)計(jì)進(jìn)階長(zhǎng)江大學(xué)計(jì)算機(jī)學(xué)院王劍日期1嵌入式開(kāi)發(fā)平臺(tái)通常嵌入式開(kāi)發(fā)的平臺(tái)主要包括基于SoC或MCU開(kāi)發(fā)板,板上提供常用的外設(shè)、接口和其他功能模塊,開(kāi)發(fā)者一般根據(jù)自己的應(yīng)用需要選擇適合自己板級(jí)開(kāi)發(fā)平臺(tái)。在這樣的平臺(tái)上開(kāi)發(fā)者可以進(jìn)行硬件的擴(kuò)展,操作系統(tǒng)移植和應(yīng)用軟件的開(kāi)發(fā)、調(diào)試及固化,并最終形成自己的產(chǎn)品推向市場(chǎng)。日期但是基于該平臺(tái)的軟件開(kāi)發(fā)工作往往需要等到硬件平臺(tái)完成后才能開(kāi)展,這顯然不利于縮短TTM(TimetoMarket),同時(shí)調(diào)試的過(guò)程也是需要反復(fù)迭代和修改設(shè)計(jì)的過(guò)程,因此硬件方案的變動(dòng)在所難免。

日期因此在系統(tǒng)方案沒(méi)有最終定型前,急于搭建硬件平臺(tái)不僅費(fèi)時(shí)費(fèi)力,而且也會(huì)造成系統(tǒng)開(kāi)發(fā)成本的提高。因此在進(jìn)行方案設(shè)計(jì)的時(shí)候,利用CPU或者其他外設(shè)的模型進(jìn)行早期的評(píng)估是非常必要的。

日期1.1ARM的開(kāi)發(fā)平臺(tái):

·ARMulator仿真平臺(tái)

這是一套最基礎(chǔ)的ARM指令集仿真器,內(nèi)嵌于ADS和RVDS中,是每一位ARM開(kāi)發(fā)者的很好的起點(diǎn)。ARMulator可以模擬執(zhí)行開(kāi)發(fā)人員編寫(xiě)的C或匯編程序,支持源代碼調(diào)試,幫助開(kāi)發(fā)者確定代碼編寫(xiě)的正確性。

日期ARMulator仿真平臺(tái)另一方面,ARMulator還能大致統(tǒng)計(jì)出,諸如:代碼執(zhí)行周期數(shù),Cache命中率,存儲(chǔ)器訪問(wèn)等利于我們優(yōu)化代碼的信息。但ARMulator是基于CPU的模擬,缺點(diǎn)在于比較難于模擬整個(gè)芯片系統(tǒng)的行為。

日期·RealViewIntegrator-CP平臺(tái)日期·VersatilePB/AB平臺(tái)

日期·EmulationBaseboard(EB)日期·ESL虛擬平臺(tái)日期此外,對(duì)于嵌入式軟件開(kāi)發(fā)工程師而言,ESL虛擬平臺(tái)帶來(lái)的最大好處是讓軟件開(kāi)發(fā)在更早的階段開(kāi)展,而不必等到在硬件平臺(tái)上進(jìn)行此工作。這樣一來(lái)軟硬件開(kāi)發(fā)工作可以并行提高,縮短產(chǎn)品上市時(shí)間,軟硬件的協(xié)同開(kāi)發(fā)還可以盡早發(fā)現(xiàn)系統(tǒng)bug,降低開(kāi)發(fā)風(fēng)險(xiǎn)和成本。同時(shí)該虛擬平臺(tái)還提供了ARM軟件開(kāi)發(fā)調(diào)試工具接口同步進(jìn)行軟件調(diào)試,在ESL虛擬平臺(tái)上實(shí)現(xiàn)軟硬件的協(xié)同仿真,可以實(shí)現(xiàn)優(yōu)化軟件的目的。日期從圖1看,傳統(tǒng)流程中容易引起反復(fù)的環(huán)節(jié),而對(duì)引入ESL的開(kāi)發(fā)流程,可將諸如驅(qū)動(dòng)開(kāi)發(fā)調(diào)試等,提前放置到虛擬開(kāi)發(fā)平臺(tái)上進(jìn)行,實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)的優(yōu)化、縮短開(kāi)發(fā)周期等。而且仿真環(huán)境所能提供的調(diào)試手段,是FPGA平臺(tái)所無(wú)法比擬的。日期RTSM(實(shí)時(shí)系統(tǒng)模型)日期RTSM模擬包括LCD顯示器、鍵盤(pán)和鼠標(biāo)等外設(shè)的仿真。不到5s,就可以利用PC在ARM處理器上對(duì)OS的啟動(dòng)過(guò)程進(jìn)行模擬,用戶可以在ARM提供的RTSM上進(jìn)行快速的軟件仿真。這是OEM在開(kāi)發(fā)軟件系統(tǒng)時(shí)成本最低的方法。想象一下,芯片公司不用等到芯片生產(chǎn)出來(lái),也不用把緩慢的FPGA板交給方案廠商或OEM;只需要將整個(gè)芯片的模型交付,下游廠家就可以盡早盡快地將軟件方案開(kāi)發(fā)完畢。最終產(chǎn)品幾乎可以從芯片生產(chǎn)出來(lái)就準(zhǔn)備上市。

日期1.2器件選型

器件的選擇歸根結(jié)底是為嵌入式系統(tǒng)選擇合適的處理器芯片。ARM處理器是最常見(jiàn)的嵌入式處理器之一,它以低功耗、低成本和高性能而深受業(yè)界的青睞。而且ARM是目前產(chǎn)業(yè)中資源最為廣泛的嵌入式處理器,基于廣大的ARM合作伙伴計(jì)劃,開(kāi)發(fā)者可以在這個(gè)聯(lián)盟里尋求到各種自己意想不到的幫助。日期目前在業(yè)內(nèi)廣為人知的ARM處理器主要有ARM7系列和ARM9系列,同時(shí)為了關(guān)注今后嵌入式系統(tǒng)的發(fā)展,也有必要了解一下最新的ARM11和ARMCotex系列處理器。日期ARM7系列

ARM7TDMI是ARM7系列中使用最廣泛的,它是從最早實(shí)現(xiàn)32位地址空間編程模式的ARM6內(nèi)核發(fā)展而來(lái)的,并增加了64位乘法指令,支持片上調(diào)試、16位Thumb指令集和EmbeddedICE觀察點(diǎn)硬件。ARM7TDMI屬于ARMv4體系結(jié)構(gòu),采用馮諾伊曼結(jié)構(gòu),3級(jí)流水處理,平均0.9DMIPs/Mhz性能。不過(guò)ARM7TDMI沒(méi)有MMU(MemoryManagementUnit)和Cache,所以僅支持那些不需要MMU和Cahce的小型實(shí)時(shí)操作系統(tǒng),如VxWorks、uC/OS-II和uLinux等RTOS。其他的ARM7系列內(nèi)核還有ARM720T和ARM7E-S等。

日期ARM9系列

ARM9TDMI相比ARM7TDMI,將流水級(jí)數(shù)提高到5級(jí)從而增加了處理器的時(shí)鐘頻率,并使用指令和數(shù)據(jù)存儲(chǔ)器分開(kāi)的哈佛結(jié)構(gòu)以改善CPI和提高處理器性能,平均可達(dá)1.1DMIPs/Mhz,但是ARM9TDMI仍屬于ARMv4T體系結(jié)構(gòu)。在ARM9TDMI基礎(chǔ)上又有ARM920T、ARM940T和ARM922T,其中ARM940T增加了MPU(MemoryProtectUnit)和Cache;ARM920T和ARM922T加入了MMU、Cache和ETM9(方便進(jìn)行CPU實(shí)時(shí)trace),從而更好的支持象Linux和WinCE這樣的多線程、多任務(wù)操作系統(tǒng)。

日期ARM9E系列

ARM9E系列屬于ARMv5TE,在ARM9TDMI的基礎(chǔ)上增加了DSP擴(kuò)展指令,是可綜合內(nèi)核,主要有ARM968E-S、ARM966E-S、ARM946E-S和ARM926EJ-S(v5TEJ指令體系,增加了Java指令擴(kuò)展),其中ARM926EJ-S是最具代表性的。通過(guò)DSP和Java的指令擴(kuò)展,可獲得70%的DSP處理能力和8x的Java處理性能提升。另外分開(kāi)的指令和數(shù)據(jù)Cache結(jié)構(gòu)進(jìn)一步提升了軟件性能;指令和數(shù)據(jù)TCM(TightlyCoupleMemory:緊耦合存儲(chǔ)器)接口支持零等待訪問(wèn)存儲(chǔ)器;雙AMBAAHB總線接口等。ARM926EJ-S可達(dá)250Mhz以上的處理速度,很好地支持SymbianOS、Linux、WindowsCE和PalmOS等主流操作系統(tǒng)。

日期ARM11系列

ARM11系列主要有ARM1136、ARM1156、ARM1176和ARM11MP-Core等,它們都是v6體系結(jié)構(gòu),相比v5系列增加了SIMD多媒體指令,獲得1.75x多媒體處理能力的提升。另外,除了ARM1136外,其他的處理器都支持AMBA3.0-AXI總線。ARM11系列內(nèi)核最高的處理速度可達(dá)500Mhz以上(其中90nm工藝下,ARM1176可達(dá)到750Mhz)以及600DMIPS的性能日期基于ARMv6架構(gòu)的ARM11系列處理器是根據(jù)下一代的消費(fèi)類電子、無(wú)線設(shè)備、網(wǎng)絡(luò)應(yīng)用和汽車電子產(chǎn)品等需求而制定的。其的媒體處理能力和低功耗特點(diǎn)使它特別適合于無(wú)線和消費(fèi)類電子產(chǎn)品;其高數(shù)據(jù)吞吐量和高性能的結(jié)合非常適合網(wǎng)絡(luò)處理應(yīng)用;另外,在實(shí)時(shí)性能和浮點(diǎn)處理等方面ARM11可以滿足汽車電子應(yīng)用的需求。

日期ARMCotex系列

Cortex系列是ARM公司目前最新內(nèi)核系列,屬于v7架構(gòu),主要有Cortex-A8、Cortex-R4、Cortex-M3和Cortex-M1等處理器,其中A8是面向高性能的應(yīng)用處理器,最高可達(dá)1Ghz的處理速度,更好的支持多媒體及其他高性能要求,最高可達(dá)2000DMIPS;R4主要面向嵌入式實(shí)時(shí)應(yīng)用領(lǐng)域(Real-Time),7級(jí)流水結(jié)構(gòu),相對(duì)于上代ARM1156內(nèi)核,R4在性能、功耗和面積(PPA:Performance,PowerandArea)取得更好的平衡,>1.5DMIPS/Mhz和高于400Mhz的處理速度。日期而M3主要是面向低成本和高性能的MCU應(yīng)用領(lǐng)域,相比ARM7TDMI,M3面積更小,功耗更低,性能更高。Cortex-M3處理器的核心是基于哈佛架構(gòu)的3級(jí)流水線內(nèi)核,該內(nèi)核集成了分支預(yù)測(cè),單周期乘法,硬件除法等眾多功能強(qiáng)大的特性,使其在Dhrystonebenchmark上具有出色的表現(xiàn)(1.25DMIPS/MHz)。根據(jù)Dhrystonebenchmark的測(cè)評(píng)結(jié)果,采用新的Thumb.-2指令集架構(gòu)的Cortex-M3處理器,與執(zhí)行Thumb指令的ARM7TDMI-S.處理器相比,每兆赫的效率提高了70%,與執(zhí)行ARM指令的ARM7TDMI-S處理器相比,效率提高了35%。日期目前已經(jīng)有Cortex系列內(nèi)嵌的產(chǎn)品問(wèn)世,如TI公司推出的基于Cortex-A8內(nèi)核的OMAP3430,TI、ST和Luminary也推出了基于Cortex-M3內(nèi)核的低成本高性能32位MCU,更多詳情請(qǐng)登陸這些公司的主頁(yè)查詢。

日期2工具選擇

根據(jù)開(kāi)發(fā)目標(biāo)平臺(tái)的不同,ARM提供不同的工具解決方案。日期MDK-ARM

RealViewMicrocontrollerDevelopmentKit(MDK)支持基于ARM7,ARM9,Cortex-M3微控制處理器,例如Atmel,F(xiàn)reescale,Luminary,NXP,OKI,Samsung,Sharp,ST,TI等廠家的產(chǎn)品。MDK提供工業(yè)標(biāo)準(zhǔn)的編譯工具和強(qiáng)大的調(diào)試支持。MDK是專為MCU的用戶開(kāi)發(fā)嵌入式軟件而設(shè)計(jì)的一套開(kāi)發(fā)工具。包括根據(jù)器件定制的調(diào)試仿真支持,豐富的項(xiàng)目模版,固件示例以及為內(nèi)存優(yōu)化的RTOS庫(kù)。MDK上手容易,功能強(qiáng)大,適合微控制器應(yīng)用程序開(kāi)發(fā)。

日期RVDS

正如前面所介紹RVDS是專為SOC,F(xiàn)PGA以及ASIC用戶開(kāi)發(fā)復(fù)雜嵌入式應(yīng)用程序或者和操作系統(tǒng)平臺(tái)組件接口而設(shè)計(jì)的開(kāi)發(fā)工具。RVDS支持器件設(shè)計(jì),支持多核調(diào)試,支持基于所有ARM和Cortex系列CPU的程序開(kāi)發(fā)。RVDS還可以和第三方軟件進(jìn)行很好的連接。

日期MDK主要是為終端客戶提供價(jià)格低廉,功能強(qiáng)大的開(kāi)發(fā)工具。集成了RealView編譯工具,KeiluVision開(kāi)發(fā)環(huán)境,支持基于ARM7,ARM9,Cortex-M1,Cortex-M3產(chǎn)品的仿真,提供非常高效的RTOSKernel,除此,提供的Real-Time庫(kù)還有TCP/IP網(wǎng)絡(luò)套件,F(xiàn)lash文件系統(tǒng),USB器件接口,CAN總線接口等,方便終端用戶進(jìn)行應(yīng)用開(kāi)發(fā)。因此對(duì)于MDK用戶來(lái)說(shuō),他們得到的就是可以對(duì)MCU進(jìn)行仿真和調(diào)試,容易使用又沒(méi)有冗余的功能,關(guān)鍵是價(jià)格實(shí)惠,而且用戶可以先試用再購(gòu)買。

日期對(duì)于芯片設(shè)計(jì)公司以及相關(guān)解決方案提供商來(lái)說(shuō),需要的是更加強(qiáng)大的工具,可以進(jìn)行多核調(diào)試,需要更加先進(jìn)的調(diào)試和分析功能,可以支持多種操作系統(tǒng),可以進(jìn)行IP整合開(kāi)發(fā),可以結(jié)合ESL工具進(jìn)行架構(gòu)評(píng)估,系統(tǒng)軟硬件劃分等,那么選擇RVDS可以提供完整解決方案。

日期3編譯和連接

ARMRealView編譯工具已經(jīng)發(fā)展了16年,一直致力于為客戶提供最好的編譯器。RVDS是ARM公司繼SDT與ADS1.2之后主推的新一代開(kāi)發(fā)工具,目前最高版本是3.1。它由RealView編譯器(RVCT)、RealView匯編器(armasm)、RealView連接器(armlinker),以及RealView調(diào)試器(RVDebugger)三部分組成。

日期RVDS對(duì)代碼密度的提升、代碼執(zhí)行速度的提高,都可以由ARM開(kāi)發(fā)工具自動(dòng)實(shí)現(xiàn),而不需要軟件開(kāi)發(fā)人員花費(fèi)過(guò)多的時(shí)間手動(dòng)優(yōu)化高級(jí)語(yǔ)言代碼。這是RVDS的優(yōu)勢(shì)所在。日期先前版本中的編譯器armcc,tcc,armcpp,tcpp已經(jīng)整合成一個(gè)編譯器armcc,可以將標(biāo)準(zhǔn)的C或C++語(yǔ)言源程序編譯成32位ARM指令代碼或者16位Thumb指令代碼或者Thumb-2指令代碼。編譯器輸出的ELF格式的目標(biāo)文件,包含調(diào)試信息。除此之外,編譯器可以輸出所生成的匯編語(yǔ)言列表文件。

日期RVDS的編譯器根據(jù)最新的ARM架構(gòu)進(jìn)行特別的優(yōu)化,針對(duì)每個(gè)ARM架構(gòu)都提供最好的代碼執(zhí)行性能,最優(yōu)的代碼密度??梢愿鶕?jù)需要選擇調(diào)試信息級(jí)別,以及不同的代碼優(yōu)化方向和優(yōu)化級(jí)別。

日期RVCT中C

和RogueWaveC++庫(kù)包括

·完整ISO標(biāo)準(zhǔn)C語(yǔ)言庫(kù)

標(biāo)準(zhǔn)C語(yǔ)言函數(shù)集,C語(yǔ)言庫(kù)需要的支持函數(shù)以及在Semihosted執(zhí)行環(huán)境中需要的目標(biāo)相關(guān)的函數(shù)。ARMC語(yǔ)言庫(kù)結(jié)構(gòu)使用戶很容易定義目標(biāo)相關(guān)函數(shù),以適應(yīng)特定的目標(biāo)環(huán)境。

日期·浮點(diǎn)函數(shù)庫(kù)使用ARM在IEEE754標(biāo)準(zhǔn)(二進(jìn)制浮點(diǎn)算法)上實(shí)現(xiàn)的浮點(diǎn)環(huán)境。

·RogueWaveC++庫(kù)

RogueWaveC++庫(kù)包含標(biāo)準(zhǔn)C++函數(shù),編譯器需要的支持函數(shù)。

各種源文件經(jīng)過(guò)ARM編譯器編譯后生成ELF格式的目標(biāo)文件。這些目標(biāo)文件和相應(yīng)的C/C++運(yùn)行時(shí)庫(kù)經(jīng)過(guò)ARM連接器處理后,生成ELF格式映像文件。日期日期通常在嵌入式系統(tǒng)中,指令和數(shù)據(jù)代碼會(huì)固化在非易失性存儲(chǔ)器中(ROM或Flash),可以從這些地方上電啟動(dòng)。從運(yùn)行速度方面考慮,部分指令和數(shù)據(jù)代碼會(huì)在啟動(dòng)后搬運(yùn)到易失性存儲(chǔ)器(RAM)中,因此連接器可以使用一些方法機(jī)制來(lái)配置調(diào)度。

日期這種分散裝載(scatterloading)的機(jī)制可以讓把不同的指令和數(shù)據(jù)分散的放到不同的地址,而且這些地址在系統(tǒng)啟動(dòng)和系統(tǒng)運(yùn)行可以是不同的映射。

詳細(xì)的地址分配可以是用參數(shù)來(lái)指定,或者用一個(gè)描述文件來(lái)作為連接器的參數(shù)。使用描述文件會(huì)使維護(hù)起來(lái)非常簡(jiǎn)單,而且如果要改變地址分配,不需要把整個(gè)項(xiàng)目完全重新來(lái)做,只要把項(xiàng)目中需要的目標(biāo)重新連接即可。日期一個(gè)scatterloading文件的示例:LOAD_FLASH0x040000000x80000

;啟動(dòng)地址和長(zhǎng)度

{

EXE_FLASH0x040000000x80000

{

init.o(Init,+First)

;

*(+RO)

;

}

32bitRAM0x00000x2000

{

vectors.o(Vect,+First)

;

int_handler.o(+RO)

}

16bitRAM0x20000x80000

{

*(+RW,+ZI)

;

}

}

日期·本文件定義了啟動(dòng)區(qū)域和三個(gè)執(zhí)行區(qū)域。在大括號(hào)外面定義了啟動(dòng)區(qū)域(LOAD_FLASH),里面三個(gè)定義了執(zhí)行區(qū)域(EXEC_FLASH,32bitRAM,16bitRAM)。

·為了提高運(yùn)行速度,異常向量(在vectors.s)和異常句柄(在int_handler.c)被重新放置到32bitRAM的零地址開(kāi)始的地方。

·可以讀寫(xiě)的變量被復(fù)制到16bitRAM的0x2000地址開(kāi)始的地方。

·零初始化的數(shù)據(jù)和可讀寫(xiě)數(shù)據(jù)放在16bitRAM內(nèi)。

·其他不需要搬運(yùn)的代碼只需要還放在Flash里就好。

日期3.1RVCT的優(yōu)化級(jí)別與優(yōu)化方向

提到RVCT就不能不提ARMcc的四個(gè)優(yōu)化級(jí)別和兩個(gè)編譯選項(xiàng),-O1、-O2、-O3、-O4,以及-Otime、-Ospace。-Ospace與-Otime負(fù)責(zé)給編譯器提供代碼優(yōu)化的大方向,告知編譯器編譯任務(wù)的主要目標(biāo)是代碼密度(-Ospace)還是代碼性能(-Otime)。而-O1、-O2、-O3、-O4則分別代表4種逐次遞進(jìn)的不同優(yōu)化級(jí)別。日期OSpace還是OTime?

顯然代碼密度與代碼執(zhí)行速度在很多情況下是一對(duì)矛盾。以下面的代碼為例。例1中左右兩段代碼可以完成相同的任務(wù),但是左邊的有較高的代碼密度,右邊的則有較高的執(zhí)行速度。因?yàn)楫?dāng)expr=0時(shí),標(biāo)志循環(huán)結(jié)束時(shí),右邊的代碼可以順序執(zhí)行下去;而左邊代碼必須先跳轉(zhuǎn)至循環(huán)體首部判斷expr的值,隨后再跳轉(zhuǎn)道循環(huán)體尾,繼續(xù)執(zhí)行下一條指令。

日期例1代碼速度與尺寸的對(duì)比

while(expr)

if(expr)do

{

{

do

body;

{body;}

while(expr);

}

}

日期那么我們什么時(shí)候使用Otime什么時(shí)候使用Ospace呢?Otime與Ospace需要開(kāi)發(fā)人員根據(jù)系統(tǒng)實(shí)際需求來(lái)決定,最好的情況是在兩者之間找到一個(gè)合適的平衡點(diǎn),而不是單純的追求速度或者代碼尺寸的縮小。即,將不同的代碼模塊根據(jù)其特性分別使用不同的編譯選項(xiàng)。

日期此外,RVCT編譯器支持很多非常有用的編譯選項(xiàng),如--no_inline(取消所有代碼的內(nèi)聯(lián)函數(shù))、--split_ldm(限制LDM/STM指令的最大操作寄存器數(shù)目)、--split_sections(將每個(gè)函數(shù),而不是源文件,作為一個(gè)編譯單元進(jìn)行操作)等等。

日期O3還是O2?

老的開(kāi)發(fā)工具,如ADS1.2中,只有3種遞進(jìn)的代碼優(yōu)化級(jí)別,對(duì)應(yīng)3種編譯選項(xiàng),即-O0(Minimumoptimization)、-O1(Restrictedoptimization)、-O2(Highoptimization)。使用-O0編譯選項(xiàng)時(shí),RVCT編譯器只對(duì)代碼作最基本的優(yōu)化操作,編譯結(jié)束后用戶得到的代碼與用戶手寫(xiě)源代碼之間的差距很小,這種特性的主要作用是為了方便用戶在程序開(kāi)發(fā)階段的調(diào)試工作,避免由于優(yōu)化而產(chǎn)生的調(diào)試屏障。此外,很多資深軟件工程師偏向于手寫(xiě)優(yōu)化代碼,在這種情況下,由于代碼已經(jīng)被優(yōu)化過(guò),可以使用-O0編譯選項(xiàng)減少RVCT的工作量,節(jié)省編譯鏈接的時(shí)間。

日期-O1與-O2則分別是相對(duì)于-O0更加高級(jí)別的編譯優(yōu)化選項(xiàng),前者提供有限的優(yōu)化;后者則會(huì)對(duì)代碼進(jìn)行較大程度的優(yōu)化改進(jìn)操作。RVDS中新增加了-O3(Maximumoptimization)編譯選項(xiàng),它可以最大程度的發(fā)揮RVCT編譯器的優(yōu)勢(shì),將代碼編譯成最優(yōu)。O3與O2都是較高級(jí)別的編譯優(yōu)化選項(xiàng),但-O3相比較于-O2,主要優(yōu)勢(shì)有以下幾點(diǎn)。日期當(dāng)用戶使用-O3選項(xiàng)時(shí):

――編譯器會(huì)自動(dòng)對(duì)代碼進(jìn)行高階標(biāo)量?jī)?yōu)化。所謂的高階標(biāo)量?jī)?yōu)化就是編譯器對(duì)根據(jù)代碼特點(diǎn),針對(duì)循環(huán)、指針等進(jìn)行高階優(yōu)化。

――編譯器會(huì)把盡可能多函數(shù)的編譯為內(nèi)聯(lián)(inline)函數(shù);

――Multifilecompilation功能被自動(dòng)使能。

日期對(duì)于循環(huán)與指針的高階優(yōu)化(High-levelscalaroptimizations)

當(dāng)編譯選項(xiàng)為-O3

–Otime時(shí),RVCT會(huì)根據(jù)代碼的具體情況,針對(duì)循環(huán)、指針等部分作高階優(yōu)化工作:循環(huán)解開(kāi)(Loopunrolling)、融合(fusion)、位置調(diào)整(interchange)、指針優(yōu)化等等。以例2的函數(shù)為例。例2是一段簡(jiǎn)單的C循環(huán)函數(shù),在循環(huán)中含有數(shù)組指針調(diào)用。

日期例2

CodeA

voidincrement(int*restrictb,

int*restrictc)

{

inti;

for(i=0;i<100;i++)

{

c[i]=b[i]+1;

}

}

CodeB

voidincrement(int*b,int*c)

{

inti;

int*pb,*pc;

intb3,b4;

pb=b-1;

pc=c-1;

b3=pb[1];

for(i=(100/2);i!=0;i--)

{

b4=*(pb+=2);

pc[1]=b3+1;

b3=pb[1];

*(pc+=2)=b4+1;

}

}日期仔細(xì)觀察可以發(fā)現(xiàn),CodeA與CodeB可以完成同樣的功能,即將數(shù)組b的每個(gè)成員加1賦值給數(shù)組c對(duì)應(yīng)成員。但是CodeB與CodeA相比,有較高的執(zhí)行速度。主要體現(xiàn)在以下幾點(diǎn):

日期――循環(huán)100次變成了循環(huán)50次(loopunrolling),減少了跳轉(zhuǎn)次數(shù);

――數(shù)組變成了指針,減少每次計(jì)算數(shù)組偏移量的指令;

――微調(diào)了不同代碼操作的執(zhí)行順序,減少了流水線stall的情況;

――循環(huán)從++循環(huán)變成了――循環(huán)。這樣可以使用ARM指令的條件位,為每次循環(huán)減少了一條判斷指令。

日期很多程序員就是這樣,通過(guò)這種手寫(xiě)不同的C代碼,再實(shí)現(xiàn)相同任務(wù)的情況下,提高了代碼執(zhí)行效率。

在RVDS中,使用-O3

–Otime編譯選項(xiàng),RVCT會(huì)自動(dòng)幫助程序員進(jìn)行這些高階標(biāo)量?jī)?yōu)化,即,RVCT會(huì)直接將CodeA優(yōu)化成以前由CodeB才能得到的匯編代碼。雖然優(yōu)化之后函數(shù)的代碼尺寸大于原先的函數(shù),但是執(zhí)行速度卻有大大的提高,經(jīng)過(guò)統(tǒng)計(jì),使用EEMBCbenchmarking,

-O3編譯選項(xiàng)編譯得到的最終代碼平均性能相對(duì)于-O1可以有10%的提升,而總體代碼尺寸只增加了1%。

日期3.2Multifilecompilation

按照傳統(tǒng)的編譯方式,我們先把各個(gè)C或C++文件單獨(dú)編譯成.obj文件,再將這些目標(biāo)文件鏈接在一起。考慮到雖然在編譯單獨(dú)的C或C++文件時(shí),編譯器會(huì)充分發(fā)揮它的優(yōu)化特性;但此時(shí),編譯器無(wú)法關(guān)注到大量的C或C++文件接口之間可以優(yōu)化的部分。所以在傳統(tǒng)的編譯結(jié)果里,還有許多優(yōu)化的余地。如何才能讓編譯器同時(shí)關(guān)注和編譯所有的源代碼呢?

日期Multifilecompilation是RVDS一個(gè)較新的特性,它可以幫助開(kāi)發(fā)人員將所有的源文件作為一個(gè)compilationunit進(jìn)行編譯,并最終生成一個(gè)大的目標(biāo)文件(如圖3中的file1.o)。Mutifilecompilation給軟件開(kāi)發(fā)人員帶來(lái)的直接優(yōu)勢(shì)有以下幾點(diǎn):

日期――增加inline的可能性。由于inline只能發(fā)生在一個(gè)compilationunit中,所以在沒(méi)有使用mutifilecompilation時(shí),inline只能發(fā)生在一個(gè)源文件范圍內(nèi)。MultifileCompilation將一個(gè)compilationunit擴(kuò)大到了所有源文件的范圍上,所以直接增加了inline發(fā)生的幾率。

――增加了基地址與函數(shù)間優(yōu)化的可能性。同inline一樣,所有的基地址與函數(shù)間的優(yōu)化也必須在一個(gè)compilationunit中,隨著conpilationunit的擴(kuò)大這種優(yōu)化的可能性也增加了。

――減少了scatterfile的復(fù)雜性。

日期3.3調(diào)試

由前面的介紹已經(jīng)知道RealViewDebugger(RVD)是RVDS的重要組件之一。RealViewDebugger可以更好的幫助客戶在復(fù)雜SoC設(shè)計(jì)中方便直觀的調(diào)試軟硬件。

日期!方便協(xié)調(diào)的開(kāi)發(fā)軟硬件

RVD使用同步機(jī)制進(jìn)行多核調(diào)試,使用RVD在一個(gè)處理器上設(shè)置的斷點(diǎn),可以停止整個(gè)系統(tǒng),這樣可以觀測(cè)復(fù)雜的多核系統(tǒng)的各種關(guān)鍵狀態(tài)信息。

file1.cfile2.cfile3.c

compil

file1.ofile2ofile3o

Dummyobjectfiles

file1.c

file2.c

file3.c

compil

file1.o

file2.o

file3.o

compilcompil

日期!調(diào)試操作系統(tǒng)和中間件RVD支持調(diào)試業(yè)內(nèi)各種流行的操作系統(tǒng),正如操作系統(tǒng)一章所述,RVD可以直觀的觀測(cè)操作系統(tǒng)的執(zhí)行文本和各種資源。

日期!調(diào)試跟蹤,性能評(píng)估

RVD可以對(duì)基于ARM處理器的設(shè)計(jì)進(jìn)行非插入式的實(shí)時(shí)地捕捉數(shù)據(jù)/指令和顯示,從而實(shí)現(xiàn)調(diào)試,跟蹤以及性能評(píng)估。目前業(yè)內(nèi)其他的調(diào)試工具還不能達(dá)到有如RVD這樣出色的性能。RVD可以對(duì)RealViewESL對(duì)系統(tǒng)模型進(jìn)行調(diào)試,也可以使用RealViewICE以及RealViewTrace對(duì)真實(shí)的硬件系統(tǒng)進(jìn)行調(diào)試跟蹤和性能評(píng)估。

日期!調(diào)試目標(biāo)設(shè)備無(wú)論是開(kāi)發(fā)一個(gè)新的軟硬件架構(gòu),一個(gè)操作系統(tǒng)還是一個(gè)應(yīng)用程序,RVD可以連接到SoC模型,指令集仿真模型,實(shí)時(shí)系統(tǒng)模型或者真實(shí)的硬件處理器來(lái)幫助完成開(kāi)發(fā)。如此廣泛的支持,使得RVD在整個(gè)開(kāi)發(fā)周期中成為一個(gè)不可或缺的得力的開(kāi)發(fā)工具。

日期4操作系統(tǒng)

隨著高端電子消費(fèi)類產(chǎn)品的廣泛普及,實(shí)時(shí)嵌入式操作系統(tǒng)使用越來(lái)越廣泛。而基于ARM的嵌入式操作系統(tǒng)在各個(gè)領(lǐng)域都得到了廣泛的應(yīng)用,利用ARM系列產(chǎn)品的強(qiáng)大功能可以完成各種應(yīng)用程序的開(kāi)發(fā)。ARM對(duì)操作系統(tǒng)以及系統(tǒng)開(kāi)發(fā)執(zhí)行環(huán)境提供最廣泛的選擇,客戶可以根據(jù)需要來(lái)選擇最適應(yīng)市場(chǎng)要求的基于ARM的嵌入式操作系統(tǒng)??晒┻x擇的嵌入式操作系統(tǒng)有幾十種,使用較多的有Linux,WinCE,Palm,Symbian等等。日期采用WinCE更多的是OEM,以及按需進(jìn)行特定的嵌入式器件開(kāi)發(fā)的,例如GPS導(dǎo)航設(shè)備。采用Palm操作系統(tǒng)的廠家有聯(lián)想三星索尼,他們的出貨量都非常巨大。Symbian操作系統(tǒng)是先進(jìn)的全球公開(kāi)工業(yè)標(biāo)準(zhǔn)操作系統(tǒng),基于Symbian操作系統(tǒng)的手機(jī)有:BenQ,DoCoMo,Motorola,Nokia,Panasonic,三星,索尼愛(ài)立信等。Linux是

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論