邏輯分析儀在嵌入式開發調試中的應用
在嵌入式開發調試中,開發人員的調試手段包括斷點、觸發和跟蹤三種。隨著集成電路技術的發展,新一代的嵌入式處理器集成度和工作頻率越來越高,芯片封裝形式也越來越趨向表貼化。在線調試器(ICD)與邏輯分析儀的組合開發調試平臺越來越多地成為廣大的新一代嵌入式處理器的開發人員實現上述三種調試手段的優選。
開發人員使用斷點功能控制所調試的應用程序的起和停。使應用程序運行到自己想要調試的程序上。通過觀察在斷點處的應用程序的變量以及寄存器和存儲器的值檢測所調試的應用程序運行是否正確。斷點是開發人員經常使用的調試手段。
斷點,顧名思義就是(應用程序)停下來的地方。斷點按照其實現方法分為軟件斷點和硬件斷點。軟件斷點是靠程序指令陷阱來實現的。硬件斷點是靠嵌入式處理器或調試工具硬件來實現的。軟件斷點的實現方法對于不同的嵌入式處理器和不同的調試工具而言,實現方法都是一樣的,都是通過修改程序指令的方法實現的。硬件斷點的實現方法對于不同的嵌入式處理器和不同的調試工具而言,實現方法是不一樣的。有的嵌入式處理器具有片上調試邏輯,調試工具通過JTAG、BDM、OCDS、NEXUS等接口訪問控制片上調試邏輯,通過片上調試邏輯實現硬件斷點。這種硬件斷點的數量是有限制的。由于不同的嵌入式處理器上的調試邏輯實現方法不同,因而它們提供的硬件斷點的數量是不一樣的。在線調試器(ICD)就是通過訪問控制片上調試邏輯實現硬件斷點的。沒有片上調試邏輯的嵌入式處理器不能使用在線調試器。在線仿真器(ICE)通過基于存儲器的斷點技術實現硬件斷點。在線仿真器實現的硬件斷點的數量是沒有限制的。對于沒有片上調試邏輯的嵌入式處理器,可以考慮用在線仿真器(ICE)進行調試。
單步是斷點的一種特殊形式,它相當于在下一條指令或程序行上設置一個斷點,程序啟動運行到斷點停下來。
觸發用于捕捉所調試的應用程序在運行中出現的某一特定目標狀態。這一特定的目標狀態就是通常所說的觸發條件。觸發條件通常是處理器的特定的地址、數據、控制總線以及內部/外部信號狀態的邏輯組合。當一個觸發條件不足以描述要捕捉的目標狀態時,開發人員通常會使用觸發序列器(Sequencer)將多個觸發條件級聯起來。調試工具在觸發發生之后,要么停止所調試的應用程序的運行,要么增加觸發記數器,要么輸出一個觸發信號,以便通知開發人員,所要捕捉的觸發條件已發生。為了便于開發人員觀察觸發發生之后應用程序的執行情況,調試工具通常會提供觸發滯后的功能。觸發滯后就是調試工具在發生觸發之后仍然使應用程序結續運行一段特定的時間之后才將應用程序停下來。
不同的調試工具對觸發功能的實現程度是不一樣的。在線仿真器(ICE)絕大多數都可以實現完型的觸發功能。在線調試器(ICD)對觸發功能的實現程度取決于所調試的嵌入式處理器上的片上調試邏輯。在線調試器(ICD)與邏輯分析儀組合,可以宴現較完整的觸發功能。
開發人員通常將觸發功能與下面要講到的跟蹤功能一起使用,來捕捉導致應用程序中問題產生自原因。
跟蹤就是記錄所調試的應用程序的執行過程,以便開發人員分析導致應用程序出現問題的原因。跟蹤的記錄方式有先進先出方式和壓棧方式。先進先出方式總是記錄應用程序停下來之前的新運行過程。在先進先出方式下,如果跟蹤記錄緩沖填滿的話,先跟蹤的記錄就要丟棄,以便填充新的記錄。壓找方式記錄跟蹤開始到跟蹤記錄緩沖被填滿這段時間內應用程序的運行過程。在壓棧方式下,如果跟蹤記錄緩沖填滿的話,新的應用程序執行過程將不被記錄。跟蹤還可以有選擇地記錄程序的執行過程,例如,只記錄函數入口和出口的執行過程。當然,要進行有選擇跟蹤,開發人員必須對跟蹤功能進行設置。
不同的調試工具對跟蹤功能的實現方式是不一樣的。在線仿真器(ICE)由于其結構的特殊性,它可以捕獲到嵌入式處理器的總線周期,它的跟蹤記錄的小單位就是總線周期。在線仿真器(ICE)調試軟件譯碼這些總線周期,倒推出程序的執行過程。在線調試器(ICD)因為不能捕獲嵌入式處理器的總線周期,因而決大多數沒有跟蹤功能。有些嵌入式處理器的片上調試邏輯能夠將程序的執行過程信息壓縮之后通過特定的接口送到芯片外部,供外部的調試工具使用。這樣,在線調試器(ICD)可以通過增加跟蹤模塊捕獲這些信息的方法實現跟蹤功能。在線調試器(ICD)調試軟件從跟蹤模塊記錄的嵌入式處理器送出來的指令流信息,還原出應用程序的執行過程?;贏RM內核的嵌入式處理器芯片上的ETM接口就是一個這樣的接口。通過這種方法實現的跟蹤功能的完善程度完全取決于片上調試邏輯。
由于邏輯分析儀具有超強的邏輯跟蹤分析功能,因而它可以捕獲記錄嵌入式處理器的總線周期,也可以捕獲記錄來自象ETM這樣的接口的程序執行信息,并對這些記錄進行分析,譯碼或還原出應用程序的執行過程。邏輯分析儀通過觸發接口與在線調試器(ICD)協調工作,補充在線調試器(ICD)在跟蹤功能方面的不足,與在線調試器(ICD)一起為開發人員提供斷點、觸發和跟蹤三種調試手段。
下面以Lauterbach公司的TRACE32-ICD和Tektronix公司的TLA700邏輯分析儀為例,介紹如何將邏輯分析儀與在線調試器組合成開發調試平臺,為開發人員提供的斷點、觸發和跟蹤功能。
首先介紹一下Lauterbach公司的TRACE32-ICD。
TRACE32-ICD是在線調試器。它采用模塊化的設計,可以支持具有JTAG、BDM、0CDS、NEXUS等調試接口的嵌入式處理器。它可以為嵌入式處理器的開發人員提供斷點及觸發功能(利用片上調試邏輯)。TRACE32-ICD的調試器軟件運行在Windows平臺上。TRACE32-ICD通過并口、以太網口、USB口等形式與PC連接。TRACE32-ICD具有觸發輸入/輸出端口,通過它TRACE32-ICD與邏輯分析儀連接。TRACE32-ICD與邏輯分析儀通過該連接相互觸發,協調工作。
接下來,介紹一下Tektronix公司的TLA700邏輯分析儀。
TLA700邏輯分析儀除了具有傳統的邏輯分析儀的邏輯采集和分析功能之外,是它采用了開放靈活的Windows平臺架構,具有串口、并口及以太網等接口。這樣一來,基于Windows平臺的嵌入式開發調試軟件就可以運行在TLA700上。嵌入式處理器的開發人員可以用TLA700搭建嵌入式開發調試平臺。另外,TLA700的HLL源碼支持功能可以直接分析采用IEEE695、OMFx86、COFF、ELF/Dwarf、ELF/Stabs和ASCII格式的可調試的應用程序。這也為它集成在線調試器,例如,TRACE32-ICD,補充在線調試器在跟蹤功能方面的不足奠定了基礎。
首先,將TRACE32-ICD的調試器軟件安裝到TLA700的Windows平臺上。將TRACE32-ICD連接到TLA700的串口、并口或以太網口上。將TRACE32-ICD的觸發輸入/輸出端口與TLA700的觸發輸出/輸入端口連接。TRACE32-ICD的調試電纜與目標板上的JTAG、BDM、0CDS、NEXUS等接口連接,用來控制目標板上的嵌入式處理器。TLA700的邏輯探頭連接到嵌入式處理器的地址、數據和控制總線上,采集嵌入式處理器的總線周期,或者連接到片上調試邏輯的指令流信息接口(例如,ETM口)上,采集嵌入式處理器執行的指令流信息。由TRACE32-ICD和TLA700組合成的嵌入式處理器高度平臺與目標板的連接關系,如圖1所示。
在完成了TRACE32-ICD和TLA700以及目標板之間的連接之后,開發人員就可以使用這一組合開發調試平臺了。
開發人員首先啟動TLA700,等TLA700啟動完成之后,再來啟動TRACE32-ICD調試器軟件。在TRACE32-ICD和TLA700都完成了啟動之后,TRACE32-ICD的調試界面和TLA700的邏輯跟蹤界面就會分別顯示在不同的Windows窗口中。當然,這些顯示都在TLA700自帶的彩色液晶屏上,或者在TLA700外掛的顯示器上。
開發人員開始真正的調試工作之前,還要分別對TRACE32-ICD和TLA700進行設置。當然,這些設置是在TRACE32-ICD和TLA700各自的Windows窗口中完成的。對TRACE32-ICD的設置工作主要完成對目標板上的嵌入式處理器的設備寄存器的初試化,將準備調試的應用程序下載到目標板上的嵌入式處理器的程序存儲器空間,定義觸發輸入/輸出端口的方向。對TLA700的設置工作包括定義邏輯通道,用HLL源碼支持功能加載分析TRAC32ICD所下載的可調試格式(IEEE695、OMFx86、ELF/Dwarf、ELF/Stabs和ASCⅡ)的文件,定義觸發條件。
接下來,開發人員就可以開始調試他們的應用程序了。
開發人員用TRACE32-ICD設置斷點調試程序,用TLA700設置觸發條件,并由TLA700完成跟蹤功能。
TRACE32-ICD和TLA700如何同步工作呢?這就要借助與TRACE32-ICD和TLA700的觸發輸入/輸出端子了。
當開發人員想要用TLA700的強大的觸發功能來捕捉產生某一特殊目標狀態的程序時,可以將TRACE32-ICD的觸發輸入/輸出端子定義為輸入(可以是高電平或低電平觸發),然后,將TLA700所定義的觸發條件對應到連接TRACE32-ICD的觸發輸出端子。開發人員運行程序的時候,如果目標狀態出現,TLA700就會產生觸發信號送給TRACE32-ICD,TRACE32-ICD在收到這個觸發信號之后,它就會將開發人員所調試的應用程序停下來。由于TLA700不停地跟蹤記錄應用程序的執行情況,這時候,將TLA700停下來,就可以看到產生觸發前后應用程序的執行情況。由于TLA有很深的記錄存儲,開發人員可以觀察到很詳盡的程序執行情況。
開發人員也可以將TRACE32-ICD的觸發輸入/輸出端子定義為輸出,將該信號連接到TLA700的一個觸發輸入端子,并設置TLA700根據該信號控制跟蹤的啟動或停止。這樣就可以實現跟蹤與程序運行同步,使開發人員能夠跟蹤到程序在調試過程中所有的運行情況。
TRACE32-ICD和TLA700給開發人員提供了靈活的觸發設置功能,開發人員可以充分發揮聰明才智來設計復雜的觸發條件,來捕捉應用程序中的問題。
在嵌入式系統的開發調試中,開發人員通常會遇到四類問題:邏輯問題、軟/硬件相互影響問題、軟件實時問題和崩潰問題。應用程序邏輯設計或編碼錯誤或設計假設不正確都屬于邏輯錯誤。指令引起的存儲器訪問出錯,應用程序在運行過程中出現在數據總線上的特定數據格式引起的串擾假信號,這些都是軟/硬件相互影響問題。應用程序在單步、端點的調試中都運行正常,而只有在目標系統全速運行的時候才會出問題,這類問題就屬于軟件實時問題。目標系統在運行中發生系統崩潰,這類問題就是崩潰問題。邏輯問題大約占開發人員遇到的所有調試問題的80%。解決這類問題,開發人員通過在應用程序中設置斷點,檢查寄存器、存儲器、變量等的值來解決。開發人員解決邏輯問題的時間約占解決所有調試問題的總時間20%。而解決其它三類問題所用的時間要占到解決所有調試問題的總時間的80%。這三類問題只靠設置斷,點的方法,往往是比較難以解決的。由于產生這三類問題的原因通常都比較復雜,所以,開發人員必須通過觸發來捕捉這些問題,然后,再通過跟蹤來分析產生這些問題的原因。
傳統地,嵌入式系統的開發調試人員通常使用在線仿真器(ICE)來完成端點、觸發和跟蹤這三種調試手段。隨著集成電路技術的不斷發展,新一代的嵌入式處理器的工作頻率越來越高,封裝越來越表貼化。由于在線仿真器要通過仿真探頭取代目標系統上的嵌入式處理器來和目標系統連接,所以,在線仿真器對新一代的嵌入式處理器而言,連接是一大問題。嵌入式處理器的設計生產廠商已經認識到這個問題。他們在新一代的嵌入式處理器增加了片上調試邏輯,而訪問片上調試邏輯只須不到十根連接線,且時鐘頻率不高。在采用新一代的嵌入式處理器來開發目標系統的時候,越來越多的開發人員會選擇在線調試器加邏輯分析儀形式的組合開發調試平臺。(本文轉載自儀器儀表商務網)