當前位置:首頁 » 編程軟體 » arm9編譯器

arm9編譯器

發布時間: 2022-08-12 12:42:37

A. ARM9的指令

⒈loads 指令與n stores指令
指令周期數的改進最明顯的是loads指令和stores指令。從ARM7到ARM9這兩條指令的執行時間減少了30%。指令周期的減少是由於ARM7和ARM9兩種處理器內的兩個基本的微處理結構不同所造成的。
⑴ARM9有獨立的指令和數據存儲器介面,允許處理器同時進行取指和讀寫數據。這叫作改進型哈佛結構。而ARM7隻有數據存儲器介面,它同時用來取指令和數據訪問
⑵5級流水線引入了獨立的存儲器和寫迴流水線,分別用來訪問存儲器和將結果寫回寄存器。
以上兩點實現了一個周期完成loads指令和stores指令。
⒉互鎖(interlocks)技術
當指令需要的數據因為以前的指令沒有執行完而沒有準備好就會產生管道互鎖。當管道互鎖發生時,硬體會停止這個指令的執行,直到數據准備好為止。雖然這種技術會增加代碼執行時間,但是為初期的設計者提供了巨大的方便。編譯器以及匯編程序員可以通過重新設計代碼的順序或者其他方法來減少管道互鎖的數量。
⒊分枝指令
ARM9和ARM7的分枝指令周期是相同的。而且ARM9TDMI和ARM9E-S並沒有對分枝指令進行預測處理。

B. 在飛思卡爾ARM9開發板上交叉編譯運行了一個helloworld都報segmentation fault

段錯誤一般是指針訪問越界造成的,如:intbuf[10];for(inti=0;;i++){if(*buf[i]==100)printf()..}和交叉編譯沒有關系,你檢查一下你的代碼吧。

C. ARM9和ARM11用的交叉編譯器是否一樣

不一樣,ARM9是4.3.2 ARM11是4.4.3

D. ARM7,ARM9和ARM11的區別 ARM處理器解析

ARM7、ARM9和ARM11的區別 ARM處理器解析

ARM7是馮諾依慢結構,三級流水線結構
ARM9、ARM11是哈佛結構,5級流水線結構,所以性能要高一點。
ARM9和ARM11大多帶內存管理器,跑操作系統好一點,ARM7適合裸奔。

我們慣稱的 ARM9系列中又存在ARM9與ARM9E兩個系列,其中ARM9 屬於ARM v4T架構,典型處理器如ARM9TDMI和ARM922T;而ARM9E屬於ARM v5TE架構,典型處理器如ARM926EJ和ARM946E。因為後者的晶元數量和應用更為廣泛,所以我們提到ARM9的時候更多地是特指ARM9E系 列處理器(主要就是ARM926EJ和ARM946E這兩款處理器)。下面關於ARM9的介紹也是更多地集中於ARM9E。

ARM7處理器和ARM9E處理器的流水線差別

對嵌入式系統設計者來說,硬體通常是第一考慮的因素。針對處理器來說,流水線則是硬體差別的最明顯標志,不同的流水線設計會產生一系列硬體差異。讓我們來比較一下ARM7和ARM9E的流水線,

ARM9E從ARM7的3級流水線增加到了5級,ARM9E的流水線中容納了更多的邏輯操作,但是每一級的邏輯操作卻變得更為簡單。比如原來 ARM7的第三級流水,需要先內部讀取寄存器、然後進行相關的邏輯和算術運算,接著處理結果回寫,完成的動作非常復雜;而在ARM9E的5級流水中,寄存 器讀取、邏輯運算、結果回寫分散在不同的流水當中,使得每一級流水處理的動作非常簡潔。這就使得處理器的主頻可以大幅度地提高。因為每一級流水都對應 CPU的一個時鍾周期,如果一級流水中的邏輯過於復雜,使得執行時間居高不下,必然導致所需的時鍾周期變長,造成CPU的主頻不能提升。所以流水線的拉 長,有利於CPU主頻的提高。在常用的晶元生產工藝下,ARM7一般運行在100MHz左右,而ARM9E則至少在200MHz以上。

ARM9E處理器的存儲器子系統

