《ARM嵌入式系統(tǒng)基礎(chǔ)與開發(fā)教程》是2010年6月1日北京大學(xué)出版社出版的一本圖書,作者是丁文龍,李志軍。
本書全面、系統(tǒng)地介紹ARM7TDMI處理器的體系結(jié)構(gòu)、編程模型、指令系統(tǒng),以及ADS1.2、Real View MDK、PROTEUS三個(gè)開發(fā)環(huán)境。同時(shí),還以基于ARM7TDMI的應(yīng)用處理器LPC2124為核心,詳細(xì)介紹了ARM嵌入式系統(tǒng)設(shè)計(jì)、相關(guān)接口技術(shù)、嵌入式軟件設(shè)計(jì)等內(nèi)容。接口技術(shù)的內(nèi)容涵蓋了GPIO、中斷、定時(shí)器、LIART、RTC、A/D、I2C、SPI、PWM,并列舉了大量實(shí)例。本書還介紹了μC/OS-Ⅱ軟件體系結(jié)構(gòu)、文件結(jié)構(gòu)及移植規(guī)劃等方面的內(nèi)容。在第9章提供了一個(gè)綜合實(shí)例。
ARM嵌入式系統(tǒng)基礎(chǔ)與開發(fā)教程圖片
| 書名 | ARM嵌入式系統(tǒng)基礎(chǔ)與開發(fā)教程 | 作者 | 丁文龍,李志軍 |
|---|---|---|---|
| ISBN | 9787301173183 | 類別 | 計(jì)算機(jī)/網(wǎng)絡(luò) |
| 定價(jià) | ¥36.00 | 出版社 | 北京大學(xué)出版社 |
| 出版時(shí)間 | 2010年6月1日 | 開本 | 16開 |
嵌入式入門確實(shí)比較難。如果你有一定的基礎(chǔ)(指單片機(jī),C語言還不錯(cuò)的話),就可以開始學(xué)嵌入式了。想要學(xué)好嵌入式,C、C++肯定得扎實(shí)。如果還想深入驅(qū)動(dòng)開發(fā)的話,那么你要會(huì)看匯編吧,當(dāng)然電路原理圖也得會(huì)看...
您好 很高興回答你 的問題 質(zhì)量性價(jià)比都還不錯(cuò) 建議去實(shí)店購買 &...
縱觀嵌入式系統(tǒng)的發(fā)展歷程,大致經(jīng)歷了以下四個(gè)階段: 無操作系統(tǒng)階段 嵌入式系統(tǒng)最初的應(yīng)用是基于單片機(jī)的,大多以可編程控制器的形式出現(xiàn),具有監(jiān)測(cè)、伺服、設(shè)備指示等功能,通常應(yīng)用于各類工業(yè)控制和飛機(jī)、等武...
ARM嵌入式系統(tǒng)開發(fā)綜述ARM開發(fā)工程師入門寶典
格式:pdf
大?。?span id="tnd2oqe" class="single-tag-height">1.2MB
頁數(shù): 28頁
評(píng)分: 4.4
獲取更多權(quán)威電子書 請(qǐng)登錄 www.eetchina.com ARM 嵌入式系統(tǒng)開發(fā)綜述 ARM 開發(fā)工程師入門寶典 獲取更多權(quán)威電子書 請(qǐng)登錄 www.eetchina.com 硬件工程師必讀攻略 ----如何通過仿真有效提高數(shù)模混合設(shè)計(jì)性能 (上 ) 2 / 28 前 言 嵌入式系統(tǒng)通常是以具體應(yīng)用為中心, 以處理器為核心且面向?qū)嶋H應(yīng)用的軟 硬件系統(tǒng),其硬件是整個(gè)嵌入式系統(tǒng)運(yùn)行的基礎(chǔ)和平臺(tái), 提供了軟件運(yùn)行所需的 物理平臺(tái)和通信接口; 而嵌入式系統(tǒng)的軟件一般包括操作系統(tǒng)和應(yīng)用軟件, 它們 是整個(gè)系統(tǒng)的控制核心, 提供人機(jī)交互的信息等。 所以,嵌入式系統(tǒng)的開發(fā)通常 包括硬件和軟件兩部分的開發(fā),硬件部分主要包括選擇合適的 MCU 或者 SOC 器件、存儲(chǔ)器類型、通訊接口及 I/O、電源及其他的輔助設(shè)備等;軟件部分主要 涉及 OS porting 和應(yīng)用程序的開發(fā)等,與此同時(shí),軟件中斷調(diào)試
基于ARM嵌入式系統(tǒng)的通用LED圖文顯示系統(tǒng)
格式:pdf
大?。?span id="t7ffp2y" class="single-tag-height">1.2MB
頁數(shù): 3頁
評(píng)分: 4.4
本文所設(shè)計(jì)的LED圖文顯示系統(tǒng)采用AM1808-456高速ARM內(nèi)核芯片,引入了標(biāo)準(zhǔn)網(wǎng)絡(luò)接口,設(shè)置了大容量的FLASH存儲(chǔ)器,并采用了智能化的顯示區(qū)域控制算法,上位機(jī)采用VC++6.0進(jìn)行設(shè)計(jì),調(diào)用各種函數(shù)和第三方插件,實(shí)現(xiàn)文本,圖片、動(dòng)畫,視頻等多種格式的信息顯示,使得LED顯示系統(tǒng)在通信、布線、群控、遠(yuǎn)程控制、卡卡通用等特性得到很好的結(jié)合,實(shí)用性強(qiáng)。
ARM9? 處理器系列為微控制器、DSP 和 Java 應(yīng)用提供單 解決方案,從而減小芯片面積、降低復(fù)雜性和功耗,并加快產(chǎn)品上市速度 。下面以ARM926EJ-S系列為例,詳細(xì)說明。
第一,學(xué)習(xí)基本的單片機(jī)編程。
對(duì)于學(xué)硬件的人而言,必須先對(duì)硬件的基本使用方法有感性的認(rèn)識(shí),更必須深刻認(rèn)識(shí)該硬件的控制方式,如果一開始就學(xué)linux系統(tǒng)、學(xué)移植那么只會(huì)馬上就陷入一個(gè)很深的漩渦。我在剛剛開始學(xué)ARM的時(shí)候是選擇ARM7(主要是當(dāng)時(shí)ARM9還很貴),學(xué)ARM7的時(shí)候還是保持著學(xué)51單片機(jī)的思維,使用ADS 去編程,第一個(gè)實(shí)驗(yàn)就是控制 led。學(xué)過一段時(shí)間ARM的人都會(huì)笑這樣很笨,實(shí)際上也不是,我倒是覺得有這個(gè)過程會(huì)好很多,因?yàn)闊o論做多復(fù)雜的系統(tǒng)最終都會(huì)落實(shí)到這些最底層的硬件控制,因此對(duì)這些硬件的控制有了感性的認(rèn)識(shí)就好很多了 學(xué)習(xí)單片機(jī)的編程的同時(shí)要好好理解這個(gè)硬件的構(gòu)架、控制原理,這些我稱他為理解硬件。所謂的理解硬件就是說,理解這個(gè)硬件是怎么組織這么多資源的,這些資源又是怎么由cpu、由編程進(jìn)行控制的。比如說,s3c2410中有AD轉(zhuǎn)換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來控制,這些寄存器都有一個(gè)地址,那么這些地址是什么意思?又怎么通過寄存器來控制這些外圍設(shè)備的運(yùn)轉(zhuǎn)?還有,norflash內(nèi)部的每一個(gè)單元在這個(gè)芯片的內(nèi)存中都有一個(gè)相應(yīng)的地址單元,那么這些地址與剛剛說的寄存器地址又有什么關(guān)系?他們是一樣的嗎?而與 norflash相對(duì)應(yīng)的nandflash內(nèi)部的儲(chǔ)存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內(nèi)存空間上進(jìn)行使用?或者簡(jiǎn)單地說應(yīng)該怎么用nandflash?再有,使用ADS進(jìn)對(duì)ARM9行編程時(shí)都需要使用到一個(gè)初始化的匯編文件,這個(gè)文件究竟有什么用?他里面的代碼是什么意思?不要這個(gè)可以嗎?諸如此類都是對(duì)硬件的理解,理解了這些東西就對(duì)硬件有很深的理解了,這對(duì)以后更深一步的學(xué)習(xí)將有很大的幫助,如果跳過這一步,我相信越往后學(xué)越會(huì)覺得迷茫,越覺得這寫東西深不可測(cè)。因?yàn)?,你的根基沒打好。
第二,使用linux系統(tǒng)進(jìn)行一些基本的實(shí)驗(yàn)。
在買一套板子的時(shí)候一般會(huì)提供一些linux的試驗(yàn)例程,好好做一段時(shí)間這個(gè)吧,這個(gè)過程也是很有意義的,也是為進(jìn)一步的學(xué)習(xí)積累感性認(rèn)識(shí),你能想象一個(gè)從沒有使用過linux系統(tǒng)的人能學(xué)好linux的編程嗎?好好按照手冊(cè)上的例程做一做里面的實(shí)驗(yàn),雖然有點(diǎn)娃娃學(xué)走路,有點(diǎn)弱智,但是我想很多高手都會(huì)經(jīng)歷這個(gè)過程。 在這方面我們深藍(lán)科技沒有計(jì)劃提供相應(yīng)的例程,主要是開發(fā)板的提供商會(huì)提供很豐富的例程,我們不做重復(fù)工作,只提供他們沒有的、最有價(jià)值的東西給大家。
第三,研究完整的linux系統(tǒng)的的運(yùn)行過程。
所謂完整的linux系統(tǒng)包括哪些部分呢? 三部分:bootloader、linux kernel(linux內(nèi)核)、rootfile(根文件系統(tǒng))。 那么這3部分是怎么相互協(xié)作來構(gòu)成這個(gè)系統(tǒng)的呢?各自有什么用呢?三者有什么聯(lián)系?怎么聯(lián)系?系統(tǒng)的執(zhí)行流程又是怎么樣的呢?搞清楚這個(gè)問題你對(duì)整個(gè)系統(tǒng)的運(yùn)行就很清楚了,對(duì)于下一步制作這個(gè)linux系統(tǒng)就打下了另一個(gè)重要的根基。介紹這方面的資料網(wǎng)上可以挖掘到幾噸,自己好好研究吧。
第四,開始做系統(tǒng)移植。
上面說到完整的linux有3部分,而且你也知道了他們之間的關(guān)系和作用,那么現(xiàn)在你要做的便是自己動(dòng)手學(xué)會(huì)制作這些東西。 當(dāng)然我不可能叫你編寫這些代碼,這不實(shí)現(xiàn)。事實(shí)上這個(gè)3者都能在網(wǎng)下載到相應(yīng)的源代碼,但是這個(gè)源代碼不可能下載編譯后就能在你的系統(tǒng)上運(yùn)行,需要很多的修改,直到他能運(yùn)行在你的板子上,這個(gè)修改的過程就叫移植。在進(jìn)行移植的過程中你要學(xué)的東西很多,要懂的相關(guān)知識(shí)也很多,等你完成了這個(gè)過程你會(huì)發(fā)現(xiàn)你已經(jīng)算是一個(gè)初出茅廬的高手了。 在這個(gè)過程中如果你很有研究精神的話你必然會(huì)想到看源代碼。很多書介紹你怎么閱讀linux源代碼,我不提倡無目的地去看linux源代碼,用許三多的話說,這沒有意義。等你在做移植的時(shí)候你覺得你必須去看源代碼時(shí)再去找基本好書看看,這里我推薦一本好書倪繼利的《linux內(nèi)核的分析與編程》,這是一本針對(duì)linux-2.6.11內(nèi)核的書,說得很深,建議先提高自己的C語言編程水平再去看。 至于每個(gè)部分的移植網(wǎng)上也可以找到好多噸的資料,自己研究研究吧,不過要提醒的是,很多介紹自己經(jīng)驗(yàn)的東西都或多或少有所保留,你按照他說的去做總有一些問題,但是他不會(huì)告訴你怎么解決,這時(shí)就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問題,因?yàn)槲椅幢赜龅竭^你的問題,不過我相信能給你一點(diǎn)建議,也許有助你解決問題。 這一步的最終目的是,從源代碼的官方主頁上(都是外國(guó)的,悲哀)下載標(biāo)準(zhǔn)的源代碼包,然后進(jìn)行修改,最終運(yùn)行在板子上。 盜用阿基米德的一句話:“給我一根網(wǎng)線,我能將linux搞定”。
第五,研究linux驅(qū)動(dòng)程序的編寫。
移植系統(tǒng)并不是最終的目的,最終的目的是開發(fā)產(chǎn)品,做項(xiàng)目,這些都要進(jìn)行驅(qū)動(dòng)程序的開發(fā)。Linux的驅(qū)動(dòng)程序可以說是五花八門,linux2.4和 linux2.6的編寫有相當(dāng)大的區(qū)別,就是同為linux2.6但是不同版本間的驅(qū)動(dòng)程序也有區(qū)別,因此編寫linux的驅(qū)動(dòng)程序變都不是那么容易的事情,對(duì)于最新版本的驅(qū)動(dòng)程序的編寫甚至還沒有足夠的參考資料。那么我的建議就是使用、移植一個(gè)不算很新的版本內(nèi)核,這樣到時(shí)學(xué)驅(qū)動(dòng)的編程就有足夠的資料了。 這部分的推薦書籍可以參考另一篇文章《推薦幾本學(xué)習(xí)嵌入式linux的書籍》。 第六,研究應(yīng)用程序的編寫。 做作品做項(xiàng)目除了編寫驅(qū)動(dòng)程序,最后還要編寫應(yīng)用程序?,F(xiàn)在的趨勢(shì)是圖形應(yīng)用程序的開發(fā),而圖形應(yīng)用程序中用得最多的還是qt/e函數(shù)庫。我一直就使用這個(gè)函數(shù)庫來開發(fā)自己的應(yīng)用程序,不過我希望你能使用國(guó)產(chǎn)的MiniGUI函數(shù)庫。盜用周杰倫的廣告詞就是“支持國(guó)產(chǎn),支持MiniGUI”。 MiniGUI的編程比較相似Windows下的VC編程,比較容易上手,效果應(yīng)該說是相當(dāng)不錯(cuò)的,我曾使用過來開發(fā)ARM7的程序。記住,問題是學(xué)習(xí)的最好機(jī)會(huì)
---
有同學(xué)反映,我們視頻一上來就講干貨,希望適當(dāng)普及一下相關(guān)概念,這篇就是。
ARM處理器解析
ARM9、ARM11是哈佛5級(jí)流水線結(jié)構(gòu),所以性能要高一點(diǎn)。ARM9和ARM11大多帶內(nèi)存管理器,跑操作系統(tǒng)好一點(diǎn),ARM7適合裸奔。我們慣稱的 ARM9系列中又存在ARM9與ARM9E兩個(gè)系列,其中ARM9 屬于ARM v4T架構(gòu),典型處理器如ARM9TDMI和ARM922T;
而ARM9E屬于ARM v5TE架構(gòu),典型處理器如ARM926EJ和ARM946E。因?yàn)楹笳叩男酒瑪?shù)量和應(yīng)用更為廣泛,所以我們提到ARM9的時(shí)候更多地是特指ARM9E系列處理器(主要就是ARM926EJ和ARM946E這兩款處理器)。
下面關(guān)于ARM9的介紹也是更多地集中于ARM9E。
2
ARM7處理器和ARM9E處理器的流水線差別
對(duì)嵌入式系統(tǒng)設(shè)計(jì)者來說,硬件通常是第一考慮的因素。針對(duì)處理器來說,流水線則是硬件差別的最明顯標(biāo)志,不同的流水線設(shè)計(jì)會(huì)產(chǎn)生一系列硬件差異。
讓我們來比較一下ARM7和ARM9E的流水線,ARM9E從ARM7的3級(jí)流水線增加到了5級(jí),ARM9E的流水線中容納了更多的邏輯操作,但是每一級(jí)的邏輯操作卻變得更為簡(jiǎn)單。
比如原來 ARM7的第三級(jí)流水,需要先內(nèi)部讀取寄存器、然后進(jìn)行相關(guān)的邏輯和算術(shù)運(yùn)算,接著處理結(jié)果回寫,完成的動(dòng)作非常復(fù)雜;
而在ARM9E的5級(jí)流水中,寄存器讀取、邏輯運(yùn)算、結(jié)果回寫分散在不同的流水當(dāng)中,使得每一級(jí)流水處理的動(dòng)作非常簡(jiǎn)潔。這就使得處理器的主頻可以大幅度地提高。因?yàn)槊恳患?jí)流水都對(duì)應(yīng) CPU的一個(gè)時(shí)鐘周期,如果一級(jí)流水中的邏輯過于復(fù)雜,使得執(zhí)行時(shí)間居高不下,必然導(dǎo)致所需的時(shí)鐘周期變長(zhǎng),造成CPU的主頻不能提升。所以流水線的拉長(zhǎng),有利于CPU主頻的提高。
在常用的芯片生產(chǎn)工藝下,ARM7一般運(yùn)行在100MHz左右,而ARM9E則至少在200MHz以上。
3
ARM9E處理器的存儲(chǔ)器子系統(tǒng)
像ARM926EJ 和ARM946E這兩個(gè)最常見的ARM9E處理器中,都帶有一套存儲(chǔ)器子系統(tǒng),以提高系統(tǒng)性能和支持大型操作系統(tǒng)。如圖2所示,一個(gè)存儲(chǔ)器子系統(tǒng)包含一個(gè) MMU(存儲(chǔ)器管理單元)或MPU(存儲(chǔ)器保護(hù)單元)、高速緩存(Cache)和寫緩沖(Write Buffer);CPU通過該子系統(tǒng)與系統(tǒng)存儲(chǔ)器系統(tǒng)相連。

