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