像ARM926EJ 和ARM946E這兩個最常見的ARM9E處理器中,都帶有一套存儲器子系統,以提高系統性能和支持大型操作系統。如圖2所示,一個存儲器子系統包含一個 MMU(存儲器管理單元)或MPU(存儲器保護單元)、高速緩存(Cache)和寫緩沖(Write Buffer);CPU通過該子系統與系統存儲器系統相連。

高速緩存和寫緩存 的引入是基於如下事實,即處理器速度遠遠高於存儲器訪問速度;如果存儲器訪問成為系統性能的瓶頸,則處理器再快也是浪費,因為處理器需要耗費大量的時間在 等待存儲器上面。高速緩存正是用來解決這個問題,它可以存儲最近常用的代碼和數據,以最快的速度提供給CPU處理(CPU訪問Cache不需要等待)。

復雜處理器內部的存儲器子系統。

MMU則是用來支持存儲器管理的硬體單元,滿足現代平台操作系統內存管理的需要;它主要包括兩個功能:一是支持虛擬/物理地址映射,二是提供不同存儲器地址空間的保護機制。一個簡單的例子可以幫助我們理解MMU的功能,

在一個操作系統下,程序開發人員都是在操作系統給定的API和編程模型下開發程序;操作系統通常只開放一個確定的存儲器地址空間給用戶。這樣就帶來 一個直接的問題,所有的應用程序都使用了相同的存儲器地址空間,如果這些程序同時啟動的話(在現在的多任務系統中這是非常常見的),就會產生存儲器訪問沖 突。那操作系統是如何來避免這個問題的呢?

操作系統會利用MMU硬體單元完成 存儲器訪問虛擬地址到物理地址的轉換。所謂虛擬地址就是程序員在程序中使用的邏輯地址,而物理地址則是真實存儲器單元的空間地址。MMU通過一定的規則, 可以把相同的虛擬地址映射到不同的物理地址上去。這樣,即使有多個使用相同虛擬地址的程序進程啟動,也可以通過MMU調度把它們映射到不同的物理地址上 去,不會造成系統錯誤。

MMU的功能和作用。

MMU 處理地址映射功能之外,還能給不同的地址空間設置不同的訪問屬性。比如操作系統把自己的內核程序地址空間設置為用戶模式下不可訪問,這樣的話用戶應用程序 就無法訪問到該空間,從而保證操作系統內核的安全性。MPU與MMU的區別在於它只有給地址空間設置訪問屬性的功能而沒有地址映射功能。

Cache以及MMU等硬體單元的引入,給系統程序員的編程模型帶來了許多全新的變化。除了需要掌握基本的概念和使用方法之外,下面幾個針對系統優化的點既有趣又重要:

1、系統實時性考慮

因 為保存地址映射規則的頁表(Page Table)非常龐大,通常MMU中只是存儲器了常用的一小段頁表內容,大部分頁表內容都存儲於主存儲器裡面;當調用新的地址映射規則時,MMU可能需要 讀取主存儲器來更新頁表。這在某些情況下會造成系統實時性的丟失。比如當需要執行一段關鍵的程序代碼時,如果不巧這段代碼使用的地址空間不在當前MMU的 頁表處理范圍裡面,則MMU首先需要更新頁表,然後完成地址映射,接著才能相應存儲器訪問;整個地址解碼過程非常長,給實時性帶來非常大的不利影響。所以 一般來說帶MMU和Cache的系統在實時性上不如一些簡單的處理器;不過也有一些辦法能夠幫助提高這些系統的實時效率。

一 個簡單的辦法是在需要的時候關閉MMU和Cache,這樣就變成一個簡單處理器了,可以馬上提高系統實時性。當然很多情況下這不可行;在ARM的MMU和 Cache設計中,有一個鎖定的功能,就是說你可以指定某一塊頁表在MMU中不會被更新掉,某一段代碼或數據可以在Cache中鎖定而不會被刷新掉;程序 員可以利用這個功能來支持那些實時性要求最高的代碼,保證這些代碼始終能夠得到最快的響應和支持。

2、系統軟體優化

