時間:2008-10-31 10:59:00來源:zhangting
1 引言
隨著嵌入式技術的發(fā)展,人們對系統(tǒng)的智能化、小型化的要求也越來越高?;赼rm結構的微處理器以其高性能、低功耗、低價格等方面的優(yōu)勢被廣泛應用于各種電子產品,特別是一些高端的嵌入式控制應用中,例如移動電話、工業(yè)控制、網絡通信等方面。arm技術具有很好的性能和功效,其合作伙伴包括許多世界頂級的半導體公司??梢哉farm技術幾乎無處不在。 tcp/ip互聯(lián)網協(xié)議族在全世界范圍內已經成為開放系統(tǒng)互聯(lián)的協(xié)議,它提供了很好的交互操作能力,可兼容多種網絡技術。嵌人式技術與tcp/ip技術的結合已經展現出強勁的發(fā)展勢頭和巨大的市場潛力。如何開發(fā)面向arm的高效代碼,尤其是提高類似于tcp/ip協(xié)議棧等基礎性的軟件模塊的執(zhí)行效率已成為每個從事基于arm的嵌入式系統(tǒng)開發(fā)人員必須思考的問題。
2 arm微處理器的應用領域極其特點
作為一種16/32位的高性能、低成本、低功耗的嵌入式risc微處理器,arm微處理器目前已經成為應用最為廣泛的嵌入式微處理器。
2.1 arm微處理器的應用領域 到目前為止,arm微處理器及技術的應用幾乎已經深入到各個領域。
(1) 工業(yè)控制領域:作為32位的risc架構,基于arm核的微控制器芯片不但占據了高端微控制器市場的大部分市場份額,同時也逐漸向低端微控制器應用領域擴展,arm微控制器的低功耗、高性價比,向傳統(tǒng)的8位/16位微控制器提出了挑戰(zhàn)。
(2) 無線通訊領域:目前已有超過85%的無線通訊設備采用了arm技術, arm以其高性能和低成本,在該領域的地位日益鞏固。
(3) 網絡應用:隨著寬帶技術的推廣,采用arm技術的adsl芯片正逐步獲得競爭優(yōu)勢。此外,arm在語音及視頻處理上進行了優(yōu)化,并獲得廣泛支持,也對dsp的應用領域提出了挑戰(zhàn)。
(4) 消費類電子產品:arm技術在目前流行的數字音頻播放器、數字機頂盒和游戲機中得到廣泛采用。
(5) 成像和安全產品:現在流行的數碼相機和打印機中絕大部分采用arm技術。手機中的32位sim智能卡也采用了arm技術。 除此以外,arm微處理器及技術還應用到許多不同的領域,并會在將來取得更加廣泛的應用。
2.2 arm微處理器的特點
(1) 采用risc架構;
(2) 體積小、低功耗、低成本、高性能;
(3) 支持thumb(16位)/arm(32位)雙指令集,能很好的兼容8位/16位器件;
(4) 大量使用寄存器,指令執(zhí)行速度更快;
(5) 大多數數據操作都在寄存器中完成;
(6) 尋址方式靈活簡單,執(zhí)行效率高;
(7) 指令長度固定。
2. 3 arm微處理器的指令結構
arm微處理器在較新的體系結構中支持兩種指令集:arm指令集和thumb指令集。其中,arm指令為32位的長度,thumb指令為16位長度。thumb指令集為arm指令集的功能子集,但與等價的arm代碼相比較,可節(jié)省30%~40%以上的存儲空間,同時具備32位代碼的所有優(yōu)點。
3 嵌入式系統(tǒng)開發(fā)設計
嵌入式開發(fā)的流程與高層開發(fā)大體類似,編碼—編譯、鏈接—運行。中間當然可以有聯(lián)機調試,重新編碼等遞歸過程。但有一些不同之處。
首先,開發(fā)平臺不同。受嵌入式平臺處理能力所限,嵌入式開發(fā)一般都采用交叉編譯環(huán)境開發(fā)。所謂交叉編譯就是在a平臺上編譯b平臺上運行的目標程序。在a平臺上運行的b平臺程序編譯器就被稱為交叉編譯器。一個初入門者,建立一套這樣的編譯環(huán)境也許就要花掉幾天的時間。
其次,調試方式不同。我們在windows或者linux上開發(fā)的程序可以馬上運行察看運行結果,也可以利用ide來調試運行過程,但是嵌入式開發(fā)者卻至少需要作一系列工作才能達到這種地步。目前最流行的是采用jtag方式連接到目標系統(tǒng)上,將編譯成功的代碼下載運行,高級的調試器幾乎可以像vc環(huán)境一樣任意的調試程序。
再者,開發(fā)者所了解層次結構不同。高層軟件開發(fā)者把工作的重點放在對應用需求的理解和實現上。嵌入式開發(fā)者對整個過程細節(jié)必須比高層開發(fā)者有更深的認識。最大不同之處在于有操作系統(tǒng)支持的程序不需要你關心程序的運行地址以及程序鏈接后各個程序塊最后的位置。像windows,linux這類需要mmu支持的操作系統(tǒng),其程序都是放置在虛擬地址空間的一個固定的內存地址。不管程序在真正ram空間的地址位置在哪里,最后都由mmu映射到虛擬地址空間的一個固定的地址。為什么程序的運行與存放的地址要相關呢?學過匯編原理,或者看過最后編譯成機器碼程序的人就知道,程序中的變量、函數最后都在機器碼中體現為地址,程序的跳轉,子程序的調用,以及變量調用最后都是cpu通過直接提取其地址來實現的。編譯時指定的text_base就是所有一切地址的參考值。如果你指定的地址與最后程序放置的地址不一致顯然不能正常運行。但也有例外,不過不尋常的用法當然要付出不尋常的努力。有兩種方法可以解決這個問題。一種方法是在程序的最起始編寫與地址無關的代碼,最后將后面的程序自搬移到你真正指定的text_base然后跳轉到你將要運行的代碼處。另一種方法是,text_ base指定為你程序的存放地址,然后將程序搬移到真正運行的地址,有一個變量將后者的地址記錄下來作為參考值,在以后的符號表地址都以此值作為參考與偏移值合成為其真正的地址。聽起來很拗口,實現起來也很難,在后面的內容中有更好的解決辦法—用一個bootloader支持。另外,一個完整的程序必然至少有三個段text(正文,也就是最后用程序編譯后的機器指令)段、bss(未初始變量)段data(初始化變量)段。前面講到的text_base只是text段的基址,對于另外的bss段和data段,如果最后的整個程序放在ram中,那么三個段可以連續(xù)放置,但是,如果程序是放置在rom或者flash這種只讀存儲器中,那么你還需要指定你的其他段的地址,因為代碼在運行中是不改變的,而后兩者卻不同。這些工作都是在鏈接的時候完成,編譯器必然為你提供了一些手段讓你完成這些工作。還是那句話,有操作系統(tǒng)支持的編程屏蔽了這些細節(jié),讓你完全不用考慮這些頭痛的問題。但是嵌入式開發(fā)者沒有那么幸運,他們總是在一個冷冰冰的芯片上從頭做起。cpu上電復位總是從一個固定的地址去找程序,開始其繁忙的工作。對于我們的pc來說這個地址就是我們的bios程序,對于嵌入式系統(tǒng),一般沒有bios支持,ram不能在掉電情況下保留你的程序,所以必須將程序存放在rom或flash中,但是一般來講,這些存儲器的寬度和速度都無法與ram相提并論。程序在這些存儲器上運行會降低運行速率。大多數的方案是在此處存放一個bootloader,bootloader所完成的功能可多可少,一個基本的bootloader只完成一些系統(tǒng)初始化并將用戶程序搬移到一定地址,然后跳轉到用戶程序即交出cpu控制權,功能強大的bootload還可以支持網絡、串口下載,甚至調試功能。但不要指望有一個像pc bios那樣通用的bootloader供你使用,至少你需要作一些移植工作使其符合你的系統(tǒng),這個移植工作也是你開發(fā)的一個部分,作為嵌入式開發(fā)的入門者來講,移植或者編寫一個bootloader會使你受益匪淺。沒有bootloader 行不行?當然可以,要么你就犧牲效率直接從rom中運行,要么你就自己編寫程序搬移代碼去ram運行,最主要的是,開發(fā)過程中你要有好的調試工具支持在線調試,否則你就得在改動哪怕一個變量的情況下都要去重新燒片驗證。繼續(xù)程序入口的話題,不管過程如何,程序最后在執(zhí)行時都是變成了機器指令,一個純的執(zhí)行程序就是這些機器指令的集合。像我們在操作系統(tǒng)上的可運行程序都不是純的執(zhí)行程序,而是帶有格式的。一般除了包含上面提到的幾個段以外,還有程序的長度,校驗以及程序入口——就是從哪兒開始執(zhí)行用戶程序。為什么有了程序地址還需要有程序的入口呢?這是因為你要真正開始執(zhí)行的代碼并非一定放置在一個文件的最開始,就算放在最開始,除非你去控制鏈接,否則在多文件的情況下,編譯器也不一定將你的這段程序放置在最后程序的最頂端。像我們一般有操作系統(tǒng)支持的程序,只需在你的代碼中有一個main作為程序入口—注意這個main只是大多數編譯器約成定俗的入口,除非你利用了別人的初始化庫,否則程序入口可以自行設定—即可。顯然,帶有格式的這種執(zhí)行文件使用更加靈活,但需要bootloader的支持。有關執(zhí)行文件格式的內容可以看看elf文件格式。
4 面向arm的程序優(yōu)化在嵌入式tcp/ip協(xié)議實現中的應用
作者采用atmel公司的at91rm9200微處理器,配合以太網物理層驅動芯片(dm9161)構建面向網絡的嵌人式系統(tǒng)硬件平臺,如圖1所示。在此平臺上,實現基于arm微處理器的嵌人式tcp/ip協(xié)議處理。
圖1 基于網絡的嵌入式系統(tǒng)硬件平臺框圖
基于arm的嵌人式系統(tǒng)直接面向以太網數據,典型的以太網數據封裝格式如圖2所示。根據以上的優(yōu)化方法,在變量定義時需要考慮最佳的存儲器布局,使得各種類型的變量能以32位的空間位基準對齊,對于功能函數中參加運算的數據應盡量采用32位的數據進行處理。
圖2 典型的以太網數據封裝格式
嵌入式tcp/ip協(xié)議的實現通常采用linx中的tcp/ip網絡結構層次。tcp/ip協(xié)議實現網絡層和控制層的arp/rarp,ip,icmp,tcp,udp等協(xié)議,直接為http,smtp,ftp,telnet等這樣的應用層協(xié)議提供支持。每個系統(tǒng)都需要具體定義應用層程序和協(xié)議軟件之間的接口。協(xié)議處理的一般流程如圖3所示。協(xié)議處理過程中需要多次條件判斷,對ip地址和tcp數據的校驗和處理循環(huán)比較是無法避免的,因此可以充分利用“與0比較”的條件判斷和“減到0”的循環(huán)來優(yōu)化程序設計。
圖3 協(xié)議處理流程框圖
5 結束語
本文首先對微處理器arm的體系結構特點進行了介紹,然后對嵌入式系統(tǒng)的開發(fā)進行了討論,接著,結合tc/ip網絡的特點,對其進行了基于arm的嵌入式系統(tǒng)設計,并設計了相應的流程。實際上,在實際應用中,對arm指令的優(yōu)化也很重要,在透徹了解arm匯編指令的特性和編譯過程的基礎上,合理地使用程序優(yōu)化的原則和方法可以有效地提高編譯效率和代碼執(zhí)行效率。
標簽:
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.connectcrack.com)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯(lián)網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>顛覆傳統(tǒng)加工!維宏VHTube一鍵實現變徑...
2025-06-16
2025-06-09
2025-06-06
2025-05-19
2025-04-30
性能躍升20%!維宏NK300CX Plus數控系統(tǒng)...
2025-04-11