新聞中心

        EEPW首頁 > EDA/PCB > 調試你的嵌入式軟件

        調試你的嵌入式軟件

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

        ICE是用來仿真CPU核心的設備,它可以在不干擾運算器的正常運行情況下,實時的檢測CPU的內部工作情況。像桌面調試軟件所提供的:復雜的條件斷點、先進的實時跟蹤、性能分析和端口分析這些功能,它也都能提供。

        ICE一般都有一個比較特殊的CPU,稱為外合(bond-out)CPU。這是一種被打開了封裝的CPU,并且通過特殊的連接,可以訪問到CPU的內部信號,而這些信號,在CPU被封裝時,是沒法“看到”的。

        當和工作站上強大的調試軟件聯合使用時,ICE就能提供你所能找到的最全面的調試功能。但ICE同樣有一些缺點:昂貴;不能全速工作;同樣,并不是所有的CPU都可以作為外合CPU的,從另一個角度說,這些外合CPU也不大可能及時的被新出的CPU所更換。

        ROM監控器(ROM monitor)

        ROM監控器是一小程序,駐留在嵌入系統ROM中,通過串行的或網絡的連接和運行在工作站上的調試軟件通信。這是一種便宜的方式,當然也是最低端的技術。

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

        因為ROM監控器是操作軟件的一部分,只有當你的應用程序運行時,它才會工作。如果你想檢查CPU和應用程序的狀態,你就必須停下應用程序,再次進入ROM監控器。

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

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

        有兩種普遍的OCD接口:

        摩托羅拉的背景調試監測(Motorola’s Background Debug Monitor,BDM)

        Joint Test Action Group(JTAG):雖然它最初開發出來是為了監測IC和電路連接,但是這種串行接口擴展了用途,包括對調試的支持。

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

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

        另有一些高端軟件的調試包把通過邏輯分析器收集的實時跟蹤信息和標準OCD端口的運行控制特征包含到一起了

        除了調試系統的高級工具,許多的項目能夠完美地使用諸如發光二極管(LED)、串口和示波器這樣的簡單設備調試。

        串行口


        許多嵌入式的主板都具有一個RS232串行口,它允許你將調試信息傳送到PC工作站上標準的COM口上。如果你的嵌入式對象還有剩余的內存空間,你就可以使用標準的puts()、printf()或者相等同的函數來發送有用的調試信息。

        如果你正在使用Windows工作站,你就只需要運行一個終端仿真器程序來顯示來自的嵌入式對象的調試信息。一個比較好的程序是HyperTerminal,它是Windows操作系統自帶的。我覺得一個更好的(免費)程序是Tera Term(Pro)

        發光二極管

        一個簡單的狀態LED在某些系統上可能被當作奢侈品,但是它能夠極為有效地幫助調試。(至少我會認為沒有什么別的東西能夠提供類似的功能。)

        除了看到LED在代碼某個點處開始發光或者閃爍所帶來的提示之外,你還可以使用長或者短閃爍來表示大量的錯誤和狀態報告——這只需要一點點想象力。這不是藝術的表現,但是很多嵌入式系統的開發人員只有一兩個或者稍多的LED來調試小型嵌入式系統。

        示波器

        示波器可能是基本調試輔助工具中最強大的一個,而且它不僅僅只能夠用于調試硬件。

        一個基本的模擬示波器就足夠了,但是有數字示波器會更好。好的示波器會有兩個或者更多的頻道,再加上一個額外的外部觸發脈沖輸入頻道,這個頻道帶有綜合觸發系統和延遲掃描。示波器能夠讓你看到你的程序對外部端口和外設的訪問,并能夠監測軟件的活動。

        下面是在你調試嵌入式軟件的時候應用示波器的幾種方法:

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

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

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


        關鍵詞: 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 西安市| 鸡东县| 辽宁省| 怀来县| 大洼县| 宣威市| 平山县| 林周县| 阿拉善右旗| 清水县| 凌海市| 辰溪县| 永靖县| 黄山市| 连平县| 儋州市| 会理县| 镇坪县| 巴塘县| 呈贡县| 织金县| 东安县| 肇东市| 通渭县| 盐亭县| 彰武县| 丁青县| 岳西县| 成安县| 新乡县| 静乐县| 岑巩县| 漳浦县| 正安县| 德惠市| 会昌县| 乌恰县| 北辰区| 湖州市| 新建县| 临湘市|