高速緩存和寫緩存的引入是基于如下事實(shí),即處理器速度遠(yuǎn)遠(yuǎn)高于存儲(chǔ)器訪問速度;如果存儲(chǔ)器訪問成為系統(tǒng)性能的瓶頸,則處理器再快也是浪費(fèi),因?yàn)樘幚砥餍枰馁M(fèi)大量的時(shí)間在等待存儲(chǔ)器上面。
高速緩存正是用來解決這個(gè)問題,它可以存儲(chǔ)最近常用的代碼和數(shù)據(jù),以最快的速度提供給CPU處理(CPU訪問Cache不需要等待)。
4
復(fù)雜處理器內(nèi)部的存儲(chǔ)器子系統(tǒng)
MMU則是用來支持存儲(chǔ)器管理的硬件單元,滿足現(xiàn)代平臺(tái)操作系統(tǒng)內(nèi)存管理的需要;它主要包括兩個(gè)功能:一是支持虛擬/物理地址映射,二是提供不同存儲(chǔ)器地址空間的保護(hù)機(jī)制。
一個(gè)簡(jiǎn)單的例子可以幫助我們理解MMU的功能,在一個(gè)操作系統(tǒng)下,程序開發(fā)人員都是在操作系統(tǒng)給定的API和編程模型下開發(fā)程序;操作系統(tǒng)通常只開放一個(gè)確定的存儲(chǔ)器地址空間給用戶。這樣就帶來 一個(gè)直接的問題,所有的應(yīng)用程序都使用了相同的存儲(chǔ)器地址空間,如果這些程序同時(shí)啟動(dòng)的話(在現(xiàn)在的多任務(wù)系統(tǒng)中這是非常常見的),就會(huì)產(chǎn)生存儲(chǔ)器訪問沖 突。那操作系統(tǒng)是如何來避免這個(gè)問題的呢?
操作系統(tǒng)會(huì)利用MMU硬件單元完成存儲(chǔ)器訪問虛擬地址到物理地址的轉(zhuǎn)換。所謂虛擬地址就是程序員在程序中使用的邏輯地址,而物理地址則是真實(shí)存儲(chǔ)器單元的空間地址。MMU通過一定的規(guī)則, 可以把相同的虛擬地址映射到不同的物理地址上去。這樣,即使有多個(gè)使用相同虛擬地址的程序進(jìn)程啟動(dòng),也可以通過MMU調(diào)度把它們映射到不同的物理地址上 去,不會(huì)造成系統(tǒng)錯(cuò)誤。
5
MMU的功能和作用
MMU 處理地址映射功能之外,還能給不同的地址空間設(shè)置不同的訪問屬性。比如操作系統(tǒng)把自己的內(nèi)核程序地址空間設(shè)置為用戶模式下不可訪問,這樣的話用戶應(yīng)用程序就無法訪問到該空間,從而保證操作系統(tǒng)內(nèi)核的安全性。
MPU與MMU的區(qū)別在于它只有給地址空間設(shè)置訪問屬性的功能而沒有地址映射功能。Cache以及MMU等硬件單元的引入,給系統(tǒng)程序員的編程模型帶來了許多全新的變化。
除了需要掌握基本的概念和使用方法之外,下面幾個(gè)針對(duì)系統(tǒng)優(yōu)化的點(diǎn)既有趣又重要:
1.系統(tǒng)實(shí)時(shí)性考慮因素
為保存地址映射規(guī)則的頁表(Page Table)非常龐大,通常MMU中只是存儲(chǔ)器了常用的一小段頁表內(nèi)容,大部分頁表內(nèi)容都存儲(chǔ)于主存儲(chǔ)器里面;當(dāng)調(diào)用新的地址映射規(guī)則時(shí),MMU可能需要讀取主存儲(chǔ)器來更新頁表。
這在某些情況下會(huì)造成系統(tǒng)實(shí)時(shí)性的丟失。比如當(dāng)需要執(zhí)行一段關(guān)鍵的程序代碼時(shí),如果不巧這段代碼使用的地址空間不在當(dāng)前MMU的頁表處理范圍里面,則MMU首先需要更新頁表,然后完成地址映射,接著才能相應(yīng)存儲(chǔ)器訪問;
整個(gè)地址譯碼過程非常長(zhǎng),給實(shí)時(shí)性帶來非常大的不利影響。所以一般來說帶MMU和Cache的系統(tǒng)在實(shí)時(shí)性上不如一些簡(jiǎn)單的處理器;不過也有一些辦法能夠幫助提高這些系統(tǒng)的實(shí)時(shí)效率。
一個(gè)簡(jiǎn)單的辦法是在需要的時(shí)候關(guān)閉MMU和Cache,這樣就變成一個(gè)簡(jiǎn)單處理器了,可以馬上提高系統(tǒng)實(shí)時(shí)性。當(dāng)然很多情況下這不可行;
在ARM的MMU和 Cache設(shè)計(jì)中,有一個(gè)鎖定的功能,就是說你可以指定某一塊頁表在MMU中不會(huì)被更新掉,某一段代碼或數(shù)據(jù)可以在Cache中鎖定而不會(huì)被刷新掉;程序員可以利用這個(gè)功能來支持那些實(shí)時(shí)性要求最高的代碼,保證這些代碼始終能夠得到最快的響應(yīng)和支持。
2.系統(tǒng)軟件優(yōu)化
在嵌入式系統(tǒng)開發(fā)中,很多系統(tǒng)軟件優(yōu)化的方法都是相同和通用的,多數(shù)情況下這種規(guī)則也適用于ARM9E架構(gòu)上。如果你已經(jīng)是一個(gè)ARM7的編程高手,那么恭喜你,以前你掌握的優(yōu)化方法完全可以用在新的ARM9E平臺(tái)上,但是會(huì)有一些新的特性需要你加倍注意。最重要的便是Cache的作用,Cache本身并不 帶來編程模型和接口的變化,但是如果我們考察Cache的行為,就能夠發(fā)現(xiàn)對(duì)于軟件優(yōu)化,Cache是有比較大的影響的。
Cache在物理上就是一塊高速SRAM,ARM9E的Cache組織寬度(cache line)都是4個(gè)word(也就是32個(gè)字節(jié));Cache的行為受系統(tǒng)控制器控制而不是程序員,系統(tǒng)控制器會(huì)把最近訪問存儲(chǔ)器地址附近的內(nèi)容復(fù)制到Cache中去,這樣,當(dāng)CPU訪問下一個(gè)存儲(chǔ)器單元的時(shí)候(這個(gè)訪問既可能是取指,也可能是數(shù)據(jù)),可能這個(gè)存儲(chǔ)器單元的內(nèi)容已經(jīng)在Cache里了,所以CPU不需要真的到主存儲(chǔ)器上去讀取內(nèi)容,而直接讀取Cache高速緩存上面的內(nèi)容就可以了,從而加快了訪問的速度。
從Cache的工作原理我們可以看 到,其實(shí)Cache的調(diào)度是基于概率的,CPU要訪問的數(shù)據(jù)既可能在Cache中已經(jīng)存在(Cache hit),也可能沒有存在(Cache miss)。在Cache miss的情況下,CPU訪問存儲(chǔ)器的速度會(huì)比沒有Cache的情況更壞,因?yàn)镃PU除了要從存儲(chǔ)器訪問數(shù)據(jù)以外,還需要處理Cache hit或miss的判斷,以及Cache內(nèi)容的刷新等動(dòng)作。
只有當(dāng)Cache hit帶來的好處超過Cache miss帶來的犧牲的時(shí)候,系統(tǒng)的整體性能才能得到提高,所以Cache的命中率成為一個(gè)非常重要的優(yōu)化指標(biāo)。
根據(jù)Cache行為的特點(diǎn),我們可以直觀地得到提高Cache命中率的一些方法,如盡可能把功能相關(guān)的代碼和數(shù)據(jù)放置在一起,減少跳轉(zhuǎn)次數(shù);跳轉(zhuǎn)經(jīng)常會(huì)引起 Cache miss。保持合適的函數(shù)大小,不要書寫太多過小的函數(shù)體,因?yàn)榫€性的程序執(zhí)行流程是最為Cache友好的。
循環(huán)體最好放置在4個(gè)word對(duì)齊的地址,這 樣就能保證循環(huán)體在Cache中是行對(duì)齊的,并且占用最少的Cache行數(shù),使得被多次調(diào)用的循環(huán)體得到更好的執(zhí)行效率。
6
性能和效率的提升
前面介紹了ARM9E相比于ARM7性能上的提高,這不僅表現(xiàn)在ARM9E有更快的主頻、更多的硬件特性上面,還體現(xiàn)在某些指令的執(zhí)行效率上面。執(zhí)行效率我 們可以用CPU的時(shí)鐘周期數(shù)(Cycle)來衡量;
運(yùn)行同一段程序,ARM9E的處理器可以比ARM7節(jié)省大約30%左右的時(shí)鐘周期。
效率的提高主要來自于ARM9E對(duì)于Load-Store指令執(zhí)行效率的增強(qiáng)。我們知道在RISC架構(gòu)的處理器中,程序中大約有30%的指令是Load- Store指令,這些指令的效率對(duì)系統(tǒng)效率的貢獻(xiàn)是最明顯的。
ARM9E中有兩個(gè)因素幫助提高Load-Store指令的效率:
1)ARM9內(nèi)核是哈佛架構(gòu),擁有獨(dú)立的指令和數(shù)據(jù)總線;相對(duì)應(yīng),ARM7內(nèi)核的指令和數(shù)據(jù)總線復(fù)用的馮諾依曼架構(gòu)。
2)ARM9的5級(jí)流水線設(shè)計(jì)把存儲(chǔ)器訪問和寄存器寫回放在不同的流水上面。
兩者結(jié)合,使得在指令流的執(zhí)行過程中每個(gè)CPU時(shí)鐘周期都可以完成一個(gè)Load或Store指令。
下面的表格比較了ARM7和ARM9處理器之間的Load -Store指令。

