調試你的嵌入式軟件
內部電路仿真器(in-circuit emulator, ICE)
ICE是用來(lái)仿真CPU核心的設備,它可以在不干擾運算器的正常運行情況下,實(shí)時(shí)的檢測CPU的內部工作情況。像桌面調試軟件所提供的:復雜的條件斷點(diǎn)、先進(jìn)的實(shí)時(shí)跟蹤、性能分析和端口分析這些功能,它也都能提供。
ICE一般都有一個(gè)比較特殊的CPU,稱(chēng)為外合(bond-out)CPU。這是一種被打開(kāi)了封裝的CPU,并且通過(guò)特殊的連接,可以訪(fǎng)問(wèn)到CPU的內部信號,而這些信號,在CPU被封裝時(shí),是沒(méi)法“看到”的。
當和工作站上強大的調試軟件聯(lián)合使用時(shí),ICE就能提供你所能找到的最全面的調試功能。但ICE同樣有一些缺點(diǎn):昂貴;不能全速工作;同樣,并不是所有的CPU都可以作為外合CPU的,從另一個(gè)角度說(shuō),這些外合CPU也不大可能及時(shí)的被新出的CPU所更換。
ROM監控器(ROM monitor)
ROM監控器是一小程序,駐留在嵌入系統ROM中,通過(guò)串行的或網(wǎng)絡(luò )的連接和運行在工作站上的調試軟件通信。這是一種便宜的方式,當然也是最低端的技術(shù)。
它除了要求一個(gè)通信端口和少量的內存空間外,不需要其它任何專(zhuān)門(mén)的硬件。并提供了如下功能:下載代碼、運行控制、斷點(diǎn)、單步步進(jìn)、以及觀(guān)察、修改寄存器和內存。
因為ROM監控器是操作軟件的一部分,只有當你的應用程序運行時(shí),它才會(huì )工作。如果你想檢查CPU和應用程序的狀態(tài),你就必須停下應用程序,再次進(jìn)入ROM監控器。
在線(xiàn)調試(on-chip debugging, OCD)或在線(xiàn)仿真(on-chip emulator)
特別的硅基材料以及定制和CPU管腳的串行連接,在這種特殊的CPU芯片上使用OCD,才能發(fā)揮出OCD的特點(diǎn)。用低端適配器就可以把OCD端口和主工作站以及前端調試軟件連接起來(lái)。從OCD的基本形式看來(lái),它的特點(diǎn)和單一的ROM監測器是一致的,但是不像后者需要專(zhuān)門(mén)的程序以及額外的通信端口。
有兩種普遍的OCD接口:
摩托羅拉的背景調試監測(Motorola’s Background Debug Monitor,BDM)
Joint Test Action Group(JTAG):雖然它最初開(kāi)發(fā)出來(lái)是為了監測IC和電路連接,但是這種串行接口擴展了用途,包括對調試的支持。
這些接口在底層方面的操作差異較大,但是BDM和JTAG仿真器給終端用戶(hù)提供同樣的便利。
近來(lái),更多的加強型OCD接口提供額外的管腳來(lái)收集實(shí)時(shí)跟蹤信息。顯而易見(jiàn),用狹窄的串行接口來(lái)捕獲快速的實(shí)時(shí)跟蹤信息是比較吃力的。但是,高端調試軟件可以讓加強型OCD接口模擬ICE的功能,而且,這樣做的成本較低。
另有一些高端軟件的調試包把通過(guò)邏輯分析器收集的實(shí)時(shí)跟蹤信息和標準OCD端口的運行控制特征包含到一起了
除了調試嵌入式系統的高級工具,許多嵌入式的項目能夠完美地使用諸如發(fā)光二極管(LED)、串口和示波器這樣的簡(jiǎn)單設備調試。
串行口
許多嵌入式的主板都具有一個(gè)RS232串行口,它允許你將調試信息傳送到PC工作站上標準的COM口上。如果你的嵌入式對象還有剩余的內存空間,你就可以使用標準的puts()、printf()或者相等同的函數來(lái)發(fā)送有用的調試信息。
如果你正在使用Windows工作站,你就只需要運行一個(gè)終端仿真器程序來(lái)顯示來(lái)自的嵌入式對象的調試信息。一個(gè)比較好的程序是HyperTerminal,它是Windows操作系統自帶的。我覺(jué)得一個(gè)更好的(免費)程序是Tera Term(Pro)。
發(fā)光二極管
一個(gè)簡(jiǎn)單的狀態(tài)LED在某些系統上可能被當作奢侈品,但是它能夠極為有效地幫助調試。(至少我會(huì )認為沒(méi)有什么別的東西能夠提供類(lèi)似的功能。)
除了看到LED在代碼某個(gè)點(diǎn)處開(kāi)始發(fā)光或者閃爍所帶來(lái)的提示之外,你還可以使用長(cháng)或者短閃爍來(lái)表示大量的錯誤和狀態(tài)報告——這只需要一點(diǎn)點(diǎn)想象力。這不是藝術(shù)的表現,但是很多嵌入式系統的開(kāi)發(fā)人員只有一兩個(gè)或者稍多的LED來(lái)調試小型嵌入式系統。
示波器
示波器可能是基本調試輔助工具中最強大的一個(gè),而且它不僅僅只能夠用于調試硬件。
一個(gè)基本的模擬示波器就足夠了,但是有數字示波器會(huì )更好。好的示波器會(huì )有兩個(gè)或者更多的頻道,再加上一個(gè)額外的外部觸發(fā)脈沖輸入頻道,這個(gè)頻道帶有綜合觸發(fā)系統和延遲掃描。示波器能夠讓你看到你的程序對外部端口和外設的訪(fǎng)問(wèn),并能夠監測軟件的活動(dòng)。
下面是在你調試嵌入式軟件的時(shí)候應用示波器的幾種方法:
- 對你需要觀(guān)察的針對活動(dòng)的事件使用一個(gè)空余的外部輸出插腳,或者用這個(gè)插腳來(lái)顯示活動(dòng)的情況。
- 在函數開(kāi)始的時(shí)候設置插腳,再在結束的時(shí)候拿掉它,以測量函數的執行時(shí)間。你可以以類(lèi)似的方式檢測中斷的潛伏時(shí)間。
- 如果CPU卡在了循環(huán)里,那么就要檢查地址總線(xiàn)的狀態(tài),以大概地查看CPU卡在哪個(gè)地方了(當然,這要假設你正在使用外部?jì)却妫?
- 檢測中斷路,以查找阻塞的中斷,或者檢測外設未正常初始化而導致的中斷缺失。
- 大多數調試工具都無(wú)法在系統初始啟動(dòng)的時(shí)候提供任何幫助,但是你可以在系統周期性復位的時(shí)候使用示波器,用以觀(guān)察地址和數據總線(xiàn)的活動(dòng),以追蹤CPU在復位之后的活動(dòng)進(jìn)展。
不要節約
最后,不要在高質(zhì)量的調試工具上節約。盡管這些基本的工具都是極其有用的,但是更加昂貴和綜合的工具如果能夠節省你數周昂貴的調試和工程努力,那么它們就總是物有所值的。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論