在 嵌入式系統開發中,很多系統軟體優化的方法都是相同和通用的,多數情況下這種規則也適用於ARM9E架構上。如果你已經是一個ARM7的編程高手,那麼恭 喜你,以前你掌握的優化方法完全可以用在新的ARM9E平台上,但是會有一些新的特性需要你加倍注意。最重要的便是Cache的作用,Cache本身並不 帶來編程模型和介面的變化,但是如果我們考察Cache的行為,就能夠發現對於軟體優化,Cache是有比較大的影響的。

Cache 在物理上就是一塊高速SRAM,ARM9E的Cache組織寬度(cache line)都是4個word(也就是32個位元組);Cache的行為受系統控制器控制而不是程序員,系統控制器會把最近訪問存儲器地址附近的內容復制到 Cache中去,這樣,當CPU訪問下一個存儲器單元的時候(這個訪問既可能是取指,也可能是數據),可能這個存儲器單元的內容已經在Cache里了,所 以CPU不需要真的到主存儲器上去讀取內容,而直接讀取Cache高速緩存上面的內容就可以了,從而加快了訪問的速度。從Cache的工作原理我們可以看 到,其實Cache的調度是基於概率的,CPU要訪問的數據既可能在Cache中已經存在(Cache hit),也可能沒有存在(Cache miss)。在Cache miss的情況下,CPU訪問存儲器的速度會比沒有Cache的情況更壞,因為CPU除了要從存儲器訪問數據以外,還需要處理Cache hit或miss的判斷,以及Cache內容的刷新等動作。只有當Cache hit帶來的好處超過Cache miss帶來的犧牲的時候,系統的整體性能才能得到提高,所以Cache的命中率成為一個非常重要的優化指標。

根 據Cache行為的特點,我們可以直觀地得到提高Cache命中率的一些方法,如盡可能把功能相關的代碼和數據放置在一起,減少跳轉次數;跳轉經常會引起 Cache miss。保持合適的函數大小,不要書寫太多過小的函數體,因為線性的程序執行流程是最為Cache友好的。循環體最好放置在4個word對齊的地址,這 樣就能保證循環體在Cache中是行對齊的,並且佔用最少的Cache行數,使得被多次調用的循環體得到更好的執行效率。

性能和效率的提升

前 面介紹了ARM9E相比於ARM7性能上的提高,這不僅表現在ARM9E有更快的主頻、更多的硬體特性上面,還體現在某些指令的執行效率上面。執行效率我 們可以用CPU的時鍾周期數(Cycle)來衡量;運行同一段程序,ARM9E的處理器可以比ARM7節省大約30%左右的時鍾周期。

效 率的提高主要來自於ARM9E對於Load-Store指令執行效率的增強。我們知道在RISC架構的處理器中,程序中大約有30%的指令是Load- Store指令,這些指令的效率對系統效率的貢獻是最明顯的。ARM9E中有兩個因素幫助提高Load-Store指令的效率:

1)ARM9內核是哈佛架構,擁有獨立的指令和數據匯流排;相對應,ARM7內核是指令和數據匯流排復用的馮?諾依曼架構。

2)ARM9的5級流水線設計把存儲器訪問和寄存器寫回放在不同的流水上面。

兩 者結合,使得在指令流的執行過程中每個CPU時鍾周期都可以完成一個Load或Store指令。下面的表格比較了ARM7和ARM9處理器之間的Load -Store指令。從中可以看出所有的Store指令ARM9比ARM7省1個周期,Load指令可以省2個周期(在沒有互鎖的情況下,編譯工具能夠通過 編譯優化消除大多數的互鎖可能)。

綜合各種因素,ARM9E處理器擁有非常強大的性能。但是在實際的系統設計中,設計人員並不總是把處理器性能開到最大,理想情況是把處理器和系統運行頻率降 低,使得性能剛好能滿足應用需求;達到節省功耗和成本的目的。在評估系統能夠提供的處理器能力過程中,DMIPS指標被很多人採用;同時它也被廣泛應用於 不同處理器間的性能比較。

但是用DMIPS來衡量處理器性能存在很大的缺陷。 DMIPS並非字面上每秒百萬條指令的意思,它是一個測量 CPU運行一個叫Dhrystone的測試程序時表現出來的相對性能高低的一個單位(很多場合人們也習慣用MIPS作為這個性能指標的單位)。因為基於程 序的測試容易受到惡意優化的干擾,並且DMIPS指標值的發布不受任何機構的監督,所以使用DMIPS進行評估時要慎重。例如對Dhrystone測試程 序進行不同的編譯處理,在同一個處理器上運行也可以得出差別很大的結果,如圖4中是ARM926EJ在32位0等待存儲器上運行測試程序的結果。ARM一 直採用比較保守的值作為CPU的DMIPS標稱值,如ARM926EJ是1.1DMPS/MHz。

