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