新聞中心

EEPW首頁(yè) > EDA/PCB > 調(diào)試你的嵌入式軟件

調(diào)試你的嵌入式軟件

——
作者: 時(shí)間:2006-12-19 來(lái)源: 收藏
軟件調(diào)試工具的目的就是盡可能的揭露CPU內(nèi)部工作情況和軟件的執(zhí)行狀態(tài)。軟件開(kāi)發(fā)者用不同的專業(yè)化工具來(lái)調(diào)試固件(具有軟件功能的硬件),而用來(lái)描述它們的術(shù)語(yǔ)卻容易引起混淆。下面就是這些工具的概述。
內(nèi)部電路仿真器(in-circuit emulator, ICE)

ICE是用來(lái)仿真CPU核心的設(shè)備,它可以在不干擾運(yùn)算器的正常運(yùn)行情況下,實(shí)時(shí)的檢測(cè)CPU的內(nèi)部工作情況。像桌面調(diào)試軟件所提供的:復(fù)雜的條件斷點(diǎn)、先進(jìn)的實(shí)時(shí)跟蹤、性能分析和端口分析這些功能,它也都能提供。

ICE一般都有一個(gè)比較特殊的CPU,稱為外合(bond-out)CPU。這是一種被打開(kāi)了封裝的CPU,并且通過(guò)特殊的連接,可以訪問(wèn)到CPU的內(nèi)部信號(hào),而這些信號(hào),在CPU被封裝時(shí),是沒(méi)法“看到”的。

當(dāng)和工作站上強(qiáng)大的調(diào)試軟件聯(lián)合使用時(shí),ICE就能提供你所能找到的最全面的調(diào)試功能。但I(xiàn)CE同樣有一些缺點(diǎn):昂貴;不能全速工作;同樣,并不是所有的CPU都可以作為外合CPU的,從另一個(gè)角度說(shuō),這些外合CPU也不大可能及時(shí)的被新出的CPU所更換。

ROM監(jiān)控器(ROM monitor)

ROM監(jiān)控器是一小程序,駐留在嵌入系統(tǒng)ROM中,通過(guò)串行的或網(wǎng)絡(luò)的連接和運(yùn)行在工作站上的調(diào)試軟件通信。這是一種便宜的方式,當(dāng)然也是最低端的技術(shù)。

它除了要求一個(gè)通信端口和少量的內(nèi)存空間外,不需要其它任何專門(mén)的硬件。并提供了如下功能:下載代碼、運(yùn)行控制、斷點(diǎn)、單步步進(jìn)、以及觀察、修改寄存器和內(nèi)存。

因?yàn)镽OM監(jiān)控器是操作軟件的一部分,只有當(dāng)你的應(yīng)用程序運(yùn)行時(shí),它才會(huì)工作。如果你想檢查CPU和應(yīng)用程序的狀態(tài),你就必須停下應(yīng)用程序,再次進(jìn)入ROM監(jiān)控器。

在線調(diào)試(on-chip debugging, OCD)或在線仿真(on-chip emulator)

特別的硅基材料以及定制和CPU管腳的串行連接,在這種特殊的CPU芯片上使用OCD,才能發(fā)揮出OCD的特點(diǎn)。用低端適配器就可以把OCD端口和主工作站以及前端調(diào)試軟件連接起來(lái)。從OCD的基本形式看來(lái),它的特點(diǎn)和單一的ROM監(jiān)測(cè)器是一致的,但是不像后者需要專門(mén)的程序以及額外的通信端口。

有兩種普遍的OCD接口:

摩托羅拉的背景調(diào)試監(jiān)測(cè)(Motorola’s Background Debug Monitor,BDM)

Joint Test Action Group(JTAG):雖然它最初開(kāi)發(fā)出來(lái)是為了監(jiān)測(cè)IC和電路連接,但是這種串行接口擴(kuò)展了用途,包括對(duì)調(diào)試的支持。

這些接口在底層方面的操作差異較大,但是BDM和JTAG仿真器給終端用戶提供同樣的便利。

近來(lái),更多的加強(qiáng)型OCD接口提供額外的管腳來(lái)收集實(shí)時(shí)跟蹤信息。顯而易見(jiàn),用狹窄的串行接口來(lái)捕獲快速的實(shí)時(shí)跟蹤信息是比較吃力的。但是,高端調(diào)試軟件可以讓加強(qiáng)型OCD接口模擬ICE的功能,而且,這樣做的成本較低。