圖4:不同測試條件下ARM926EJ處理器的DMIPS值。

DMIPS 另外一個缺點是不能測量處理器的數字信號處理能力和Cache/MMU子系統的性能。因為Dhrystone測試程序不包含DSP表達式,只包含一些整型 運算和字元串處理,並且測試程序偏小,幾乎可以完整地放在Cache裡面運行而無需與外部存儲器進行交互。這樣就難以反映處理器在一個真實系統中的真正性 能。

一種值得鼓勵的評估方法是站在系統的角度看問題,而不僅僅拘泥於CPU本身;而系統性能評估最好的測試向量就是用戶應用程序或相近的測試程序,這是用戶所需的最真實的結果。

ARM9E處理器的DSP運算能力

伴 隨應用程序的多樣化和復雜化,諸如多媒體、音視頻功能在嵌入式系統裡面也是全面開花。這些應用需要相當的DSP處理能力;如果是在傳統的RISC架構上實 現這些演算法,所需的資源(頻率和存儲器等)會非常不經濟。ARM9E處理器一個非常重要的優勢就是擁有輕量級的DSP處理能力,以非常小的成本(CPU增 加功能需要增加硬體)換來了非常實用的DSP性能。

因為CPU的DSP能力並不直接反映在像DMIPS這樣的評測指標中,同時像以前的ARM7處理器中也沒有類似的概念;所以這一點對所有使用ARM9E處理器進行開發的人來說,都是需要注意的一個要點。

ARM9E的DSP擴展指令如表2所示,主要包括三個類型。

1)單周期的16x16和32x16 MAC操作,因為數字信號處理中甚少32位寬的操作數,在32位寄存器中可以對操作數分段運算顯得非常有用。

2)對原有的算術運算指令增加了飽和處理擴展,所謂飽和運算,就是當運算結果大於一個上限或小於一個下限時,結果就等於上限或是下限;飽和處理在音頻數據和視頻像素處理中普遍使用,現在一條單周期飽和運算指令就能夠完成普通RISC指令「運算-判斷-取值」這一系列操作。

3)前導零(CLZ)運算指令,提高了歸一化和浮點運算以及除法操作的性能。

以 流行的MP3解碼程序為例。整個解碼過程中前端的三個步驟是運算量最大的,包括比特流的讀入(解包)、霍夫曼解碼還有反量化采樣(逆變換)。ARM9E的 DSP指令正好可以高效地完成這些運算。以44.1 KHz@128 kbps碼率的MP3音樂文件為例,ARM7TDMI需要佔用20MHz以上的資源,而ARM926EJ則只要小於10MHz的資源

在 從ARM7到ARM9的平台轉變過程中,有一件事情是非常值得慶幸的,即ARM9E能夠完全地向後兼容ARM7上的軟體;並且開發人員面對的編程模型和架 構基礎也保持一致。但是畢竟ARM9E中增加了很多新的特性,為了充分利用這些新的資源,把系統性能優化好,需要我們對ARM9E做更多深入地了解。

E. 初學者想學ARM嵌入式,應該選ARM9還是ARM11開發板

對於ARM嵌入式的初學者,建議用ARM9開發板。
首先,從功能上來說,ARM11要比ARM9強一些,但是性能優異並不代表適合初學者。對於初學者來說ARM11的有些功能是冗餘。
其次,學習ARM9或者ARM11就在所難免學習其所支持的操作系統linux(ARM11可以支持Android)。目前,市面上ARM9的開發版的價格要比ARM11低很多,而兩者都可以運行Linux操作系統。並且ARM9開發板的資料和教學視頻也更多一些。jz2440+韋東山系列教學視頻,mini2440+國嵌視頻都是不錯的選擇。
最後,學習ARM9,可以按Linux應用開發、驅動開發順序學習。如果想學習Android系統開發,可以學完ARM9再學習ARM11開發板下的安卓系統開發。因為安卓系統就是Linux內核+libc庫用Java封裝而成。