從中可以看出所有的Store指令A(yù)RM9比ARM7省1個(gè)周期,Load指令可以省2個(gè)周期(在沒有互鎖的情況下,編譯工具能夠通過 編譯優(yōu)化消除大多數(shù)的互鎖可能)。
綜合各種因素,ARM9E處理器擁有非常強(qiáng)大的性能。但是在實(shí)際的系統(tǒng)設(shè)計(jì)中,設(shè)計(jì)人員并不總是把處理器性能開到最大,理想情況是把處理器和系統(tǒng)運(yùn)行頻率降低,使得性能剛好能滿足應(yīng)用需求; 達(dá)到節(jié)省功耗和成本的目的。
在評(píng)估系統(tǒng)能夠提供的處理器能力過程中,DMIPS指標(biāo)被很多人采用; 同時(shí)它也被廣泛應(yīng)用于不同處理器間的性能比較。
但是用DMIPS來衡量處理器性能存在很大的缺陷。 DMIPS并非字面上每秒百萬條指令的意思,它是一個(gè)測(cè)量CPU運(yùn)行一個(gè)叫Dhrystone的測(cè)試程序時(shí)表現(xiàn)出來的相對(duì)性能高低的一個(gè)單位(很多場(chǎng)合人們也習(xí)慣用MIPS作為這個(gè)性能指標(biāo)的單位)。因?yàn)榛诔绦虻臏y(cè)試容易受到惡意優(yōu)化的干擾,并且DMIPS指標(biāo)值的發(fā)布不受任何機(jī)構(gòu)的監(jiān)督,所以使用DMIPS進(jìn)行評(píng)估時(shí)要慎重。
例如對(duì)Dhrystone測(cè)試程序進(jìn)行不同的編譯處理,在同一個(gè)處理器上運(yùn)行也可以得出差別很大的結(jié)果。

