版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章嵌入式系統(tǒng)開發(fā)8.1引言
8.2嵌入式系統(tǒng)的開發(fā)工具
8.3嵌入式系統(tǒng)的調(diào)試方法
8.4其他實用工具
思考與練習(xí)題
8.1引言
由于嵌入式系統(tǒng)是一個受資源限制的系統(tǒng),因此直接在嵌入式系統(tǒng)硬件上進行編程開發(fā)顯然是不合理的。在嵌入式系統(tǒng)的開發(fā)過程中,一般采用的方法是:首先在通用PC機上的集成開發(fā)環(huán)境中編程;然后通過交叉編譯和鏈接,將程序轉(zhuǎn)換成目標(biāo)平臺(嵌入式系統(tǒng))可以運行的二進制代碼;接著通過嵌入式調(diào)試系統(tǒng)調(diào)試正確;最后將程序下載到目標(biāo)平臺上運行。
因此,選擇合適的開發(fā)工具和調(diào)試工具,對整個嵌入式系統(tǒng)的開發(fā)都非常重要。本章在8.2節(jié)著重講述嵌入式系統(tǒng)的開發(fā)工具,內(nèi)容包括開發(fā)工具概述、ADS簡介、使用ADS創(chuàng)建工程、使用AXD調(diào)試代碼;在8.3節(jié)具體介紹嵌入式系統(tǒng)的調(diào)試方法,包括嵌入式系統(tǒng)調(diào)試簡介、ARM調(diào)試系統(tǒng)概述、基于Angel的調(diào)試系統(tǒng)和基于JTAG的調(diào)試系統(tǒng);最后在8.4節(jié)介紹幾種其他實用工具,包括SourceInsight和SkyEye。 8.2嵌入式系統(tǒng)的開發(fā)工具
8.2.1開發(fā)工具概述
當(dāng)進行嵌入式系統(tǒng)開發(fā)時,選擇合適的開發(fā)工具可以加快開發(fā)進度、降低開發(fā)成本。因此,一套含有編輯軟件、編譯軟件、匯編軟件、連接軟件、調(diào)試軟件、工程管理以及函數(shù)庫的集成開發(fā)環(huán)境(IntegratedDebuggerEnvironment,IDE)是必不可少的,至于嵌入式實時操作系統(tǒng)、評估板等其他開發(fā)工具,則可以根據(jù)應(yīng)用軟件規(guī)模和開發(fā)計劃選用。
目前比較常見的嵌入式系統(tǒng)開發(fā)工具包括ARMSDT、ARMADS、Green
Hills
Tools等。8.2.2ARMADS簡介
ARMADS(ARMDeveloperSuite)是ARM公司提供的專門用于ARM相關(guān)的應(yīng)用開發(fā)和調(diào)試的綜合性軟件工具。現(xiàn)在ADS的最新版本是ADS1.2,取代了早期的ADS1.1和ADS1.0,在功能和易用性上較SDT都有提高,是一款功能強大又易于使用的開發(fā)工具。它除了可以安裝在WindowsNT4、Windows2000、Windows98和Windows95操作系統(tǒng)下,還支持WindowsXP和WindowsMe操作系統(tǒng)。
ADS包括了一系列的應(yīng)用,并有相關(guān)的文檔和實例的支持。使用者可以用它來編寫和調(diào)試各種基于ARM系列處理器的應(yīng)用,可以用于開發(fā)、編譯、調(diào)試各種采用C、C++和ARM匯編語言編寫的程序。
1.命令行開發(fā)工具
這些工具完成將源代碼編譯、鏈接成可執(zhí)行代碼的功能。ADS提供以下命令行開發(fā)工具:
(1)?armcc。armcc是ARMC編譯器。
(2)?armcpp。armcpp是ARMC++編譯器。
(3)?tcc。tcc是ThumbC編譯器。
(4)?tcpp。tcpp是ThumbC++?編譯器。
(5)?armasm。armasm是ARM和Thumb的匯編器。
(6)?armlink。armlink是ARM鏈接器。
(7)?armsd。armsd是ARM和Thumb的符號調(diào)試器。
2.ARM運行時庫
1)運行時庫的類型和建立選項
ADS提供兩種運行時庫來支持被編譯的C和C++?代碼。
(1)?ANSIC庫函數(shù)。這個C函數(shù)庫是由以下幾部分組成:
①在ISOC標(biāo)準(zhǔn)中定義的函數(shù)。
②在semihosted環(huán)境下(semihosting是針對ARM目標(biāo)機的一種機制,它能夠根據(jù)應(yīng)用程序代碼的輸入/輸出請求,與運行有調(diào)試功能的主機通信。這種技術(shù)允許主機為通常沒有輸入和輸出功能的目標(biāo)硬件提供主機資源)用來實現(xiàn)C庫函數(shù)的與目標(biāo)相關(guān)的函數(shù)。
③被C和C++?編譯器所調(diào)用的支持函數(shù)。ARMC庫提供了額外的一些部件支持C++,并為不同的結(jié)構(gòu)體系和處理器編譯代碼。
(2)?C++?庫函數(shù)。C++?庫函數(shù)包含由ISOC++?庫標(biāo)準(zhǔn)定義的函數(shù)。C++?庫依賴于相應(yīng)的C庫來實現(xiàn)與特定目標(biāo)相關(guān)的部分,在C++?庫的內(nèi)部本身是不包含與目標(biāo)相關(guān)的部分的。這個庫是由以下幾部分組成的:
①版本為2.01的RogueWaveStandardC++?庫。
②C++?編譯器使用的支持函數(shù)。
③RogueWave庫所不支持的其他的C++?函數(shù)。在建立自己的應(yīng)用程序的時候,用戶必須指定一些最基本的操作選項,如
●字節(jié)順序:是大端模式,還是小端模式;
●浮點支持:可能是FPA、VFP、軟件浮點處理或不支持浮點運算;
●堆棧限制:是否檢查堆棧溢出;
●位置無關(guān)(PID):數(shù)據(jù)是從與位置無關(guān)的代碼還是從與位置相關(guān)的代碼中讀/寫,代碼是位置無關(guān)的只讀代碼還是位置相關(guān)的的只讀代碼。
2)庫路徑結(jié)構(gòu)
庫路徑是在ADS軟件安裝路徑的lib目錄下的兩個子目錄。例如,若ADS軟件安裝在d:\arm\adsv1_2目錄,則在d:\arm\adsv1_2\lib目錄下的兩個子目錄armlib和cpplib是ARM的庫所在的路徑。
(1)?armlib。這個子目錄包含了ARMC庫、浮點代數(shù)運算庫、數(shù)學(xué)庫等各類庫函數(shù)。與這些庫相應(yīng)的頭文件在d:\arm\adsv1_2\include目錄中。
(2)?cpplib。這個子目錄包含了RogueWaveC++?庫和C++?支持函數(shù)庫。RogueWaveC++庫和C++?支持函數(shù)庫合在一起被稱為ARMC++?庫。與這些庫相應(yīng)的頭文件安裝在d:\arm\adsv1_2\include目錄下。這里需要讓讀者特別注意以下幾點:
(1)?ARMC庫函數(shù)是以二進制格式提供的。
(2)?ARM庫函數(shù)禁止修改。如果要對庫函數(shù)創(chuàng)建新的實現(xiàn),則可以把這個新的函數(shù)編譯成目標(biāo)文件,然后在鏈接的時候把它包含進來。這樣在鏈接的時候,使用的是新的函數(shù)實現(xiàn)而不是原來的庫函數(shù)。
(3)通常情況下,為了創(chuàng)建依賴于目標(biāo)的應(yīng)用程序,在ANSIC庫中只有很少的幾個函數(shù)需要重建。
(4)?RogueWaveStandardC++?函數(shù)庫的源代碼不是免費發(fā)布的,可以從RogueWaveSoftwareInc.或ARM公司通過支付許可證費用來獲得源文件。
3.CodeWarrior集成開發(fā)環(huán)境
CodeWarriorforARM是一套完整的集成開發(fā)工具,充分發(fā)揮了ARMRISC的優(yōu)勢,使產(chǎn)品開發(fā)人員能夠很好地應(yīng)用尖端的片上系統(tǒng)技術(shù)。該工具是專為基于ARMRISC的處理器而設(shè)計的,它可加速并簡化嵌入式開發(fā)過程中的每一個環(huán)節(jié),使得開發(fā)人員只需通過一個集成軟件開發(fā)環(huán)境就能研制出ARM產(chǎn)品。在整個開發(fā)周期中,開發(fā)人員無需離開CodeWarrior開發(fā)環(huán)境,因此節(jié)省了在操作工具上花的時間,使得開發(fā)人員有更多的精力投入到代碼編寫上。
ADS的CodeWarrior集成開發(fā)環(huán)境(IDE)是基于MetrowerksCodeWarriorIDE4.2版本的,它經(jīng)過適當(dāng)?shù)牟眉艉罂梢灾С諥DS工具鏈。CodeWarriorIDE為管理和開發(fā)項目提供了簡單、多樣化的圖形用戶界面。用戶可以使用它為ARM和Thumb處理器開發(fā)用C、C++或ARM匯編語言編寫的程序代碼。通過提供下面的功能,CodeWarriorIDE縮短了用戶開發(fā)項目代碼的周期:
(1)全面的項目管理功能。
(2)子函數(shù)的代碼導(dǎo)航功能,使得用戶迅速找到程序中的子函數(shù)。在CodeWarriorIDE中所涉及到的target有兩種不同的語義:
(1)目標(biāo)系統(tǒng)(Targetsystem):是特指代碼要運行的環(huán)境,是基于ARM的硬件。例如,若要為ARM開發(fā)板編寫要運行在它上面的程序,則這個開發(fā)板就是目標(biāo)系統(tǒng)。
(2)生成目標(biāo)(Buildtarget):是指用于生成特定的目標(biāo)文件的選項設(shè)置(包括匯編選項、編譯選項、鏈接選項以及鏈接后的處理選項)和所用的文件的集合。
CodeWarriorIDE為用戶提供下面的功能:
(1)源代碼編輯器。它集成在CodeWarriorIDE的瀏覽器中,能夠根據(jù)語法格式,使用不同的顏色顯示代碼。
(2)源代碼瀏覽器。它保存了在源碼中定義的所有符號,能夠使用戶在源碼中快速方便地跳轉(zhuǎn)。
(3)查找和替換功能。用戶可以在多個文件中,利用字符串通配符,進行字符串的搜索和替換。
(4)文件比較功能??梢允褂脩舯容^路徑中的不同文本文件的內(nèi)容。
4.實用程序
ADS提供以下實用工具來配合前面介紹的命令行開發(fā)工具的使用:
(1)?fromELF。這是ARM映像文件轉(zhuǎn)換工具。
(2)?armar。ARM庫函數(shù)生成器將一系列ELF格式的目標(biāo)文件以庫函數(shù)的形式集合在一起,用戶可以把一個庫傳遞給一個鏈接器以代替幾個ELF文件。
(3)?Flashdownloader。這個工具用于把二進制映像文件下載到ARM開發(fā)板上的FlashMemory的工具。
5.支持的軟件
ADS為用戶提供軟件ARMulator,?使用戶可以在軟件仿真的環(huán)境下或者在基于ARM的硬件環(huán)境下調(diào)試用戶應(yīng)用程序。
ARMulator是一個ARM指令集仿真器,集成在ARM的調(diào)試器AXD中,它提供對ARM處理器的指令集的仿真,為ARM和Thumb提供精確的模擬。用戶可以在硬件尚未做好的情況下開發(fā)程序代碼。8.2.3使用ADS創(chuàng)建工程
1.建立一個工程
建立一個新工程的方法如下:
(1)在CodeWarrior中新建一個工程的方法有兩種:可以在工具欄中單擊New按鈕,也可以在File菜單中選擇New菜單。這樣就會打開一個如圖8-1所示的New對話框。該對話框包括3個標(biāo)簽頁,即Project、File和Object。圖8-1新建工程對話框
(2)在New對話框中單擊選擇Project標(biāo)簽頁,在該標(biāo)簽頁中為用戶提供了以下7種可選擇的工程項目模板:
①ARMExecutableImage:?用于由ARM指令的代碼生成一個ELF格式的可執(zhí)行映像文件。
②ARMObjectLibrary:用于由ARM指令的代碼生成一個armar格式的目標(biāo)文件庫。
③EmptyProject:用于創(chuàng)建一個不包含任何庫文件或源文件的工程。
④MakefileImporterWizard:用于將VisualC的nmake或GNUmake文件轉(zhuǎn)換成CodeWarriorIDE工程文件。⑤ThumbARMExecutableImage:用于由ARM指令和Thumb指令的混和代碼生成一個可執(zhí)行的ELF格式的映像文件。
⑥ThumbExecutableImage:用于由Thumb指令創(chuàng)建一個可執(zhí)行的ELF格式的映像文件。
⑦ThumbObjectLibrary:用于由Thumb指令的代碼生成一個armar格式的目標(biāo)文件庫。在這里選擇ARMExecutableImage,用于由ARM指令的代碼生成一個可執(zhí)行的ELF格式的映像文件。
(3)在Projectname文本框中輸入工程文件名稱,本例為“l(fā)edcircle”。
(4)點擊Location文本框的Set按鈕,瀏覽選擇想要將該工程保存的路徑。
(5)將這些設(shè)置好后,點擊“確定”,即可建立一個新的名為ledcircle的工程。此時會出現(xiàn)ledcircle.mcp的窗口,有三個標(biāo)簽頁,分別為files、linkorder和target,默認的是顯示第一個標(biāo)簽頁files,如圖8-2所示。圖8-2新建工程打開窗口在“File”菜單中選擇“New”,在打開的如圖8-1所示的對話框中,選擇標(biāo)簽頁File,在Filename中輸入要創(chuàng)建的文件名,輸入“Init.s”,點擊“確定”關(guān)閉窗口。在打開的文件編輯框中輸入文件“Init.s”的匯編源代碼并保存。用同樣的方法,再建立一個名為main.c的C源代碼文件。
現(xiàn)在需要把新建的兩個源文件添加到工程中。為工程添加源碼常用的方法有兩種:既可以使用如圖8-2所示的方法,也可以在“Project”菜單項中選擇“AddFiles”。這兩種方法都會打開文件瀏覽框,用戶可以把已經(jīng)存在的文件添加到工程中。當(dāng)選中要添加的文件時,會出現(xiàn)一個對話框,如圖8-3所示,詢問用戶把文件添加到何類目標(biāo)中。這里選擇DebugRel目標(biāo),把創(chuàng)建的兩個文件添加到工程中。這樣就建立了一個完整的工程。圖8-3選擇添加文件到指定目標(biāo)
2.編譯和鏈接工程
在ADS中通過DebugSettings對話框設(shè)置一個工程中的各生成目標(biāo)的生成選項。在TargetSettings窗口中設(shè)置的各生成選項只適用于當(dāng)前的生成目標(biāo)。例如,當(dāng)使用ADS中的可執(zhí)行映像文件工程項目時,新工程中通常包括以下三個生成目標(biāo):
●?DebugRel:使用該目標(biāo),在生成目標(biāo)的時候,會為每一個源文件生成調(diào)試信息。
●?Debug:使用該目標(biāo)為每一個源文件生成最完整的調(diào)試信息。
●?Release:使用該目標(biāo)不會生成任何調(diào)試信息。當(dāng)當(dāng)前生成目標(biāo)是Debug時,通過DebugSettings對話框設(shè)置的各種生成選項對于其他兩個生成目標(biāo)DebugRel及Release是無效的。
這里使用默認的DebugRel目標(biāo)。點擊Edit菜單,選擇“DebugRelSettings”(注意,這個選項會因用戶選擇的不同目標(biāo)而有所不同),出現(xiàn)如圖8-2所示的對話框。
(1)設(shè)置TargetSettings選項組。TargetSettings選項組中的選項如圖8-4所示。圖8-4設(shè)置TargetSettings選項組
(2)設(shè)置LanguageSettings選項組。LanguageSettings選項組用于設(shè)置ADS中各語言處理工具的選項,包括匯編器的選項和編譯器的選項。這些選項對于工程中的所有源文件都使用,不能單獨設(shè)置某一個源文件的編譯選項和匯編選項。
首先了解一下ARM匯編器,它實際就是在前面介紹的armasm。默認的ARM體系結(jié)構(gòu)是ARM7TDMI,字節(jié)順序默認是小端模式,對于其他設(shè)置使用默認值即可。
而ARMC編譯器實際就是調(diào)用的命令行工具armcc。使用默認的設(shè)置即可。
此外,在設(shè)置框的右下腳,若對某項設(shè)置進行了修改,則該行中的某個選項會發(fā)生相應(yīng)的改動,如圖8-5所示。圖8-5命令行工具選項設(shè)置
(3)設(shè)置Linker。鏈接器選項Linker用于設(shè)置與鏈接器相關(guān)的選項以及與fromELF工具相關(guān)的選項。鼠標(biāo)選中ARMLinker,則出現(xiàn)如圖8-6所示對話框。圖8-6鏈接器設(shè)置
Output選項卡用來控制鏈接器進行鏈接的操作類型。ARM鏈接器在Linktype中提供了三種鏈接方式:
①Partial:表示鏈接器只進行部分鏈接操作。部分鏈接生成ELF格式的目標(biāo)文件,可以作為以后進一步鏈接時的輸入文件。
②Simple:該方式是默認的鏈接方式,也是使用最頻繁的鏈接方式。鏈接器根據(jù)選項中指定的地址映射方式,鏈接生成簡單的ELF格式的映像文件。這時所生成的映像文件中地址映射關(guān)系比較簡單,如果地址映射關(guān)系復(fù)雜,則需要使用下一種鏈接方式。
③Scattered:該方式使得鏈接器根據(jù)scatter格式文件中指定的地址映射,生成地址映射關(guān)系復(fù)雜的ELF格式的映像文件。這個選項一般情況下使用不太多。
(4)設(shè)置fromELF。在Linker下還有一個ARMfromELF選項,如圖8-7所示。只有在Target設(shè)置中選擇了Post-linker,才可以使用該選項。圖8-7ARMfromELF可選項
(5)編譯鏈接。點擊CodeWarriorIDE的菜單Project下的make菜單,可以對工程進行編譯和鏈接。整個編譯鏈接過程如圖8-8所示。圖8-8編譯和鏈接過程
3.使用命令行工具編譯應(yīng)用程序
有些情況下,用戶開發(fā)的工程比較簡單,或者只是想用到ADS提供的各種工具而并不想在CodeWarriorIDE中進行開發(fā)。在這種情況下,可使用一種不在CodeWarriorIDE集成開發(fā)環(huán)境下開發(fā)用戶應(yīng)用程序的方法。這種方法對于開發(fā)包含較少源代碼的工程是比較實用的。首先用戶可以用任何編輯軟件(比如UltraEdit)編寫前面提到的兩個源文件Init.s和main.c;然后可以利用makefile的知識,編寫自己的makefile文件。由于ADS在安裝的時候沒有提供make命令,因此可以將要用到的make命令直接拷貝到ADS安裝路徑的bin目錄下。假如ADS安裝在目錄e:\arm\adsv1_2下,則可以將make命令拷貝到e:\arm\adsv1_2\
bin目錄下。經(jīng)過上述編譯鏈接以及鏈接后的操作,在e:\arm_xyexp\ledcircle目錄下會生成兩個新的文件:main.axf和main.bin。8.2.4使用AXD調(diào)試代碼
1.ADS調(diào)試器簡介
調(diào)試器本身是一個軟件,用戶通過這個軟件使用Debugagent可以對包含有調(diào)試信息的、正在運行的可執(zhí)行代碼進行諸如變量查看、斷點控制等調(diào)試操作。
ADS中包含有3個調(diào)試器:
●?AXD(ARMeXtendedDebugger):ARM擴展調(diào)試器。
●?armsd(ARMSymbolicDebugger):ARM符號調(diào)試器。
●與老版本兼容的Windows或Unix下的ARM調(diào)試工具:ADW/ADU(ApplicationDebuggerWindows/Unix)。下面對在調(diào)試映像文件中所涉及到的一些方法作一個簡單的介紹。
(1)?Debugtarget。在軟件開發(fā)的最初階段,可能還沒有具體的硬件設(shè)備。如果要測試所開發(fā)的軟件是否達到了預(yù)期的效果,則可以由軟件仿真來完成。即使調(diào)試器和要測試的軟件運行在同一臺PC上,也可以把目標(biāo)當(dāng)作一個獨立的硬件來看待。
當(dāng)然,也可以搭建一個PCB板,這個板上可以包含一個或多個處理器,在這個板上可以運行和調(diào)試應(yīng)用軟件。只有當(dāng)通過硬件測試或軟件仿真所得到的結(jié)果達到了預(yù)期的效果,才算是完成了應(yīng)用程序的編寫工作。調(diào)試器能夠發(fā)送以下指令:
①裝載映像文件到目標(biāo)內(nèi)存。
②啟動或停止程序的執(zhí)行。
③顯示內(nèi)存、寄存器或變量的值。
④允許用戶改變存儲的變量值。
(2)?Debugagent。Debugagent執(zhí)行調(diào)試器發(fā)出的命令動作,如設(shè)置斷點、從存儲器中讀數(shù)據(jù)、把數(shù)據(jù)寫到存儲器等。Debugagent既不是被調(diào)試的程序,也不是調(diào)試器。在ARM體系中,有這樣幾種調(diào)試方式:Multi-ICE(Multi-processorin-circuitemulator),ARMulator和Angel。其中Multi-ICE是一個獨立的產(chǎn)品,是ARM公司自己的JTAG在線仿真器,不是由ADS提供的。
AXD是ADS軟件中獨立于CodeWarriorIDE的圖形軟件。打開AXD軟件,默認打開的目標(biāo)是ARMulator,它是調(diào)試的時候最常用的一種調(diào)試工具。AXD可以在Windows和Unix下進行程序的調(diào)試。它為用C、C++和匯編語言編寫的源代碼提供了一個全面的Windows和Unix環(huán)境。
2.AXD調(diào)試器的使用
要使用AXD必須首先要生成含有調(diào)試信息的程序,前面已經(jīng)生成的ledcircle.axf或main.axf就是含有調(diào)試信息的可執(zhí)行ELF格式的映像文件。
(1)在AXD中打開映像文件。在菜單File中選擇“Loadimage”選項,打開LoadImage對話框,找到要裝載的?.axf映像文件,單擊“打開”按鈕,把映像文件裝載到目標(biāo)內(nèi)存中。在所打開的映像文件中會有一個藍色的箭頭指示當(dāng)前執(zhí)行的位置,如圖8-9所示。圖8-9在AXD中打開映像文件
(2)查看存儲器內(nèi)容。在程序運行前,可以先查看變量的當(dāng)前值。方法是從ProcessorViews菜單中選擇“Memory”選項,如圖8-10所示。在MemoryStartaddress選擇框中,用戶可以根據(jù)要查看的存儲器的地址輸入起始地址,在下面的表格中會列出連續(xù)的64個地址。圖8-10查看存儲器內(nèi)容
(3)設(shè)置斷點??梢栽诔绦蛑性O(shè)置斷點:將光標(biāo)定位在指定語句處,使用快捷鍵F9在該處設(shè)置斷點。按F5鍵,程序?qū)⑦\行到斷點處。如果讀者想查看子函數(shù)Delay是如何運行的,則可以在Execute菜單中選擇“StepIn”選項,或按下F8鍵,進入到子函數(shù)內(nèi)部進行單步程序的調(diào)試。
(4)查看變量值。如果用戶希望查看函數(shù)內(nèi)部某個變量的值,比如查看變量i的值,則可以在ProcessorViews菜單中選擇“Watch”,會出現(xiàn)如圖8-11所示的watch窗口,然后用鼠標(biāo)選中變量i,單擊鼠標(biāo)右鍵,在快捷菜單中選中“Addtowatch”,這樣變量i默認是添加到watch窗口的Tab1中。程序運行過程中,用戶可以看到變量i的值在不斷地變化。圖8-11查看變量變量數(shù)值默認情況下是以十六進制格式顯示的。如果用戶不習(xí)慣這種顯示格式,可以通過在watch窗口點擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Format”選項,如圖8-12所示,用戶可以選擇所查看的變量顯示數(shù)據(jù)的格式。圖8-12改變變量的顯示格式 8.3嵌入式系統(tǒng)的調(diào)試方法
8.3.1嵌入式系統(tǒng)調(diào)試簡介
調(diào)試是嵌入式系統(tǒng)開發(fā)過程中必不可少的重要環(huán)節(jié),通用計算機應(yīng)用系統(tǒng)與嵌入式系統(tǒng)的調(diào)試環(huán)境存在明顯差異。在一般的桌面操作系統(tǒng)中,調(diào)試器和被調(diào)試的程序常常位于同一臺計算機上,操作系統(tǒng)也相同。例如,在Windows平臺上利用VisualC++語言等開發(fā)應(yīng)用程序,調(diào)試器進程通過操作系統(tǒng)提供的接口來控制被調(diào)試的程序。而在嵌入式系統(tǒng)中,開發(fā)主機和目標(biāo)主機處于不同的機器中,程序在開發(fā)主機上進行開發(fā)(如編輯、交叉編譯、鏈接定位等),然后裝載到目標(biāo)機(嵌入式系統(tǒng))進行運行和調(diào)試,即遠程調(diào)試。這樣的方式引出了以下問題:位于不同操作系統(tǒng)(機器)之上的調(diào)試器與被調(diào)試程序之間如何通信,被調(diào)試程序如果出現(xiàn)異常現(xiàn)象將如何告知調(diào)試器,調(diào)試器又如何控制以及訪問被調(diào)試程序等。目前,在嵌入式調(diào)試系統(tǒng)中有兩種常用的調(diào)試方式可以解決上述問題,即monitor方式和片上調(diào)試方式。
monitor方式指的是在目標(biāo)操作系統(tǒng)與調(diào)試器內(nèi)分別添加一些功能模塊,兩者互相通信來實現(xiàn)調(diào)試功能。調(diào)試器與目標(biāo)操作系統(tǒng)通過指定的通信端口并依賴遠程調(diào)試協(xié)議來實現(xiàn)通信。目標(biāo)操作系統(tǒng)的所有異常處理最終都必須轉(zhuǎn)向通信模塊,通知調(diào)試器此時的異常號,調(diào)試器再依據(jù)該異常號向用戶顯示被調(diào)試程序發(fā)生了哪一類型的異常現(xiàn)象。調(diào)試器控制及訪問被調(diào)試程序的請求都將被轉(zhuǎn)換為對調(diào)試程序的地址空間或目標(biāo)平臺的某些寄存器的訪問。這使得目標(biāo)操作系統(tǒng)接收到此類請求時,可以直接進行處理。采用monitor方式時,目標(biāo)操作系統(tǒng)必須提供支持遠程調(diào)試協(xié)議的通信模塊和多任務(wù)調(diào)試接口;此外還需要改寫異常處理的相關(guān)部分;需要定義一個設(shè)置斷點的函數(shù)。片上調(diào)試方式是在處理器內(nèi)部嵌入額外的硬件控制模塊,當(dāng)滿足了特定的觸發(fā)條件時,進入某種特殊的狀態(tài)。在該狀態(tài)下,被調(diào)試程序停止運行,主機的調(diào)試器可以通過處理器外部特殊設(shè)置的通信接口來訪問系統(tǒng)資源并執(zhí)行指令。主機通信端口與目標(biāo)板調(diào)試通信接口通過一塊簡單的信號轉(zhuǎn)換電路板連接。內(nèi)嵌的控制模塊以監(jiān)控器或純硬件資源的形式存在,包括一些提供給用戶的接口,如JTAG方式。8.3.2ARM調(diào)試系統(tǒng)概述
在嵌入式應(yīng)用系統(tǒng)中,通常將運行目標(biāo)程序的計算機系統(tǒng)稱為目標(biāo)機。由于目標(biāo)系統(tǒng)中常常沒有進行輸入/輸出處理的人機接口,因此需要在另外一臺計算機上運行調(diào)試程序。這臺運行調(diào)試程序的計算機通常是一臺PC機,稱為宿主機或調(diào)試機。主機和目標(biāo)機之間通過一定的信道進行通信。這樣,一個調(diào)試系統(tǒng)通常包括3個部分:主機、目標(biāo)機、主機和目標(biāo)機之間的通信信道。ARM調(diào)試系統(tǒng)的結(jié)構(gòu)如圖8-13所示。圖8-13ARM調(diào)試系統(tǒng)的結(jié)構(gòu)通常運行在目標(biāo)機上的嵌入式調(diào)試部件稱為調(diào)試代理(Debugagent),它能夠接收主機上調(diào)試器發(fā)來的命令,并可以在目標(biāo)程序中設(shè)置斷點、單步執(zhí)行目標(biāo)程序、顯示程序斷點處的運行狀態(tài)(如寄存器和內(nèi)存值等)。在ARM體系中,調(diào)試代理有以下四種實現(xiàn)方式:
(1)基于JTAG的ICE類型的調(diào)試代理。基于JTAG仿真器的調(diào)試代理是目前ARM開發(fā)中采用最多的一種方式,ARM公司的Multi-ICE以及EmbeddedICE屬于這種類型的調(diào)試代理。這類調(diào)試代理利用ARM處理器中的JTAG接口以及一個嵌入的調(diào)試單元實現(xiàn)和主機上的調(diào)試器之間的通信,雖然價格昂貴,但使用方法簡單,調(diào)試快捷方便,無需占用系統(tǒng)資源。這類調(diào)試代理主要完成以下工作:①實時設(shè)置基于指令地址值或基于數(shù)據(jù)值的斷點。
②控制程序單步執(zhí)行。
③訪問并控制ARM處理器內(nèi)核。
④訪問ASIC系統(tǒng)。
⑤訪問系統(tǒng)中的存儲器。
⑥訪問I/O系統(tǒng)。
(2)Angel調(diào)試監(jiān)控程序。該程序包括在主機上運行的調(diào)試器和在目標(biāo)機上運行的Monitor。通過串口通信,Angel調(diào)試監(jiān)控程序具有基本調(diào)試、通信、任務(wù)管理、異常行為處理等功能,可以接收主機上調(diào)試器發(fā)出的命令,執(zhí)行諸如設(shè)置斷點、單步執(zhí)行目標(biāo)程序、觀察或修改寄存器/存儲器內(nèi)容之類的操作。使用Angel調(diào)試監(jiān)控程序可以調(diào)試在目標(biāo)系統(tǒng)上運行的ARM程序或Thumb程序。雖然Angel調(diào)試監(jiān)控程序成本低,但是與基于JTAG的調(diào)試代理不同,它需要占用目標(biāo)機一定的系統(tǒng)資源,如內(nèi)存、串行端口等。此外,Angel調(diào)試監(jiān)控程序還需要軟件支持,或者是嵌入式操作系統(tǒng)的支持,做不到完全的實時仿真。而JTAG仿真是通過硬件和控制EmbeddedICE實現(xiàn)的,可以做到實時仿真。
(3)?ARMulator。這是一種比較特殊的調(diào)試代理。與其他的調(diào)試代理運行在目標(biāo)機上有所不同,它獨立于處理器硬件而運行在主機上,是一個指令級的仿真程序。使用ARMulator時,不需要硬件目標(biāo)系統(tǒng)就可以開發(fā)運行于特定ARM處理器上的應(yīng)用程序。由于ARMulator能夠報告各指令的執(zhí)行時間及其周期,因此它還能用來進行應(yīng)用程序的性能分析。但是,模擬器畢竟是以一種處理器模擬另一種處理器的運行,在指令執(zhí)行時間、中斷響應(yīng)、定時器等方面很可能與實際處理器有相當(dāng)?shù)牟顒e。另外,它無法和ICE(在線實時仿真器)一樣,仿真嵌入式系統(tǒng)在應(yīng)用系統(tǒng)中的實際執(zhí)行情況。
(4)調(diào)試網(wǎng)關(guān)。通過調(diào)試網(wǎng)關(guān),主機上的調(diào)試器可以使用Agilent公司的仿真模塊開發(fā)基于ARM的應(yīng)用系統(tǒng)。
在主機和目標(biāo)機之間需要一定的通信信道,通常使用的是串行端口、并行端口或者以太網(wǎng)卡。在主機和目標(biāo)機之間進行數(shù)據(jù)通信時要使用一定的通信協(xié)議,這使得主機上的調(diào)試器能夠使用一個統(tǒng)一的接口來與不同的調(diào)試代理進行通信。目前廣泛使用的協(xié)議是ADP(AngelDebugProtocol),它是一個基于數(shù)據(jù)包的通信協(xié)議,具有糾錯功能。8.3.3基于Angel的調(diào)試系統(tǒng)
1.基于Angel的調(diào)試系統(tǒng)簡介
基于Angel的調(diào)試系統(tǒng)由主機上的調(diào)試器和目標(biāo)機上的Angel調(diào)試監(jiān)控程序兩部分組成,這兩部分之間通過一定的通信信道連接,通常使用的信道是串行口,并通過調(diào)試協(xié)議ADP進行通信。圖8-14所示是一個典型的Angel調(diào)試系統(tǒng)的結(jié)構(gòu)。圖8-14一個典型的Angel調(diào)試系統(tǒng)的結(jié)構(gòu)
(1)位于主機上的調(diào)試器(Debugger):用于接收用戶命令,將其發(fā)送到位于目標(biāo)機上的Angel,使其執(zhí)行相應(yīng)的操作,并將目標(biāo)機上Angel返回的數(shù)據(jù)以一定格式顯示給用戶。ARM公司提供的各調(diào)試器都支持Angel。對于其他的調(diào)試器,如果它支持Angel所使用的調(diào)試協(xié)議ADP,則也可以支持Angel。
(2)位于目標(biāo)機上的Angel調(diào)試監(jiān)控程序:用于接收主機上調(diào)試器傳來的命令,并返回相應(yīng)的數(shù)據(jù)。通常Angel有兩個版本——完整版本和最小版本。完整版本包含所有的Angel功能,可以用于調(diào)試應(yīng)用系統(tǒng);最小版本只包含一些有限的功能,可以包含在最終的產(chǎn)品中。主機上的調(diào)試器通常由下面幾部分組成:
①調(diào)試器:可以是ARM公司的調(diào)試器,如ADW和ADU等,也可以是第三方的調(diào)試器。
②調(diào)試器工具盒:是調(diào)試器和RDI(RemoteDebugInterface,遠程調(diào)試接口)之間的界面。
③ADP支持部件:提供RDI與ADP消息之間的協(xié)議轉(zhuǎn)換。
④BOOT支持部件:用于建立主機和目標(biāo)機之間的通信連接。
⑤C語言庫支持部件:用于處理目標(biāo)C語言庫的semihosting請求。⑥主機通道管理:管理主機上的通信通道,可以提供高層次的通信功能。
⑦主機設(shè)備驅(qū)動程序:實現(xiàn)主機上的通信設(shè)備功能,可以為主機通道管理提供需要的服務(wù)。
目標(biāo)機上的Angel調(diào)試監(jiān)控程序由以下部件組成:
①目標(biāo)機設(shè)備驅(qū)動程序:實現(xiàn)目標(biāo)機上的通信設(shè)備功能,可以為目標(biāo)機通道管理提供需要的服務(wù)。
②目標(biāo)機通道管理:管理目標(biāo)機上的通信通道,可以提供高層次的通信功能。
③通用調(diào)試部件:使用目標(biāo)機通道與主機通信,處理ADP消息并接收主機發(fā)送的請求。④與目標(biāo)系統(tǒng)相關(guān)的調(diào)試部件:提供與具體目標(biāo)系統(tǒng)相關(guān)的調(diào)試功能。
⑤異常中斷支持部件:處理所有的ARM異常中斷。
⑥C語言庫支持部件:提供對目標(biāo)C語言庫以及semihosting請求的支持。
⑦引導(dǎo)以及初始化部件:完成諸如啟動檢查、設(shè)備驅(qū)動程序設(shè)置、存儲系統(tǒng)和數(shù)據(jù)棧等的設(shè)置、將引導(dǎo)信息發(fā)送到主機上的調(diào)試器等操作。目標(biāo)機上的Angel主要完成了以下功能:
①基本的調(diào)試功能:包括報告存儲器和處理器狀態(tài)、將應(yīng)用程序下載到目標(biāo)系統(tǒng)中、設(shè)置斷點等。
②C語言庫的支持:在目標(biāo)系統(tǒng)上運行的應(yīng)用程序可以與C語言庫連接。其中有些C語言庫需要semihosting支持,Angel使用SWI機制完成這些semihosting請求。在ARM程序中,Angel使用的SWI號為0x123456;在Thumb程序中,Angel使用的SWI號為0xab。③通信支持:Angel使用ADP通信協(xié)議,并支持串行端口、并行端口和以太網(wǎng)接口這三種通信信道。主機和目標(biāo)機上的通道管理部件保證邏輯通道能夠被可靠地復(fù)用,并監(jiān)視通道的使用情況,處理帶寬溢出等情況。主機和目標(biāo)機上的設(shè)備驅(qū)動程序處理數(shù)據(jù)包的發(fā)送和接收,能夠檢測并扔掉發(fā)生錯誤的數(shù)據(jù)包。
④任務(wù)管理功能:保證任何時候只有一個操作在執(zhí)行;為一個任務(wù)分配優(yōu)先級并根據(jù)優(yōu)先級調(diào)度一個任務(wù);控制Angel運行環(huán)境的處理器模式。
⑤異常中斷處理:Angel使用除了復(fù)位異常中斷以外的其他ARM異常中斷。
2.使用Angel的調(diào)試應(yīng)用程序
1)使用Angel所需要的資源
使用Angel所需要的資源包括以下幾個方面:
(1)系統(tǒng)資源。
(2)內(nèi)存資源。
(3)異常中斷向量。
(4)FIQ及IRQ異常中斷。
(5)數(shù)據(jù)棧。
2)使用完整版本的Angel調(diào)試應(yīng)用程序
完整版本的Angel獨立存在于目標(biāo)系統(tǒng)中,并支持所有的調(diào)試功能。使用完整版本的Angel開發(fā)應(yīng)用程序主要從以下幾個方面著手:
(1)確定開發(fā)應(yīng)用程序時需要規(guī)劃的內(nèi)容。在著手開發(fā)應(yīng)用程序之前,必須確定以下選項:
①應(yīng)用程序使用的ATPC調(diào)用標(biāo)準(zhǔn)。
②在應(yīng)用程序中是否包含ARM程序和Thumb程序的相互調(diào)用。
③目標(biāo)系統(tǒng)的內(nèi)存模式。④在生成的映像文件中是否包含調(diào)試時需要的信息。這將影響目標(biāo)映像文件的大小和代碼的可調(diào)試性。
⑤目標(biāo)系統(tǒng)的通信需求。用戶需要設(shè)計通信時使用的各個設(shè)備的驅(qū)動程序。
⑥目標(biāo)系統(tǒng)中的存儲器大小。目標(biāo)系統(tǒng)中的存儲器必須能夠保存Angel和應(yīng)用程序,并且必須能夠提供程序運行需要的存儲空間。
⑦最終產(chǎn)品中是否包含最小版本的Angel。如果不包含,用戶必須自己編寫系統(tǒng)引導(dǎo)和初始化部分的代碼,并處理系統(tǒng)中的異常中斷。
⑧在最終產(chǎn)品中是否需要C語言運行庫的支持。如果需要,則用戶必須自己實現(xiàn)這些C語言運行庫的支持函數(shù)。因為在最終產(chǎn)品中不能使用semihosting請求主機資源。
(2)明確編程限制。在使用完整版的Angel開發(fā)應(yīng)用程序時,由于Angel需要一定的資源,因此給程序設(shè)計帶來了一定的限制。這些限制包括:
①Angel需要使用自己的處理器特權(quán)模式下的數(shù)據(jù)線,因此在Angel和實時操作系統(tǒng)RTOS一起使用時,必須確保在Angel運行時,RTOS不會切換處理器模式,否則可能造成死機。
②用戶應(yīng)用程序盡量避免使用SWI0x123456以及SWI0xab。這兩個SWI異常中斷號保留給Angel使用。Angel使用它們來實現(xiàn)目標(biāo)程序中C語言運行時庫的semihosting請求。③如果用戶應(yīng)用程序中使用了SWI,?則在退出該SWI時必須將各寄存器的值還原成進入SWI時的值。
④如果應(yīng)用程序中需要使用未定義的指令異常中斷,必須注意Angel使用了該異常中斷。
(3)如果用戶應(yīng)用程序在處理器特權(quán)模式下執(zhí)行,則必須設(shè)置應(yīng)用程序自己的特權(quán)模式數(shù)據(jù)棧。Angel在進入SWI時,需要使用應(yīng)用程序的特權(quán)模式數(shù)據(jù)棧中4個字節(jié)的空間;在進入SWI后,Angel將使用自己的特權(quán)模式的數(shù)據(jù)棧。因此,當(dāng)應(yīng)用程序在特權(quán)模式下調(diào)用Angel的SWI時,必須保證它的特權(quán)模式數(shù)據(jù)棧為FD(滿且地址遞減)類型,并有足夠Angel進入SWI時需要的可用空間。
(4)異常中斷處理程序連接。Angel使用除了復(fù)位異常中斷以外的其他ARM異常中斷,包括SWI異常中斷、未定義指令異常中斷、數(shù)據(jù)中止和指令預(yù)取中止異常中斷、FIQ及IRQ異常中斷。這樣,如果用戶應(yīng)用程序需要使用其中的某些異常中斷,則用戶應(yīng)用程序中相應(yīng)的異常中斷處理程序必須恰當(dāng)?shù)剡B接到Angel中異常中斷處理程序上,否則可能會使Angel無法正常工作。
(5)?確定C語言運行庫的使用方式。ARM公司隨ADS(SDT)一起提供的C語言運行庫通過Angel的SWI來實現(xiàn)semihosting請求。用戶應(yīng)用程序中可以連接C語言運行庫,具體方法如下:
①在應(yīng)用程序開發(fā)工程中使用ARMC語言運行庫,在最終的產(chǎn)品中使用用戶自己的C語言運行庫或者操作系統(tǒng)提供的C語言運行庫。
②在用戶應(yīng)用程序中實現(xiàn)AngelSWI,然后在應(yīng)用程序或者操作系統(tǒng)中使用ARMC語言運行庫。
③用戶重新實現(xiàn)ARMC語言運行庫,使之適應(yīng)于自己的使用環(huán)境。ARMC語言運行庫是以源代碼形式提供的。
④在用戶啟動代碼中使用EmbbedC。
(6)在調(diào)試時使用斷言(assertions)。在Angel代碼中包含了大量的斷言,這些斷言是通過ASSERT_ENABLED來使能或禁止的。如果用戶應(yīng)用程序希望使用這種機制,則可以使用下面的格式將相應(yīng)的斷言語句包含起來:
#ifASSERT_ENABLED
…
#endif
(7)斷點的設(shè)置。Angel只能在ARM中設(shè)置斷點,不能在ROM以及FLASH中設(shè)置斷點。此外,在異常中斷處理程序中設(shè)置斷點時要非常小心。
3)使用最小版本的Angel開發(fā)應(yīng)用程序
最小版本的Angel只包含了Angel的部分功能。它不能用來調(diào)試應(yīng)用程序,只能在應(yīng)用程序開發(fā)的最后階段,將其與應(yīng)用程序連接在一起,從而提供一定的引導(dǎo)和初始化的功能。最小版本的Angel不包括以下功能:
(1)調(diào)試協(xié)議ADP。最小版本的Angel與主機的通信是基于字節(jié)流的。
(2)在ADP上的可靠通信。
(3)目標(biāo)機上的C語言運行庫的semihosting請求。
(4)在一個設(shè)備上復(fù)用多個通信通道。
(5)未定義的指令異常中斷。
(6)任務(wù)管理。
4)使用Angel下載應(yīng)用程序
可以通過以下多種方法使用Angel下載應(yīng)用程序:
(1)使用Angel通過串行口下載應(yīng)用程序。這種方法的優(yōu)點是只需要一個簡單的串行口就可以下載應(yīng)用程序。如果目標(biāo)系統(tǒng)支持FLASH的寫入操作,則這種方式還可以將應(yīng)用程序?qū)懭氲紽lashMemory中。
(2)使用Angel通過串行口和并行口下載應(yīng)用程序。這種方式能夠提供中等的下載速度。如果目標(biāo)系統(tǒng)支持FlashMemory的寫入操作,則這種方式還可以將應(yīng)用程序?qū)懭氲紽lashMemory中。
(3)使用Angel通過以太網(wǎng)接口下載應(yīng)用程序。這時可以提供很快的下載速度,但是需要目標(biāo)系統(tǒng)中有以太網(wǎng)接口以及相關(guān)的驅(qū)動程序。如果目標(biāo)系統(tǒng)支持FlashMemory的寫入操作,則這種方式還可以將應(yīng)用程序?qū)懭氲紽lashMemory中。
(4)FlashMemory燒入。這時目標(biāo)系統(tǒng)中要有FlashMemory以及相應(yīng)的燒入程序。
(5)使用ROM仿真器下載應(yīng)用程序。
(6)整片地?zé)隦OM或者EPROM。8.3.4基于JTAG的調(diào)試系統(tǒng)
1.基于JTAG的調(diào)試系統(tǒng)概述
JTAG是JointTestActionGroup的縮寫,是IEEE1149.1標(biāo)準(zhǔn)?;贘TAG的調(diào)試方法是目前ARM開發(fā)中采用最多的一種方式?;贘TAG的調(diào)試系統(tǒng)連接比較方便,實現(xiàn)價格比較便宜,實現(xiàn)了完全非插入式調(diào)試,且不使用片上資源,不需要目標(biāo)存儲器,不占用目標(biāo)系統(tǒng)的任何端口,可以做到實時仿真。
一個典型的基于JTAG的調(diào)試系統(tǒng)結(jié)構(gòu)如圖8-15所示。圖8-15基于JTAG的調(diào)試系統(tǒng)結(jié)構(gòu)目標(biāo)系統(tǒng)就是包括硬件嵌入式部件的調(diào)試對象。如圖8-16所示,以一個典型的ARM7TDMI處理器內(nèi)核為例,目標(biāo)系統(tǒng)主要包括以下三個部分:
(1)需要進行調(diào)試的處理器內(nèi)核。
(2)EmbbeddedICE邏輯電路,包括一組寄存器和比較器,可以用來產(chǎn)生調(diào)試時需要的異常中斷,如產(chǎn)生斷點等。
(3)?TAP控制器,可以提供JTAG接口控制各個硬件掃描鏈。圖8-16一個典型的目標(biāo)系統(tǒng)JTAG調(diào)試結(jié)構(gòu)
2.基于JTAG的調(diào)試過程
在ARM開發(fā)調(diào)試時,首先要通過一定的方式使目標(biāo)系統(tǒng)進入調(diào)試狀態(tài),然后在調(diào)試狀態(tài)下完成各種調(diào)試功能,例如查看處理器狀態(tài)、查看和修改存儲器內(nèi)容等。ARM7TDMI可以通過以下三種格式進入調(diào)試狀態(tài):
(1)通過設(shè)置程序斷點(breakpoint)。
(2)通過設(shè)置數(shù)據(jù)斷點(watchpoint)。
(3)通過相應(yīng)的外部請求進入調(diào)試狀態(tài)。 8.4其他實用工具
8.4.1SourceInsight
1.SourceInsight簡介
SourceInsight是Windows支持的一個功能強大的程序編輯器,內(nèi)置了對C/C++、Java和x86匯編語言程序的解析,并通過動態(tài)數(shù)據(jù)庫使得在源碼編輯時提供有用的文本提示,如有關(guān)的函數(shù)、宏、參數(shù)等。當(dāng)SourceInsight和ARMADS配合使用時,不會因為兩個軟件打開同一個文件而發(fā)生錯誤,因此可以在SourceInsight編輯源碼,然后在ARMADS中進行編譯。與其他的編輯器相比,SourceInsight具有以下技術(shù)特點:
(1)?SourceInsight提供了可快速訪問源代碼和源信息的功能。與其他的編輯器產(chǎn)品不同,它還可以幫助用戶分析源代碼,并在用戶編輯的同時立刻提供有用的信息和分析。
(2)?SourceInsight可自動創(chuàng)建并維護自己高性能的符號數(shù)據(jù)庫,包括函數(shù)、method、全局變量、結(jié)構(gòu)、類和工程源文件里定義的其他類型的符號。SourceInsight可以迅速地更新用戶的文件信息,并將符號數(shù)據(jù)庫的符號自動創(chuàng)建到用戶的工程文件中。
(3)?SourceInsight可將變量類型動態(tài)分解。
(4)?SourceInsight的符號窗口顯示在每個源窗口的旁邊,可以動態(tài)更新。
(5)?SourceInsight2.0增加了一個新特點——引進了Context窗口。Context窗口在背景中更新,并且追蹤正在進行的編輯任務(wù)。只要用戶點擊標(biāo)識符,Context窗口就會自動顯示符號的定義。若標(biāo)識符是個變量,則在Context窗口中會顯示出它的基礎(chǔ)結(jié)構(gòu)(basestructure)或類型。Context窗口還可以在工程窗口中自動顯示所選定的文件、相關(guān)窗口的符號和Clip窗口中選定的Clip。
(6)語法格式化是SourceInsight的重要的新功能。它提供了許多先進的顯示功能,包括帶有用戶定義功能的文本格式等。
2.SourceInsight的使用方法
安裝SourceInsight的系統(tǒng)需求包括:
·操作系統(tǒng):Windows95以上。
·處理器:Pentium或更快,建議使用Pentium?Ⅱ以上。
·內(nèi)存:大于64MB。
SourceInsight的安裝非常簡單。和其他軟件的安裝一樣,雙擊安裝文件名,然后按提示進行就可以完成。下面簡單介紹一下SourceInsight的使用方法。
(1)啟動SourceInsight,選擇Project菜單下的new,新建一個工程,輸入工程名。
(2)在AddandRemoveFiles中把要讀的源代碼(包括*.c和*.h文件)加入到SourceInsight的工程中,用該軟件分析所加的源代碼。
(3)分析完后,可以進行源代碼閱讀。
(4)對于打開的閱讀文件,如果想查看某一變量的定義,可先把光標(biāo)定位于該變量,然后單擊工具條上的相應(yīng)選項,該變量的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《沉箱預(yù)制施工方案》課件
- 小學(xué)五年級數(shù)學(xué)上期小數(shù)點乘除法計算練習(xí)題合集
- 七年級生物上冊第一單元生物和生物圈知識點總結(jié)(新版)新人教版
- 教師資格證考試普通話要求
- 《切事故都可以預(yù)防》課件
- 二年級上冊11 葡萄溝(教案)
- 瀝青砼攤鋪合同協(xié)議書
- 焊接培訓(xùn)資料:焊接應(yīng)力的消除
- 健康行業(yè)助理工作總結(jié)評述
- 電梯電梯銷售經(jīng)理銷售業(yè)績總結(jié)
- DB34∕T 4638-2023 創(chuàng)新型智慧園區(qū)建設(shè)與管理規(guī)范
- 巴渝文化探究課程設(shè)計
- 江蘇省南京市2025屆高三第一次調(diào)研考試(一模)英語試題含解析
- 無人機配送行業(yè)市場機遇分析
- 全國英語等級考試三級閱讀真題
- 數(shù)據(jù)庫原理-期末考試復(fù)習(xí)題及答案
- 2024至2030年版四川省路燈行業(yè)分析報告
- 電網(wǎng)工程施工安全基準(zhǔn)風(fēng)險指南
- 蘇科版九年級物理上冊教案:11.5機械效率
- DL∕T 2602-2023 電力直流電源系統(tǒng)保護電器選用與試驗導(dǎo)則
- DL∕T 612-2017 電力行業(yè)鍋爐壓力容器安全監(jiān)督規(guī)程
評論
0/150
提交評論