F. ARM7,ARM9,ARM11等有啥區別

簡單點:
arm7沒有保護模式需要MMU單元,功能上來說一般用作實時控制系統。
arm9以上都有MMU單元,功能比arm7有很大提高,採用了偽哈弗結構,指令處理速度快很多。由於有MMU,所以arm9以上就可以運行嵌入式linux和wince等操作系統。
學嵌入式,要學的東西多了,如果你一點單片機和操作系統的概念也沒有,就先惡補這兩個內容先吧。
linux只是一個開源的unix操作系統,與windows不同之處,是開源,誰都可以獲得源代碼,但是免費的東西總是沒那麼好使,所以才有windows的市場,windows功能以及平台支持軟體比linux多多了,但是由於linux是開源的,因此容易被人們修改適合自己特定的需要,因此linux首先就成了嵌入式系統的首選。
arm是一種處理器體系,與語言無關,你用匯編、C、C++都可以開發程序,只要你能找到這樣的編譯器,目前通常是用C語言開發,因為這樣的編譯器多而且好用。而有些直接與硬體交互的編程匯編更加好使。
你一點概念都沒有,還是先學學基本的吧,嵌入式涉及的面太大了,估計需要幾年才能有個概念。

G. 誰用過ARM9裸奔能告訴小弟一下用啥編譯器嗎

有四種類型的Visual FoxPro
主要指標:

組成的主索引鍵欄位或表達式,表中的所有記錄,不能有重復的值。只適用於主索引復合索引資料庫表的結構。空閑列表不能建立主索引;資料庫中的每個表可以建立和只有一個主索引。

候選索引:

在不允許指定段或表達式關鍵字索引的重復值。資料庫中的表和免費表為每個表可以創建多個候選索引。

一般指數:

還可以確定記錄的處理順序,但是允許現場重復的值。在表中,可以添加多個普通索引。

唯一索引:鍵欄位或表達式

參與指數表中可以有

H. ARM9為什麼要用ADS編譯器呢

網上有人做過測試,同樣的代碼,在ADS、IAR和KEIL中進行編譯,keil的效率最好。此外,由於ARM將keil收購,keil的應用更為廣泛,推薦使用Keil,尤其是以前做過C51的,更容易上手。

I. ARM7, ARM9分別是什麼體系結構

ARM9系列處理器是英國ARM公司設計的主流嵌入式處理器,主要包括ARM9TDMI和ARM9E-S等系列。本文主要介紹它們與ARM7TDMI的結構以及性能比較。
以手機應用為例,2G手機只需提供語音及簡單的文字簡訊功能,而目前的2.5G和未來的3G手機除了提供這兩項功能外,還必須提供各種其他的應用功能。主要包括:(1)無線網路設備:手機上網、電子郵件及其他定位服務等功能;(2)PDA功能:含有用戶操作系統(Windows CE、Symbian OS、Linux等)及其他功能;(3)高性能功能:音頻播放器、視頻電話、手機游戲等。在2.5G和3G的應用中ARM9已經全面替代了ARM7。因為ARM9的新特性能夠滿足各種新需求的同時減少產品研發時間並降低研發費用。
新一代的ARM9處理器,通過全新的設計,採用了更多的晶體管,能夠達到兩倍以上於ARM7處理器的處理能力。這種處理能力的提高是通過增加時鍾頻率和減少指令執行周期實現的。
1 時鍾頻率的提高
ARM7處理器採用3級流水線,而ARM9採用5級流水線,如圖1、2、3所示。增加的流水線設計提高了時鍾頻率和並行處理能力。5級流水線能夠將每一個指令處理分配到5個時鍾周期內,在每一個時鍾周期內同時有5個指令在執行。在同樣的加工工藝下,ARM9TDMI處理器的時鍾頻率是ARM7TDMI的1.8~2.2倍。