另有一些高端軟件的調(diào)試包把通過(guò)邏輯分析器收集的實(shí)時(shí)跟蹤信息和標(biāo)準(zhǔn)OCD端口的運(yùn)行控制特征包含到一起了

除了調(diào)試系統(tǒng)的高級(jí)工具,許多的項(xiàng)目能夠完美地使用諸如發(fā)光二極管(LED)、串口和示波器這樣的簡(jiǎn)單設(shè)備調(diào)試。

串行口


許多嵌入式的主板都具有一個(gè)RS232串行口,它允許你將調(diào)試信息傳送到PC工作站上標(biāo)準(zhǔn)的COM口上。如果你的嵌入式對(duì)象還有剩余的內(nèi)存空間,你就可以使用標(biāo)準(zhǔn)的puts()、printf()或者相等同的函數(shù)來(lái)發(fā)送有用的調(diào)試信息。

如果你正在使用Windows工作站,你就只需要運(yùn)行一個(gè)終端仿真器程序來(lái)顯示來(lái)自的嵌入式對(duì)象的調(diào)試信息。一個(gè)比較好的程序是HyperTerminal,它是Windows操作系統(tǒng)自帶的。我覺(jué)得一個(gè)更好的(免費(fèi))程序是Tera Term(Pro)。

發(fā)光二極管

一個(gè)簡(jiǎn)單的狀態(tài)LED在某些系統(tǒng)上可能被當(dāng)作奢侈品,但是它能夠極為有效地幫助調(diào)試。(至少我會(huì)認(rèn)為沒(méi)有什么別的東西能夠提供類似的功能。)

除了看到LED在代碼某個(gè)點(diǎn)處開(kāi)始發(fā)光或者閃爍所帶來(lái)的提示之外,你還可以使用長(zhǎng)或者短閃爍來(lái)表示大量的錯(cuò)誤和狀態(tài)報(bào)告——這只需要一點(diǎn)點(diǎn)想象力。這不是藝術(shù)的表現(xiàn),但是很多嵌入式系統(tǒng)的開(kāi)發(fā)人員只有一兩個(gè)或者稍多的LED來(lái)調(diào)試小型嵌入式系統(tǒng)。

示波器

示波器可能是基本調(diào)試輔助工具中最強(qiáng)大的一個(gè),而且它不僅僅只能夠用于調(diào)試硬件。

一個(gè)基本的模擬示波器就足夠了,但是有數(shù)字示波器會(huì)更好。好的示波器會(huì)有兩個(gè)或者更多的頻道,再加上一個(gè)額外的外部觸發(fā)脈沖輸入頻道,這個(gè)頻道帶有綜合觸發(fā)系統(tǒng)和延遲掃描。示波器能夠讓你看到你的程序?qū)ν獠慷丝诤屯庠O(shè)的訪問(wèn),并能夠監(jiān)測(cè)軟件的活動(dòng)。

下面是在你調(diào)試嵌入式軟件的時(shí)候應(yīng)用示波器的幾種方法:

  • 對(duì)你需要觀察的針對(duì)活動(dòng)的事件使用一個(gè)空余的外部輸出插腳,或者用這個(gè)插腳來(lái)顯示活動(dòng)的情況。
  • 在函數(shù)開(kāi)始的時(shí)候設(shè)置插腳,再在結(jié)束的時(shí)候拿掉它,以測(cè)量函數(shù)的執(zhí)行時(shí)間。你可以以類似的方式檢測(cè)中斷的潛伏時(shí)間。
  • 如果CPU卡在了循環(huán)里,那么就要檢查地址總線的狀態(tài),以大概地查看CPU卡在哪個(gè)地方了(當(dāng)然,這要假設(shè)你正在使用外部?jī)?nèi)存)。
  • 檢測(cè)中斷路,以查找阻塞的中斷,或者檢測(cè)外設(shè)未正常初始化而導(dǎo)致的中斷缺失。
  • 大多數(shù)調(diào)試工具都無(wú)法在系統(tǒng)初始啟動(dòng)的時(shí)候提供任何幫助,但是你可以在系統(tǒng)周期性復(fù)位的時(shí)候使用示波器,用以觀察地址和數(shù)據(jù)總線的活動(dòng),以追蹤C(jī)PU在復(fù)位之后的活動(dòng)進(jìn)展。
不要節(jié)約

最后,不要在高質(zhì)量的調(diào)試工具上節(jié)約。盡管這些基本的工具都是極其有用的,但是更加昂貴和綜合的工具如果能夠節(jié)省你數(shù)周昂貴的調(diào)試和工程努力,那么它們就總是物有所值的。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


關(guān)鍵詞: 嵌入式

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