版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)的設(shè)計(jì)方法
23.1嵌入式系統(tǒng)的總體結(jié)構(gòu)在不同的應(yīng)用場(chǎng)合,嵌入式系統(tǒng)呈現(xiàn)出的外觀和形式各不相同。但通過對(duì)其內(nèi)部結(jié)構(gòu)進(jìn)行分析,可以發(fā)現(xiàn),一個(gè)嵌入式系統(tǒng)一般都由嵌入式微處理器系統(tǒng)和被控對(duì)象組成,如圖3.1所示。其中嵌入式微處理器系統(tǒng)是整個(gè)系統(tǒng)的核心,由硬件層、中間層、軟件層和功能層組成。被控對(duì)象可以是各種傳感器、電機(jī)等,可以接受嵌入式微處理器系統(tǒng)發(fā)出的控制命令,執(zhí)行所規(guī)定的操作或任務(wù)。3硬件層由嵌入式微處理器、外圍電路和外設(shè)組成。在一片嵌入式微處理器基礎(chǔ)上增加電源電路、復(fù)位電路、調(diào)試接口和存儲(chǔ)器電路,就構(gòu)成一個(gè)嵌入式核心控制模塊。其中操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。為方便使用,有的模塊在此基礎(chǔ)上增加了LCD、鍵盤、USB接口,以及其他一些功能的擴(kuò)展電路。嵌入式系統(tǒng)的硬件層是以嵌入式處理器為核心的,最初的嵌入式處理器都是為通用目的而設(shè)計(jì)的。后來隨著微電子技術(shù)的發(fā)展出現(xiàn)了ASIC(Applicationspecificintegratedcircuit,專用的集成電路),ASIC是一種為具體任務(wù)而特殊設(shè)計(jì)的專用集成電路。由于ASIC在設(shè)計(jì)過程中進(jìn)行了專門優(yōu)化,其性能、性價(jià)比都非常高。采用ASIC可以減少系統(tǒng)軟硬件設(shè)計(jì)的復(fù)雜度,降低系統(tǒng)成本。有的嵌入式微處理器利用ASIC來實(shí)現(xiàn),但ASIC的前期設(shè)計(jì)費(fèi)用非常高,而且ASIC一旦設(shè)計(jì)完成,就無法升級(jí)和擴(kuò)展,一般只有在一些產(chǎn)量非常大的產(chǎn)品設(shè)計(jì)中才考慮使用ASIC。近年來,各種PLD(ProgrammableLogicDevice,可編程邏輯器件)的出現(xiàn),改變了硬件設(shè)計(jì)方法,出現(xiàn)了“可重構(gòu)計(jì)算”的概念。通過改寫PLD,允許在不改變硬件結(jié)構(gòu)的情況下,實(shí)現(xiàn)不同的接口和功能。20世紀(jì)80年代中期以后出現(xiàn)了FPGA(Field-programmablegatearray,現(xiàn)場(chǎng)可編程門陣列)器件,這是是一種大規(guī)模可編程邏輯器件,具有保密性好、體積小、重量輕、可靠性高等一系列ASIC的優(yōu)點(diǎn)。FPGA的出現(xiàn)使得一個(gè)電子系統(tǒng)可以僅僅由三種標(biāo)準(zhǔn)模塊構(gòu)成,即微處理器、存儲(chǔ)器和可編程邏輯器件。前兩種模塊都已標(biāo)準(zhǔn)化,系統(tǒng)中大量的控制邏輯由FPGA實(shí)現(xiàn)。這使得硬件的設(shè)計(jì)更具有靈活性和擴(kuò)展性,并降低了后續(xù)產(chǎn)品開發(fā)的成本。4硬件層與軟件層之間為中間層,也稱為BSP(BoardSupportPackage,板級(jí)支持包),將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動(dòng)程序與硬件無關(guān),一般應(yīng)具有相關(guān)硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置等功能。BSP是主板硬件環(huán)境和操作系統(tǒng)的中間接口,是軟件平臺(tái)中具有硬件依賴性的那一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好地運(yùn)行于硬件主板上。純粹的BSP所包含的內(nèi)容一般說來是與系統(tǒng)有關(guān)的驅(qū)動(dòng)程序,如網(wǎng)絡(luò)驅(qū)動(dòng)程序和系統(tǒng)中的網(wǎng)絡(luò)協(xié)議有關(guān),串口驅(qū)動(dòng)程序和系統(tǒng)的下載調(diào)試有關(guān),等等。離開這些驅(qū)動(dòng)程序系統(tǒng)就不能正常工作。軟件層主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作系統(tǒng)是嵌入式應(yīng)用軟件的基礎(chǔ)和開發(fā)平臺(tái),實(shí)際上是一段程序,系統(tǒng)復(fù)位后首先執(zhí)行,相當(dāng)于用戶的主程序,用戶的其他應(yīng)用程序都建立在操作系統(tǒng)之上。操作系統(tǒng)是一個(gè)標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時(shí)器等資源都封裝起來,以方便用戶使用。操作系統(tǒng)的引入大大提高了嵌入式系統(tǒng)的功能,方便了應(yīng)用軟件的設(shè)計(jì),但同時(shí)也占用了寶貴的嵌入式系統(tǒng)資源。一般在大型的或需要多任務(wù)的應(yīng)用場(chǎng)合才考慮使用嵌入式操作系統(tǒng)。功能層由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來完成對(duì)被控對(duì)象的控制功能。功能層是面向被控對(duì)象和用戶的,為了方便用戶操作,往往需要具有友好的人機(jī)界面。對(duì)于一些復(fù)雜的系統(tǒng),在系統(tǒng)設(shè)計(jì)的初期階段就要對(duì)系統(tǒng)的需求進(jìn)行分析,確定系統(tǒng)的功能,然后將系統(tǒng)的功能映射到整個(gè)系統(tǒng)的硬件、軟件和執(zhí)行裝置的設(shè)計(jì)過程中,這個(gè)過程稱為系統(tǒng)的功能實(shí)現(xiàn)。53.2嵌入式系統(tǒng)開發(fā)過程嵌入式軟件的開發(fā)與傳統(tǒng)的軟件有許多共同點(diǎn),它繼承了許多傳統(tǒng)軟件開發(fā)的開發(fā)習(xí)慣。但由于嵌入式軟件運(yùn)行于特定的目標(biāo)環(huán)境,與傳統(tǒng)軟件的開發(fā)又有著很大的不同。3.2.1嵌入式系統(tǒng)的開發(fā)特點(diǎn)3.2.2嵌入式系統(tǒng)的開發(fā)流程3.2.3調(diào)試嵌入式系統(tǒng)6嵌入式系統(tǒng)的開發(fā)特點(diǎn)1.采用宿主機(jī)/目標(biāo)機(jī)方式嵌入式系統(tǒng)本身不具備自舉開發(fā)能力,即使設(shè)計(jì)完成以后用戶通常也是不能對(duì)其中的程序功能進(jìn)行修改的。嵌入式軟件以宿主機(jī)/目標(biāo)機(jī)模式開發(fā),所需要的開發(fā)環(huán)境稱為交叉開發(fā)環(huán)境,分為宿主機(jī)部分和目標(biāo)機(jī)部分,兩者以統(tǒng)一的通信協(xié)議進(jìn)行通信,宿主機(jī)向目標(biāo)機(jī)發(fā)送命令,目標(biāo)機(jī)接收、執(zhí)行命令并將結(jié)果返回宿主機(jī),從而實(shí)現(xiàn)兩機(jī)之間的交互控制。2.為了保證穩(wěn)定性和實(shí)時(shí)性,選用RTOS開發(fā)平臺(tái)對(duì)簡(jiǎn)單系統(tǒng)可以用傳統(tǒng)方法,從底層用匯編語言編寫程序,利用在線仿真器(ICE)、在線調(diào)試器(ICD)等開發(fā)工具進(jìn)行軟件的調(diào)試。對(duì)于那些復(fù)雜的嵌入式系統(tǒng),需要在優(yōu)化級(jí)可控的情況下預(yù)測(cè)其運(yùn)行狀態(tài),不利用實(shí)時(shí)操作系統(tǒng)和嵌入式系統(tǒng)開發(fā)平臺(tái)進(jìn)行開發(fā),是很難、甚至是不可能達(dá)到預(yù)定要求的。為了合理地調(diào)度多任務(wù)、利用系統(tǒng)資源,用戶必須選配RTOS開發(fā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開發(fā)時(shí)間,保證軟件質(zhì)量。3.生成代碼需要固態(tài)化存儲(chǔ)嵌入式應(yīng)用程序開發(fā)環(huán)境是PC機(jī),但運(yùn)行的目標(biāo)環(huán)境卻千差萬別,可以是PDA,也可以是儀器設(shè)備。而且應(yīng)用軟件在目標(biāo)環(huán)境下必須存儲(chǔ)在非易失性存儲(chǔ)器中,保證系統(tǒng)在掉電重啟后仍能正常使用。所以,應(yīng)用軟件在開發(fā)完成以后,應(yīng)生成固化版本,都固化在單片機(jī)本身或燒寫到目標(biāo)環(huán)境的Flash中運(yùn)行。4.軟件代碼具有高質(zhì)量、高可靠性7嵌入式系統(tǒng)的開發(fā)流程嵌入式系統(tǒng)的應(yīng)用開發(fā)是按照如圖3.2所示的流程進(jìn)行的,一般由5個(gè)階段構(gòu)成:需求分析、體系結(jié)構(gòu)設(shè)計(jì)、硬件/軟件設(shè)計(jì)、系統(tǒng)集成和代碼固化。各個(gè)階段之間往往要求不斷地反復(fù)和修改,直到完成最終完成設(shè)計(jì)目標(biāo)。81.需求分析階段在需求分析階段需要分析系統(tǒng)的需求,系統(tǒng)的需求一般分功能需求和非功能需求兩方面。根據(jù)系統(tǒng)的需求,確定設(shè)計(jì)任務(wù)和設(shè)計(jì)目標(biāo),并提煉出設(shè)計(jì)規(guī)格說明書,作為正式指導(dǎo)設(shè)計(jì)和驗(yàn)收的標(biāo)準(zhǔn)。2.體系結(jié)構(gòu)設(shè)計(jì)需求分析完成后,根據(jù)提煉出的設(shè)計(jì)規(guī)格說明書,進(jìn)行體系結(jié)構(gòu)的設(shè)計(jì)。系統(tǒng)的體系結(jié)構(gòu)描述了系統(tǒng)如何實(shí)現(xiàn)所述的功能和非功能需求,包括對(duì)硬件、軟件的功能劃分,以及系統(tǒng)的軟件、硬件和操作系統(tǒng)的選型等。3.硬件/軟件設(shè)計(jì)基于體系結(jié)構(gòu),對(duì)系統(tǒng)的軟、硬件進(jìn)行詳細(xì)設(shè)計(jì)。對(duì)于一個(gè)完整的嵌入式應(yīng)用系統(tǒng)的開發(fā),應(yīng)用系統(tǒng)的程序設(shè)計(jì)是嵌入式系統(tǒng)設(shè)計(jì)一個(gè)非常重要的方面,程序的質(zhì)量直接影響整個(gè)系統(tǒng)功能的實(shí)現(xiàn),好的程序設(shè)計(jì)可以克服系統(tǒng)硬件設(shè)計(jì)的不足,提高應(yīng)用系統(tǒng)的性能,反之,會(huì)使整個(gè)應(yīng)用系統(tǒng)無法正常工作。4.系統(tǒng)集成把系統(tǒng)中的軟件、硬件集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)單元設(shè)計(jì)過程中的錯(cuò)誤。5.代碼固化嵌入式軟件開發(fā)完成以后,大多數(shù)要在目標(biāo)環(huán)境的非易失性存儲(chǔ)器中運(yùn)行,程序?qū)懭氲紽lash中固化,保證每次運(yùn)行后下一次運(yùn)行無誤,所以嵌入式軟件開發(fā)與普通軟件開發(fā)相比,增加了固化階段。9調(diào)試嵌入式系統(tǒng)調(diào)試是任何項(xiàng)目開發(fā)過程中必不可少的一部分,特別是在軟硬件結(jié)合非常緊密的嵌入式系統(tǒng)開發(fā)中。一般來說,大多數(shù)的調(diào)試工作是在RAM中進(jìn)行的,只有當(dāng)程序完成并能運(yùn)行后才切換到ROM上。嵌入式系統(tǒng)的調(diào)試有多種方法,可分為模擬器方式、ICE(In-CircuitEmulator,在線仿真器)方式、ICD(In-CircuitDebugger,在線調(diào)試器)方式和監(jiān)控器方式。1.模擬器方式調(diào)試工具和待調(diào)試的嵌入式軟件都在主機(jī)上運(yùn)行,通過軟件手段模擬執(zhí)行為某種嵌入式處理器編寫的源程序。簡(jiǎn)單的模擬器可以通過指令解釋方式逐條執(zhí)行源程序,分配虛擬存儲(chǔ)空間和外設(shè),進(jìn)行語法和邏輯上的調(diào)試。2.在線仿真器方式在線仿真器ICE是一種完全仿造調(diào)試目標(biāo)CPU設(shè)計(jì)的儀器,目標(biāo)系統(tǒng)對(duì)用戶來說是完全透明的、可控的。仿真器與目標(biāo)板通過仿真頭連接,與主機(jī)有串口、并口、以太網(wǎng)口或USB口等連接方式。該仿真器可以真正地運(yùn)行所有的CPU動(dòng)作,并且可以在其使用的內(nèi)存中設(shè)置非常多的硬件中斷點(diǎn),可以實(shí)時(shí)查看所有需要的數(shù)據(jù),從而給調(diào)試過程帶來很多便利。由于仿真器自成體系,調(diào)試時(shí)可以連接目標(biāo)板,也可以不接目標(biāo)板。使用ICE同使用一般的目標(biāo)硬件一樣,只是在ICE上完成調(diào)試后,需要把調(diào)試好的程序重新下載到目標(biāo)系統(tǒng)上而已。由于ICE價(jià)格昂貴,而且每種CPU都需要一種與之對(duì)應(yīng)的ICE,使得開發(fā)成本非常高。10。3.監(jiān)控器方式主機(jī)和目標(biāo)板通過某種接口(通常是串口)連接,主機(jī)上提供調(diào)試界面,被調(diào)試程序下載到目標(biāo)板上運(yùn)行監(jiān)控程序是一段運(yùn)行于目標(biāo)機(jī)上的可執(zhí)行程序,主要負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行情況,與宿主機(jī)端的調(diào)試器一起完成對(duì)應(yīng)用程序的調(diào)試。監(jiān)控程序包含基本功能的啟動(dòng)代碼,并完成必要的硬件初始化,等待宿主機(jī)的命令。被調(diào)試程序通過監(jiān)控程序下載到目標(biāo)機(jī),就可以開始進(jìn)行調(diào)試。監(jiān)控器方式操作簡(jiǎn)單易行,功能強(qiáng)大,不需要專門的調(diào)試硬件,適用面廣,能提高調(diào)試的效率,縮短產(chǎn)品的開發(fā)周期,降低開發(fā)成本。正因?yàn)橐陨显颍O(jiān)控器方式才能夠廣泛應(yīng)用于嵌入式系統(tǒng)的開發(fā)之中。監(jiān)控器調(diào)試主要用于調(diào)試運(yùn)行在目標(biāo)機(jī)操作系統(tǒng)上的應(yīng)用程序,不適宜用來調(diào)試目標(biāo)操作系統(tǒng)。有的微處理器需要在目標(biāo)板工作正常的前提下,事先燒制監(jiān)控程序,而且功能有限,特別是硬件調(diào)試能力較差。4.在線調(diào)試器方式使用ICD和目標(biāo)板的調(diào)試端口連接,發(fā)送調(diào)試命令和接收調(diào)試信息,可以完成必要的調(diào)試功能。一般情況下,在ARM芯片的開發(fā)板上采用JTAG邊界掃描口進(jìn)行調(diào)試。摩托羅拉公司采用專用的BDM調(diào)試接口。使用合適的開發(fā)工具可以利用這些接口。例如,ARM開發(fā)板,可以將JTAG調(diào)試器接在開發(fā)板的JTAG口上,通過JTAG口與ARM處理器核進(jìn)行通信。由于JTAG調(diào)試的目標(biāo)程序是在目標(biāo)板上執(zhí)行,仿真更接近于目標(biāo)硬件,因此許多接口問題,如高頻操作限制、電線長(zhǎng)度的限制等被最小化了。該方式是目前采用最多的一種調(diào)試方式。113.3ADS集成開發(fā)環(huán)境的使用3.3.1ADS組成介紹3.3.2命令行開發(fā)工具3.3.3利用ADS開發(fā)應(yīng)用程序3.3.4編譯和鏈接工程ADS全稱為ARMDeveloperSuite,是ARM公司推出的新一代ARM集成開發(fā)工具?,F(xiàn)在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0,該版本支持包括Windows和Linux在內(nèi)的多種操作系統(tǒng)。12ADS組成介紹1.編譯器,ADS提供多種編譯器,以支持ARM和Thumb指令的編譯。
armcc是ARMC編譯器,
tcc是ThumbC編譯器,
armcpp是ARMC++編譯器,
tcpp是ThumbC++編譯器,
armasm是ARM和Thumb的匯編器。2.鏈接器armlink是ARM鏈接器。該命令既可以將編譯得到的一個(gè)或多個(gè)目標(biāo)文件和相關(guān)的一個(gè)或多個(gè)庫文件進(jìn)行鏈接,生成一個(gè)可執(zhí)行文件,也可以將多個(gè)目標(biāo)文件部分鏈接成一個(gè)目標(biāo)文件,以供進(jìn)一步的鏈接。3.符號(hào)調(diào)試器armsd是ARM和Thumb的符號(hào)調(diào)試器。它能夠進(jìn)行源碼級(jí)的程序調(diào)試。用戶可以在用C或匯編語言寫的代碼中進(jìn)行單步調(diào)試、設(shè)置斷點(diǎn)、查看變量值和內(nèi)存單元的內(nèi)容。4.fromELF將ELF格式的文件轉(zhuǎn)換為各種格式的輸出文件,包括BIN格式映像文件、Motorola32位S格式映像文件、Intel32位格式映像文件和Verilog16進(jìn)制文件。FromELF命令也能夠?yàn)檩斎胗诚裎募a(chǎn)生文本信息,例如,代碼和數(shù)據(jù)長(zhǎng)度。5.a(chǎn)rmararmar是ARM庫函數(shù)生成器,它將一系列ELF格式的目標(biāo)文件以庫函數(shù)的形式集合在一起。用戶可以把一個(gè)庫傳遞給一個(gè)鏈接器以代替幾個(gè)ELF文件。136.CodeWarriorCodeWarrior集成開發(fā)環(huán)境(IDE)為管理和開發(fā)項(xiàng)目提供了簡(jiǎn)單多樣化的圖形用戶界面,用戶可以使用ADS的CodeWarriorIDE為ARM和Thumb處理器開發(fā)用C、C++或者ARM匯編語言編寫的程序代碼。7.調(diào)試器(1)ADS中包含有3個(gè)調(diào)試器:AXD、Armsd和ADW/ADU。(2)在ARM體系中,可以選擇多種調(diào)試方式:Multi-ICE(Multi-processorin-circuitemulator)、ARMulator或Angel。
Multi-ICE是一個(gè)獨(dú)立的產(chǎn)品,是ARM公司自己的JTAG在線仿真器,不是由ADS提供的。
ARMulator是一個(gè)ARM指令集仿真器,集成在ARM的調(diào)試器AXD中,提供對(duì)ARM處理器的指令集的仿真,為ARM和Thumb提供精確的模擬。用戶可以在硬件尚未做好的情況下,開發(fā)程序代碼,利用模擬器方式調(diào)試。
Angel是ARM公司常駐在目標(biāo)機(jī)Flash中的監(jiān)控程序,只需通過RS-232C串口與PC主機(jī)相連,就可以對(duì)基于ARM架構(gòu)處理器的目標(biāo)機(jī)進(jìn)行監(jiān)控器方式的調(diào)試。8.C和C++庫ADS提供ANSIC庫函數(shù)和C++庫函數(shù),支持被編譯的C和C++代碼。用戶可以把C庫中的與目標(biāo)相關(guān)的函數(shù)作為自己應(yīng)用程序中的一部分,重新進(jìn)行代碼的實(shí)現(xiàn)。這就為用戶帶來了極大的方便,針對(duì)自己的應(yīng)用程序的要求,對(duì)與目標(biāo)無關(guān)的庫函數(shù)進(jìn)行適當(dāng)?shù)牟眉?。在C庫中有很多函數(shù)是獨(dú)立于其他函數(shù)的,并且與目標(biāo)硬件沒有任何依賴關(guān)系。對(duì)于這類函數(shù),用戶可以很容易地從匯編代碼中使用。有了這些部件,用戶可以為ARM系列的RISC處理器編寫和調(diào)試自己的開發(fā)應(yīng)用程序了。14命令行開發(fā)工具1.C和C++編譯器:armcc、tcc、armcpp和tcpp,它們具有通用語法:compiler[PCS-options][source-language][search-paths][preprocessor-options][output-format][target-options][debug-options][code-generation-options][warning-options][additional-checks][error-options][source]
PCS-options:指定了要使用的過程調(diào)用標(biāo)準(zhǔn)。
source-language:指定了編譯器可以接受的編寫源程序的語言種類。
search-paths:該選項(xiàng)指定對(duì)包含的文件的搜索路徑。
preprocessor-options:該選項(xiàng)指定預(yù)處理器的行為。
output-format:該選項(xiàng)指定編譯器的輸出格式,可以使用該項(xiàng)生成匯編語言輸出列表文件和目標(biāo)文件。
target-options:該選項(xiàng)指定目標(biāo)處理器或ARM體系結(jié)構(gòu)。
debug-options:該選項(xiàng)指定調(diào)試信息表是否生成,以及生成時(shí)的格式。
code-generation-options:該選項(xiàng)指定優(yōu)化、字節(jié)順序和由編譯器產(chǎn)生的數(shù)據(jù)對(duì)齊格式等選項(xiàng)。
warning-options:該選項(xiàng)決定警告信息是否產(chǎn)生。
additional-checks:該選項(xiàng)指定幾個(gè)能用于源碼的附加檢查,例如,檢查數(shù)據(jù)流異常,檢查沒有使用的聲明等。
error-options:該選項(xiàng)可以關(guān)閉指定的可恢復(fù)的錯(cuò)誤,或者將一些指定的錯(cuò)誤降級(jí)為警告。
source:該選項(xiàng)提供了包含有C或C++源代碼的一個(gè)或多個(gè)文件名,編譯器在當(dāng)前路徑尋找源文件和創(chuàng)建輸出文件。152.鏈接器完整的鏈接器armlink命令語法如下:armlink[-help][-vsn][-partial][-outputfile][-elf][-reloc][-ro-baseaddress][-ropi][-rw-baseaddress][-rwpi][-split][-scatterfile][-debug|-nodebug][-remove?RO/RW/ZI/DBG]|-noremove][-entrylocation][-keepsection-id][-firstsection-id][-lastsection-id][-libpath
pathlist][-scanlib|-noscanlib][-locals|-nolocals][-callgraph][-infotopics][-map][-symbols][-symdefsfile][-editfile][-xref][-xreffrom
object(section)][-xrefto
object(section)][-errorsfile][-listfile][-verbose][-unmangled|-mangled][-matchcrossmangled][-viafile][-strict][-unresolvedsymbol][-MI|-LI|-BI][input-file-list]
-help:列出在命令行中常用的一些選項(xiàng)操作。
-vsn:顯示出所用的armlink的版本信息。
-partial:創(chuàng)建的是部分鏈接的目標(biāo)文件而不是可執(zhí)行映像文件。
-outputfile:指定輸出文件名,該文件可能是部分鏈接的目標(biāo)文件,也可能是可執(zhí)行映像文件。如果輸出文件名沒有特別指定的話,輸出一個(gè)可執(zhí)行映像文件,則生成的默認(rèn)輸出文件名為_image.axf;如果輸出一個(gè)部分鏈接的目標(biāo)文件,則生成的默認(rèn)文件名為_object.o;如果沒有指定輸出文件的路徑信息,則輸出文件就在當(dāng)前目錄下生成。如果指定了路徑信息,則在指定的路徑下生成輸出文件。
-elf:生成ELF格式的映像文件,這也是armlink所支持的惟一的一種輸出格式。16
-reloc:生成可重定址的映像。一個(gè)可重定址的映像具有動(dòng)態(tài)的段,這個(gè)段中包含可重定址信息,利用這些信息可以在鏈接后,進(jìn)行映像文件的重新定址。-reloc、-rw-base一起使用時(shí),如果沒有-split選項(xiàng),鏈接時(shí)會(huì)產(chǎn)生錯(cuò)誤。
-ro-baseaddress:將包含有RO(Read-Only屬性)輸出段的加載地址和運(yùn)行地址設(shè)置為address,該地址必須是字對(duì)齊的,如果沒有指定這個(gè)選項(xiàng),則默認(rèn)的RO基地址值為0x8000。
-ropi:使得包含RO輸出段的加載域和運(yùn)行域是位置無關(guān)的。如果該選項(xiàng)沒有使用,則相應(yīng)的域被標(biāo)記為絕對(duì)的。通常每一個(gè)只讀屬性的輸入段必須是只讀位置無關(guān)的。如果使用了這個(gè)選項(xiàng),armlink將會(huì)檢查各段之間的重定址是否有效,并確保任何由armlink自身生成的代碼是只讀位置無關(guān)的。ARM工具直到armlink完成了對(duì)輸入段的處理后,才能夠決定最終的生成映像是否為只讀位置無關(guān)的。這就意味著,即使為編譯器和匯編器指定了ROPI選項(xiàng),armlink也可能會(huì)產(chǎn)生ROPI錯(cuò)誤信息。
-rw-baseaddress:設(shè)置包含RW(Read/Write屬性)輸出段的域的運(yùn)行時(shí)地址,該地址必須是字對(duì)齊的。如果這個(gè)選項(xiàng)和-split選項(xiàng)一起使用,包含RW輸出段的域的加載和運(yùn)行時(shí)地址都將設(shè)置在address處。
-rwpi:使得包含RW和ZI(ZeroInitialization,初始化為0)屬性的輸出段的加載和運(yùn)行域?yàn)槲恢脽o關(guān)的。如果該選項(xiàng)沒有使用,相應(yīng)域標(biāo)記為絕對(duì)的。這個(gè)選項(xiàng)要求-rw-base選項(xiàng)后有值,如果-rw-base沒有指定的話,默認(rèn)其值為0,即相當(dāng)于-rw-base0。通常每一個(gè)可寫的輸入段必須是可讀/可寫位置無關(guān)的。17
-split:將包含RO和RW屬性的輸出段的加載域,分割成2個(gè)加載域。一個(gè)是包含RO輸出段的加載域,默認(rèn)的加載地址為0x8000,但是可以用-ro-base選項(xiàng)設(shè)置其他的地址值;另一個(gè)加載域包含RW屬性的輸出段,由-rw-base選項(xiàng)指定加載地址,如果沒有使用-rw-base選項(xiàng)的話,默認(rèn)使用的是-rw-base0。
-scatterfile:使用在file中包含的分組和定位信息來創(chuàng)建映像內(nèi)存映射。如果使用了該選項(xiàng)的話,必須重新實(shí)現(xiàn)堆棧初始化函數(shù)_user_initial_stackheap()。
-debug:使輸出文件包含調(diào)試信息,調(diào)試信息包括調(diào)試輸入段、符號(hào)和字符串表。這是默認(rèn)的選項(xiàng)。
-nodebug:使得在輸出文件中不包含調(diào)試信息。生成的映像文件短小,但是不能進(jìn)行源碼級(jí)的調(diào)試。
-remove:使用這個(gè)選項(xiàng)會(huì)將在輸入段中未使用的段從映像文件中刪除。如果輸入段中含有映像文件入口點(diǎn)或者該輸入段被一個(gè)使用的段所引用,則armlink將這樣的輸入段當(dāng)做已使用的段。
-noremove:保留映像文件中所有未被使用的段。
-entrylocation:指定映像文件中惟一的初始化入口點(diǎn)。一個(gè)映像文件可以包含多個(gè)入口點(diǎn),使用這個(gè)命令定義的初始化入口點(diǎn)是存放在可執(zhí)行文件的頭部,以供加載程序加載時(shí)使用。
-keepsection-id:指定保留一個(gè)輸入段,這樣,即使該輸入段沒有在映像文件中使用,也不會(huì)被刪除。
-firstsection-id:將被選擇的輸入段放在運(yùn)行域的開始。通過該選項(xiàng),將包含復(fù)位和中斷向量地址的段放置在映像文件的開始。
-lastsection-id:將所選擇的輸入段放在運(yùn)行域的最后。例如,用這個(gè)選項(xiàng)能夠強(qiáng)制性地將包含校驗(yàn)和的輸入段放置在RW段的最后。18
-libpath
pathlist:為ARM標(biāo)準(zhǔn)的C和C++庫指定了搜索路徑列表。注意,這個(gè)選項(xiàng)不會(huì)影響對(duì)用戶庫的搜索路徑。
-scanlib:?jiǎn)?dòng)對(duì)默認(rèn)庫(標(biāo)準(zhǔn)ARMC和C++庫)的掃描以解析引用的符號(hào)。
-noscanlib:禁止在鏈接時(shí)掃描默認(rèn)的庫。
-locals:指導(dǎo)鏈接器在生成可執(zhí)行映像文件的時(shí)候,將本地符號(hào)添加到輸出符號(hào)信息表中。
-nolocals:指導(dǎo)鏈接器在生成可執(zhí)行映像文件的時(shí)候,不要將本地符號(hào)添加到輸出符號(hào)信息表中。如果想減小輸出符號(hào)表的大小,可以使用該選項(xiàng)。
-callgraph:創(chuàng)建一個(gè)HTML格式的靜態(tài)函數(shù)調(diào)用圖。這個(gè)調(diào)用圖給出了映像文件中所有函數(shù)的定義和引用信息。
-infotopics:打印出關(guān)于指定種類的信息,這里的參數(shù)topics是指用逗號(hào)間隔的類型標(biāo)志符列表。
-map:創(chuàng)建映像文件的信息圖。映像文件信息圖包括映像文件中的每個(gè)加載域、運(yùn)行域和輸入段的大小和地址,這里的輸入段還包括調(diào)試信息和鏈接器產(chǎn)生的輸入段。
-symbols:列出鏈接時(shí)使用的每一個(gè)局部和全局符號(hào)。該符號(hào)還包括鏈接生成的符號(hào)。
-symdefsfile:創(chuàng)建一個(gè)包含來自輸出映像文件的全局符號(hào)定義的符號(hào)定義文件。
-editfile:指定一個(gè)steering類型的文件,該文件包含用于修改輸出文件中的符號(hào)信息表的命令??梢栽趕teering文件中指定隱藏全局符號(hào)和重命名全局符號(hào)。19
-xref:列出輸入段間的所有交叉引用。
-xreffromobject(section):列出目標(biāo)文件中的輸入段對(duì)其他輸入段的交叉引用。如果想知道某個(gè)指定的輸入段中的引用情況,就可以使用該選項(xiàng)。
-xreftoobject(section):列出從其他輸入段到目標(biāo)文件輸入段的引用。-errorsfile:將診斷信息從標(biāo)準(zhǔn)輸出流重定向到文件file中。-listfile:將-info,-map,-symbols,-xref,-xreffrom和–xrefto這幾個(gè)選項(xiàng)的輸出重新定向到文件file中。如果文件file沒有指定路徑信息,就會(huì)在默認(rèn)輸出路徑創(chuàng)建該文件,該路徑是輸出映像文件所在的路徑。
-verbose:將有關(guān)鏈接操作的細(xì)節(jié)打印出來,包括所使用的目標(biāo)文件和要用到的庫。
-unmangled:指定鏈接器在由xref,-xreffrom,-xrefto和-symbols所生成的診斷信息中顯示出unmangledC++符號(hào)名。如果使用了這個(gè)選項(xiàng),鏈接器將unmangleC++符號(hào)名以源碼的形式顯示出來。這個(gè)選項(xiàng)是默認(rèn)的。
-mangled:指定鏈接器顯示由-xref,-xreffrom,-xrefto和-symbols所產(chǎn)生的診斷信息中的mangledC++符號(hào)名。如果使用了該選項(xiàng),鏈接器就不會(huì)顯示unmangleC++符號(hào)名了。符號(hào)名是按照它們?cè)谀繕?biāo)符號(hào)表中顯示的格式顯示的。
-viafile:表示從文件file中讀取輸入文件名列表和鏈接器選項(xiàng)。在armlink命令行可以輸入多個(gè)-via選項(xiàng),當(dāng)然,-via選項(xiàng)也能夠包含在一個(gè)via文件中。
-strict:指定鏈接器報(bào)告可能導(dǎo)致錯(cuò)誤的條件。20
-unresolvedsymbol:將未被解析的符號(hào)指向全局符號(hào)symbol。symbol必須是已定義的全局符號(hào),否則,symbol會(huì)當(dāng)做一個(gè)未解析的符號(hào),鏈接將以失敗告終。這個(gè)選項(xiàng)在自上而下的開發(fā)中尤為有用,在這種情況下,通過將無法指向相應(yīng)函數(shù)的引用指向一個(gè)偽函數(shù)的方法,可以測(cè)試一個(gè)部分實(shí)現(xiàn)的系統(tǒng)。該選項(xiàng)不會(huì)顯示任何警告信息。
input-file-list:以空格作為間隔符的目標(biāo)或庫的列表。有一類特殊的目標(biāo)文件,即symdef文件,可以包含在文件列表中,為生成的映像文件提供全局的symbol值。在輸入文件列表中有兩種使用庫的方法:
指定要從庫中提取并作為目標(biāo)文件添加到映像文件中的特定的成員。
指定某庫文件,鏈接器根據(jù)需要從其中提取成員。armlink按照以下的順序處理輸入文件列表:(1)無條件地添加目標(biāo)文件;(2)使用匹配模式從庫中選擇成員加載到映像文件中去。例如使用下面的命令:armlink
main.o
mylib(stdio.o)mylib(a*.o)將會(huì)無條件地把mylib庫中所有的以字母a開頭的目標(biāo)文件和stdio.o鏈接到生成的映像文件中去。(3)添加尚未解析的引用庫到庫文件列表中。21利用ADS開發(fā)應(yīng)用程序工程將所有的源碼文件組織在一起,并能夠決定最終生成文件存放的路徑、輸出的格式等。在CodeWarrior中新建一個(gè)工程的方法有兩種,可以在工具欄中單擊“New”按鈕,也可以在“File”菜單中選擇“New…”菜單。這樣就會(huì)打開一個(gè)如圖3.4所示的對(duì)話框。在這個(gè)對(duì)話框中為用戶提供了7種可選擇的工程類型。
ARMExecutablImage:用于由ARM指令代碼生成一個(gè)ELF格式的可執(zhí)行映像文件;
ARMObjectLibrary:用于由ARM指令代碼生成一個(gè)armar格式的目標(biāo)文件庫;
EmptyProject:用于創(chuàng)建一個(gè)不包含任何庫或源文件的工程;
MakefileImporterWizard:用于將VisualC的nmake或GNUmake文件轉(zhuǎn)入到CodeWarriorIDE工程文件;
ThumbARMExecutableImage:用于由ARM指令和Thumb指令的混合代碼生成一個(gè)可執(zhí)行的ELF格式的映像文件;
ThumbExecutableimage:用于由Thumb指令創(chuàng)建一個(gè)可執(zhí)行的ELF格式的映像文件;
ThumbObjectLibrary:用于由Thumb指令的代碼生成一個(gè)armar格式的目標(biāo)文件庫。222324252627#include<stdlib.h>#include<string.h>#include"def.h"#include"option.h"#include"2410addr.h"#include"2410lib.h"#include"2410slib.h"#include"mmu.h"#include"uart0.h"voidIsr_Init(void);//==========================voidMain(void){
MMU_Init();ChangeClockDivider(1,1);ChangeMPllValue(0xa1,0x3,0x1);
Port_Init();
Isr_Init();Uart_Init(0,115200);Uart_Select(0);
while(1){ Led_Display(15); Delay(1000); Led_Display(1); Delay(1000); Led_Display(2); Delay(1000); Led_Display(4); Delay(1000); Led_Display(8); Delay(1000);
Uart_Printf("\n\nTestProgram.FCLK=%dHz\n\n",FCLK);}}voidIsr_Init(void){
rINTMOD=0x0;
rINTMSK=BIT_ALLMSK;rINTSUBMSK=BIT_SUB_ALLMSK;}28函數(shù)MMU_Init()在mmu.h中定義,完成內(nèi)存管理單元的初始化。函數(shù)ChangeClockDivider()和函數(shù)ChangeMPllValue()在2410lib.h中定義,用來設(shè)置系統(tǒng)時(shí)鐘。Port_Init()也在2410lib.h中定義,以初始化通用I/O口。Isr_init()用來設(shè)置中斷。Uart_Init()和Uart_Select()在uart0.h中定義,初始化串口以方便與主機(jī)的通信。Led_Display()實(shí)現(xiàn)LED的閃爍,Delay()為一延時(shí)程序,均在2410lib.h中定義。Uart_Printf()實(shí)現(xiàn)與主機(jī)的通信。該段代碼在調(diào)用初始化函數(shù)、完成MMU單元、端口、系統(tǒng)時(shí)鐘等初始化后,在while循環(huán)中實(shí)現(xiàn)4個(gè)LED循環(huán)顯示功能,并通過超級(jí)終端顯示FCLK時(shí)鐘信息。在建立好一個(gè)工程時(shí),默認(rèn)的Target是DebugRel,還有另外兩個(gè)可用的Target,分別為Release和Debug,這3個(gè)target的含義分別說明如下。
DebugRel:使用該目標(biāo),在生成目標(biāo)的時(shí)候,會(huì)為每一個(gè)源文件生成調(diào)試信息;
Debug:使用該目標(biāo)為每一個(gè)源文件生成最完全的調(diào)試信息;
Release:使用該目標(biāo)不會(huì)生成任何調(diào)試信息。到目前為止,一個(gè)完整的工程已經(jīng)建立,下面應(yīng)該對(duì)工程進(jìn)行編譯和鏈接工作。29編譯和鏈接工程在進(jìn)行編譯和鏈接前,首先講述一下如何進(jìn)行生成目標(biāo)的配置。單擊“Edit”菜單,出現(xiàn)Edit菜單,選擇“DebugRelSettings…”,如圖3.9所示。圖3.9Edit菜單30單擊“DebugRelSettings…”后,出現(xiàn)如圖3.10所示的對(duì)話框。這個(gè)對(duì)話框中的設(shè)置很多,在這里只介紹一些最常用的設(shè)置選項(xiàng),讀者若對(duì)其他未涉及的選項(xiàng)感興趣,可以查看相應(yīng)的幫助文件。圖3.10DebugRelSettings對(duì)話框1.Target設(shè)置選項(xiàng)TargetName文本框顯示了當(dāng)前的目標(biāo)設(shè)置。Linker選項(xiàng)供用戶選擇要使用的鏈接器。Pre-linker:目前CodeWarriorIDE不支持該選項(xiàng)。Post-Linker:選擇在鏈接完成后,還要對(duì)輸出文件進(jìn)行的操作。312.LanguageSettings因?yàn)楸纠邪瑓R編源代碼,所以要用到匯編器。首先看ARM匯編器。這個(gè)匯編器實(shí)際上就是armasm,ARM體系結(jié)構(gòu)是ARM920T,字節(jié)順序默認(rèn)就是小端模式。在其他編譯器的設(shè)置中,ARM體系結(jié)構(gòu)均為ARM920T。細(xì)心的讀者可能會(huì)注意到,在設(shè)置框的右下角,當(dāng)對(duì)某項(xiàng)設(shè)置進(jìn)行修改后,該行中的某個(gè)選項(xiàng)就會(huì)發(fā)生相應(yīng)的改動(dòng),如圖3.11所示。事實(shí)上,這行文字顯示的是相應(yīng)的編譯或鏈接選項(xiàng),由于有了CodeWarrior,開發(fā)人員可以不用再去查看繁多的命令行選項(xiàng),只要在界面中選中或撤銷某個(gè)選項(xiàng),軟件就會(huì)自動(dòng)生成相應(yīng)的代碼,這項(xiàng)功能為那些不習(xí)慣在DOS下鍵入命令行的用戶提供了極大的方便。圖3.11命令行工具選項(xiàng)設(shè)置
323.Linker設(shè)置鼠標(biāo)選中ARMLinker,出現(xiàn)如圖3.12所示的對(duì)話框。這里詳細(xì)介紹該對(duì)話框的主要標(biāo)簽頁選項(xiàng),因?yàn)檫@些選項(xiàng)對(duì)最終生成的文件有著直接的影響。在標(biāo)簽頁Output中,Linktype中提供了3種鏈接方式。Partial方式表示鏈接器只進(jìn)行部分鏈接,經(jīng)過部分鏈接生成的目標(biāo)文件,可以作為以后進(jìn)一步鏈接時(shí)的輸入文件。Simple方式是默認(rèn)的鏈接方式,也是使用最頻繁的鏈接方式,它鏈接生成簡(jiǎn)單的ELF格式的目標(biāo)文件,使用的是鏈接器選項(xiàng)中指定的地址映射方式。Scattered方式使得鏈接器根據(jù)scatter格式文件中指定的地址映射,生成復(fù)雜的ELF格式的映像文件。在一般情況下,該選項(xiàng)使用得不太多。圖3.12鏈接器設(shè)置
33在選中Simple方式后,會(huì)出現(xiàn)Simpleimage選項(xiàng)。(1)ROBase:這個(gè)文本框設(shè)置使包含有RO段的加載域和運(yùn)行域?yàn)橥粋€(gè)地址,默認(rèn)是0x8000。用戶要根據(jù)自己硬件的實(shí)際SDRAM的地址空間來修改這個(gè)地址,保證在這里填寫的地址是程序運(yùn)行時(shí),SDRAM地址空間所能覆蓋的地址。(2)RWBase:這個(gè)文本框設(shè)置了包含RW和ZI輸出段的運(yùn)行域地址。如果選中split選項(xiàng),鏈接器生成的映像文件將包含兩個(gè)加載域和兩個(gè)運(yùn)行域,此時(shí),在RWBase中所輸入的地址為包含RW和ZI輸出段的域設(shè)置了加載域和運(yùn)行域地址。(3)Ropi:選中這個(gè)設(shè)置將告訴鏈接器,使包含有RO輸出段的運(yùn)行域位置無關(guān)。使用這個(gè)選項(xiàng),鏈接器將保證下面的操作。
檢查各段之間的重定址是否有效;
確保任何由armlink自身生成的代碼是只讀位置無關(guān)的。(4)Rwpi:選中該選項(xiàng)將會(huì)告訴鏈接器,使包含RW和ZI輸出段的運(yùn)行域位置無關(guān)。該選項(xiàng)要求RWBase有值,如果沒有給它指定數(shù)值的話,默認(rèn)為0值。如果這個(gè)選項(xiàng)沒有被選中,域就標(biāo)識(shí)為絕對(duì)。每一個(gè)可寫的輸入段必須是讀寫位置無關(guān)的。(5)SplitImage:選擇這個(gè)選項(xiàng)把包含RO和RW輸出段的加載域分成2個(gè)加載域:一個(gè)是包含RO輸出段的域,一個(gè)是包含RW輸出段的域。這個(gè)選項(xiàng)要求RWBase有值,如果沒有給RWBase選項(xiàng)設(shè)置,則默認(rèn)值為
RWBase0。(6)Relocatable:選擇這個(gè)選項(xiàng)將保留映像文件的重定址偏移量。這些偏移量為程序加載器提供了有用信息。在Options選項(xiàng)中,需要讀者引起注意的是Imageentrypoint文本框。該文本框用來指定映像文件的初始入口點(diǎn)地址值,當(dāng)映像文件被加載程序加載時(shí),加載程序會(huì)跳轉(zhuǎn)到該地址去執(zhí)行。34在Linker下還有一個(gè)ARMfromELF,如圖所示。fromELF就是在3.3.1節(jié)中介紹的一個(gè)實(shí)用工具,它將鏈接器、編譯器或匯編器的輸出代碼進(jìn)行格式轉(zhuǎn)換。例如,將ELF格式的可執(zhí)行映像文件轉(zhuǎn)換成可以燒寫到ROM的二進(jìn)制格式文件;對(duì)輸出文件進(jìn)行反匯編,從而提取出有關(guān)目標(biāo)文件的大小、符號(hào)和字符串表,以及重定址等信息。只有在Target設(shè)置中選擇了Post-linker,才可以使用該選項(xiàng)。在Outputformat下拉框中,為用戶提供了多種可以轉(zhuǎn)換的目標(biāo)格式,本例選擇Plainbinary,這是一個(gè)二進(jìn)制格式的可執(zhí)行文件,可以被燒寫到目標(biāo)板的Flash中。在Outputfilename文本框輸入希望生成的輸出文件存放的路徑,或通過單擊“Choose...”按鈕從文件對(duì)話框中選擇輸出文件。如果不輸入路徑名,則生成的二進(jìn)制文件存放在工程所在的目錄下。35完成這些相關(guān)的設(shè)置后,以后在對(duì)工程進(jìn)行make的時(shí)候,CodeWarriorIDE就會(huì)在鏈接完成后調(diào)用fromELF來處理生成的映像文件。對(duì)于本例的工程而言,到此就完成了make之前的設(shè)置工作了。對(duì)工程文件的編譯和鏈接也非常簡(jiǎn)單。單擊CodeWarriorIDE的菜單Project下的make菜單,就可以對(duì)工程進(jìn)行編譯和鏈接了。整個(gè)編譯鏈接過程如圖3.14所示。在工程Test所在的目錄下,生成一個(gè)名為工程名_data的目錄,在本例中是Test_data目錄,在這個(gè)目錄下不同類別的目標(biāo)對(duì)應(yīng)不同的目錄。本例中由于我們使用的是DebugRel目標(biāo),所以生成的最終文件都應(yīng)該在該目錄下。進(jìn)入DebugRel目錄后,讀者會(huì)看到make后生成的映像文件和二進(jìn)制文件,映像文件用于調(diào)試,二進(jìn)制文件可以燒寫到S3C2410X的Flash中運(yùn)行。圖3.14編譯和鏈接過程36用AXD進(jìn)行代碼調(diào)試AXD是ADS軟件中獨(dú)立于CodeWarriorIDE的圖形軟件。打開AXD軟件,默認(rèn)打開的目標(biāo)是ARMulator,這也是在不具備仿真器的條件下調(diào)試時(shí)最常用的一種調(diào)試工具。為了更貼近實(shí)際硬件,需要選擇Multi-ICEServer作為仿真器。本節(jié)主要結(jié)合Multi-ICEServer介紹在AXD中進(jìn)行代碼調(diào)試的方法和過程,使讀者對(duì)AXD的調(diào)試有初步的了解。在使用AXD進(jìn)行代碼調(diào)試之前,首先要保證Multi-ICE的正常連接,這樣才能正常進(jìn)入AXD環(huán)境。3.4.1調(diào)試架構(gòu)3.4.2Multi-ICE的配置3.4.3使用AXD進(jìn)行代碼調(diào)試3.4.4生成.bin文件37調(diào)試架構(gòu)38調(diào)試主機(jī)一般是一臺(tái)運(yùn)行調(diào)試軟件的計(jì)算機(jī),運(yùn)行有ARM公司或者第三方提供的調(diào)試軟件。常用的軟件有ADS中的AXD、Linux下的arm-elf-gdb等。通過這些軟件,調(diào)試主機(jī)可以發(fā)出一些高層的調(diào)試命令,例如,設(shè)置斷點(diǎn)、訪問內(nèi)存等。協(xié)議轉(zhuǎn)換器負(fù)責(zé)轉(zhuǎn)換Debug主控端發(fā)出的高級(jí)ARM調(diào)試命令,將其轉(zhuǎn)換為底層的ARMJTAG調(diào)試命令和ARM內(nèi)核通信的JTAG命令。調(diào)試主機(jī)和協(xié)議轉(zhuǎn)換器之間的介質(zhì)接口有很多種,比如,以太網(wǎng)、并口、USB和RS-232等。典型的協(xié)議轉(zhuǎn)換器是ARM公司提供的Multi-ICE。調(diào)試目標(biāo)機(jī)一般是指基于ARM920T內(nèi)核MCU的目標(biāo)開發(fā)板。經(jīng)過協(xié)議轉(zhuǎn)換器進(jìn)行命令解釋,主機(jī)上運(yùn)行的調(diào)試軟件就可以通過JTAG接口直接與ARM920T內(nèi)核通信。通過插入特定ARM/THUMB指令,可以檢查、保存或者改變內(nèi)核和系統(tǒng)的狀態(tài)。整個(gè)調(diào)試系統(tǒng)包括集成調(diào)試環(huán)境和硬件仿真器,它們組成了一個(gè)類似于“客戶機(jī)-服務(wù)器”模型的系統(tǒng)。服務(wù)器端把所有硬件封裝起來,給客戶端只提供一個(gè)虛擬的處理器接口。由于客戶端的調(diào)試工具軟件通過一個(gè)動(dòng)態(tài)鏈接庫與服務(wù)器相連,所以服務(wù)器一側(cè)的硬件和客戶端的調(diào)試工具軟件是相互獨(dú)立的。在同一個(gè)動(dòng)態(tài)鏈接庫的基礎(chǔ)上,雙方可以各自升級(jí)或替換,同樣也方便了用戶選擇不同的仿真器和調(diào)試軟件來組合成自己的調(diào)試平臺(tái)。一個(gè)具體的調(diào)試程序應(yīng)該能夠支持許多不同的鏈接庫,不同的鏈接庫又能夠提供不同的功能調(diào)用。如圖3.16所示,以ADS工具包為例,“ARMulate.dll”提供了一個(gè)軟ARM內(nèi)核,用做程序的邏輯驗(yàn)證。若要與Multi-ICEServer程序連接在一起進(jìn)行實(shí)時(shí)仿真,則只要調(diào)入“MultiICE.dll”就可以了。該動(dòng)態(tài)庫文件在Multi-ICEServer的安裝目錄下可以找到。394041Multi-ICE的配置Multi-ICE是ARMJTAG的配置程序,通過它可以使ARMJTAG與目標(biāo)板建立通信連接,并能夠反饋目標(biāo)板上ARM處理器的硬件信息。在PC開發(fā)主機(jī)上,選擇“Multi-ICEServer”,進(jìn)入Multi-ICEServer主界面,如圖3.18所示。Multi-ICEServer在運(yùn)行時(shí)需要目標(biāo)處理器的配置信息,比如,內(nèi)核類型和IR(指令寄存器)長(zhǎng)度等。對(duì)Multi-ICEServer進(jìn)行配置,可分為自動(dòng)配置和手動(dòng)配置兩種方式。421.自動(dòng)配置在Multi-ICEServer程序中,選擇“File”→“Auto-configure”菜單或者工具欄上的自動(dòng)配置按鈕。如果目標(biāo)處理器是ARM族的內(nèi)核,ARMJTAG能夠自動(dòng)檢測(cè)到并進(jìn)行相應(yīng)配置,且把結(jié)果顯示在Multi-ICEServer的顯示窗口中。有時(shí)候檢測(cè)ARM710T/720T/740T/940T這一系列內(nèi)核時(shí)會(huì)返回一個(gè)UNKNOWN結(jié)果,這是ARM報(bào)告的一個(gè)硬件bug,此時(shí)就只能使用手動(dòng)配置的方法。經(jīng)過自動(dòng)配置后,JTAG的通信速率會(huì)自動(dòng)設(shè)置為10Mb/s,用戶可以在“Settings”→“JTAGSettings”菜單中按自己的要求選擇合適的速率。2.手動(dòng)配置手動(dòng)配置是通過調(diào)用一個(gè)用戶預(yù)先定義好的配置文件來完成對(duì)Multi-ICEServer的配置。配置文件可以從“File”→“Loadconfiguration”菜單中調(diào)入,配置文件為文本格式文件,文件后綴名為“.cfg”。配置文件主要包括以下幾個(gè)部分。
Title:給配置方案命名;
TAPcontroller:目標(biāo)系統(tǒng)中包含TAP控制器,若包含多個(gè)控制器,則按0、1、2依次取名;
Devicesattachedtoeachcontroller:控制器上連接著的ARM內(nèi)核;
JTAGtiminginformation:JTAG口的時(shí)序設(shè)置;
Otheroptions:主要為RISC開發(fā)人員測(cè)試芯片提供的選項(xiàng)。43配置文件格式示范:[TITLE]Doublecoresconfi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣西百色市平果市政協(xié)辦公益性崗位人員招聘1人考試備考試題及答案解析
- 2026河北保定雄安人才集團(tuán)誠聘現(xiàn)場(chǎng)教學(xué)導(dǎo)師考試備考題庫及答案解析
- 2026湖北宜昌市長(zhǎng)陽土家族自治縣事業(yè)單位急需緊缺人才引進(jìn)招聘42人(華中科技大學(xué)站)筆試模擬試題及答案解析
- 2026新疆烏魯木齊市翰林高級(jí)中學(xué)招聘15人考試備考試題及答案解析
- 2026新疆圖木舒克團(tuán)結(jié)醫(yī)院招聘16人考試備考試題及答案解析
- 2025浙江省旅游投資集團(tuán)招聘25人(第八批)考試參考試題及答案解析
- 2026廣東廣州醫(yī)科大學(xué)附屬第五醫(yī)院人才招聘54人(一)考試備考題庫及答案解析
- 2026年月綜合4k-8k上不封頂江西這家國(guó)企大量招聘30人備考題庫及參考答案詳解
- 2026年濟(jì)南市歷城區(qū)教育和體育局所屬學(xué)校計(jì)劃赴部分高校招聘90人備考題庫及完整答案詳解一套
- 2026年梅河口市阜康酒精有限責(zé)任公司招聘?jìng)淇碱}庫帶答案詳解
- 《公輸》課文文言知識(shí)點(diǎn)歸納
- 內(nèi)鏡中心年終總結(jié)
- 碎石技術(shù)供應(yīng)保障方案
- 園林苗木容器育苗技術(shù)
- 23秋國(guó)家開放大學(xué)《機(jī)電一體化系統(tǒng)設(shè)計(jì)基礎(chǔ)》形考作業(yè)1-3+專題報(bào)告參考答案
- 2023年工裝夾具設(shè)計(jì)工程師年終總結(jié)及下一年計(jì)劃
- 第七章腭裂課件
- 兒科學(xué)熱性驚厥課件
- 嗶哩嗶哩認(rèn)證公函
- GB/T 985.1-2008氣焊、焊條電弧焊、氣體保護(hù)焊和高能束焊的推薦坡口
- GB/T 26480-2011閥門的檢驗(yàn)和試驗(yàn)
評(píng)論
0/150
提交評(píng)論