DMIPS另外一個(gè)缺點(diǎn)是不能測(cè)量處理器的數(shù)字信號(hào)處理能力和Cache/MMU子系統(tǒng)的性能。因?yàn)镈hrystone測(cè)試程序不包含DSP表達(dá)式,只包含一些整型運(yùn)算和字符串處理,并且測(cè)試程序偏小,幾乎可以完整地放在Cache里面運(yùn)行而無需與外部存儲(chǔ)器進(jìn)行交互。這樣就難以反映處理器在一個(gè)真實(shí)系統(tǒng)中的真正性 能。
一種值得鼓勵(lì)的評(píng)估方法是站在系統(tǒng)的角度看問題,而不僅僅拘泥于CPU本身;而系統(tǒng)性能評(píng)估最好的測(cè)試向量就是用戶應(yīng)用程序或相近的測(cè)試程序,這是用戶所需的最真實(shí)的結(jié)果。
7
ARM9E處理器的DSP運(yùn)算能力
伴隨應(yīng)用程序的多樣化和復(fù)雜化,諸如多媒體、音視頻功能在嵌入式系統(tǒng)里面也是全面開花。這些應(yīng)用需要相當(dāng)?shù)腄SP處理能力;如果是在傳統(tǒng)的RISC架構(gòu)上實(shí) 現(xiàn)這些算法,所需的資源(頻率和存儲(chǔ)器等)會(huì)非常不經(jīng)濟(jì)。
ARM9E處理器一個(gè)非常重要的優(yōu)勢(shì)就是擁有輕量級(jí)的DSP處理能力,以非常小的成本(CPU增 加功能需要增加硬件)換來了非常實(shí)用的DSP性能。
因?yàn)镃PU的DSP能力并不直接反映在像DMIPS這樣的評(píng)測(cè)指標(biāo)中,同時(shí)像以前的ARM7處理器中也沒有類似的概念;所以這一點(diǎn)對(duì)所有使用ARM9E處理器進(jìn)行開發(fā)的人來說,都是需要注意的一個(gè)要點(diǎn)。
ARM9E的DSP擴(kuò)展指令,主要包括三個(gè)類型:
1)單周期的16x16和32x16 MAC操作,因?yàn)閿?shù)字信號(hào)處理中甚少32位寬的操作數(shù),在32位寄存器中可以對(duì)操作數(shù)分段運(yùn)算顯得非常有用。
2)對(duì)原有的算術(shù)運(yùn)算指令增加了飽和處理擴(kuò)展,所謂飽和運(yùn)算,就是當(dāng)運(yùn)算結(jié)果大于一個(gè)上限或小于一個(gè)下限時(shí),結(jié)果就等于上限或是下限;
飽和處理在音頻數(shù)據(jù)和視頻像素處理中普遍使用,現(xiàn)在一條單周期飽和運(yùn)算指令就能夠完成普通RISC指令“運(yùn)算-判斷-取值”這一系列操作。
3)前導(dǎo)零(CLZ)運(yùn)算指令,提高了歸一化和浮點(diǎn)運(yùn)算以及除法操作的性能。
以流行的MP3解碼程序?yàn)槔?。整個(gè)解碼過程中前端的三個(gè)步驟是運(yùn)算量最大的,包括比特流的讀入(解包)、霍夫曼譯碼還有反量化采樣(逆變換)。
ARM9E的 DSP指令正好可以高效地完成這些運(yùn)算。以44.1 KHz@128 kbps碼率的MP3音樂文件為例,ARM7TDMI需要占用20MHz以上的資源,
而ARM926EJ則只要小于10MHz的資源在從ARM7到ARM9的平臺(tái)轉(zhuǎn)變過程中,有一件事情是非常值得慶幸的,即ARM9E能夠完全地向后兼容ARM7上的軟件;并且開發(fā)人員面對(duì)的編程模型和架構(gòu)基礎(chǔ)也保持一致。
但是畢竟ARM9E中增加了很多新的特性,為了充分利用這些新的資源,把系統(tǒng)性能優(yōu)化好,需要我們對(duì)ARM9E做更多深入地了解。
---end--


6月中旬來了,有同學(xué)詢問我們的淘寶店鋪是否搞降價(jià)活動(dòng),這里統(tǒng)一回復(fù):產(chǎn)品定價(jià)已經(jīng)很親民,我們不打價(jià)格戰(zhàn),和往年一樣,不參加618大促,目前只有現(xiàn)金獎(jiǎng)勵(lì)活動(dòng)(點(diǎn)擊下面標(biāo)題了解詳情):
【有獎(jiǎng)活動(dòng)】完成課后作業(yè):裸機(jī)測(cè)試界面, 贏取獎(jiǎng)金2000元人民幣,
按要求完成最高可獲得2000元現(xiàn)金獎(jiǎng)勵(lì)~,適合時(shí)間充裕還可以賺外快補(bǔ)貼生活費(fèi)的在校生,何樂而不為?
41人加群,據(jù)小編了解目前已有好幾個(gè)人正在寫代碼...你還在等什么?
免責(zé)聲明:本文系網(wǎng)絡(luò)轉(zhuǎn)載,有改動(dòng),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)與我們聯(lián)系,我們將根據(jù)您提供的版權(quán)證明材料確認(rèn)版權(quán)并支付稿酬或者刪除內(nèi)容。