2 指令周期的改進
指令周期的改進對於處理器性能的提高有很大的幫助。性能提高的幅度依賴於代碼執行時指令的重疊,這實際上是程序本身的問題。對於採用最高級的語言,一般來說,性能的提高在30%左右。
2.1 loads 指令矛n stores指令
指令周期數的改進最明顯的是loads指令和stores指令。從ARM7到ARM9這兩條指令的執行時間減少了30%。指令周期的減少是由於ARM7和ARM9兩種處理器內的兩個基本的微處理結構不同所造成的。
(1)ARM9有獨立的指令和數據存儲器介面,允許處理器同時進行取指和讀寫數據。這叫作改進型哈佛結構。而ARM7隻有數據存儲器介面,它同時用來取指令和數據訪問。
(2)5級流水線引入了獨立的存儲器和寫迴流水線,分別用來訪問存儲器和將結果寫回寄存器。
以上兩點實現了一個周期完成loads指令和stores指令。
2.2 互鎖(interlocks)技術
當指令需要的數據因為以前的指令沒有執行完而沒有準備好就會產生管道互鎖。當管道互鎖發生時,硬體會停止這個指令的執行,直到數據准備好為止。雖然這種技術會增加代碼執行時間,但是為初期的設計者提供了巨大的方便。編譯器以及匯編程序員可以通過重新設計代碼的順序或者其他方法來減少管道互鎖的數量。
2.3 分枝指令
ARM9和ARM7的分枝指令周期是相同的。而且ARM9TDMI和ARM9E-S並沒有對分枝指令進行預測處理。

3 ARM9結構及特點
以ARM9E-S為例介紹ARM9處理器的主要結構及其特點。其主要特點如下:
(1)32bit定點RISC處理器,改進型ARM/Thumb代碼交織,增強性乘法器設計。支持實時(real-time)調試;
(2)片內指令和數據SRAM,而且指令和數據的存儲器容量可調;
(3)片內指令和數據高速緩沖器(cache)容量從4K位元組到1M位元組;
(4)設置保護單元(protcction unit),非常適合嵌入式應用中對存儲器進行分段和保護;
(5)採用AMBA AHB匯流排介面,為外設提供統一的地址和數據匯流排;
(6)支持外部協處理器,指令和數據匯流排有簡單的握手信令支持;
(7)支持標准基本邏輯單元掃描測試方法學,而且支持BIST(built-in-self-test);
(8)支持嵌入式跟蹤宏單元,支持實時跟蹤指令和數據。

4 ARM9的典型應用
TI公司的OMAP730是最新的無線通信基帶信號處理器。該處理器是TI的GPRS Class 12通信模塊與專用於應用處理的ARM926通用處理器(GPP)的集成。由於GPP的速度可達200MHz,因此OMAP730具有兩倍於上一代OMAP710處理器的應用處理性能。如同所有的OMAP處理器一樣,OMAP730可支持領先的移動操作系統,其中包括Microsoft的智能電話與Pocket PC PhoneEdition、Svmbian OS與Series 60、Palm OS以及Linux。
TI OMAP730結構如圖5所示。其中ARM926TEJ處理器的主要特性包括:(1)最高頻率200MHz;(2)16KB指令高速緩存,8KB數據高速緩存;(3)硬體JAVA加速;(4)擴展多媒體指令集結構。
ARM微處理器是一種高性能、低功耗的32位微處器,它被廣泛應用於嵌入式系統中。ARM9代表了ARM公司主流的處理器,已經在手持電話、機頂盒、數碼像機、GPS、個人數字助理以及網際網路設備等方面有了廣泛的應用。
http://www.avrw.com/article/art_104_1103.htm

熱點內容
舊電腦共享伺服器 發布:2024-04-27 06:32:21 瀏覽:338
java程序練習 發布:2024-04-27 06:24:00 瀏覽:438
sql30 發布:2024-04-27 06:22:10 瀏覽:55
怎樣防止sql注入 發布:2024-04-27 06:11:25 瀏覽:236
安卓為什麼不能登蘋果系統的游戲 發布:2024-04-27 06:11:23 瀏覽:600
編程日課 發布:2024-04-27 05:56:54 瀏覽:620
漏洞上傳工具 發布:2024-04-27 05:50:58 瀏覽:716
手機如何選擇存儲 發布:2024-04-27 05:40:25 瀏覽:799
機架式伺服器怎麼操作 發布:2024-04-27 05:19:02 瀏覽:815
我的世界minez網易伺服器 發布:2024-04-27 05:09:26 瀏覽:384