新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 觀察盒子內部:調試動態系統

        觀察盒子內部:調試動態系統

        ——
        作者:Jean J.Labrosse, President, Micrium 時間:2007-12-04 來源:電子產品世界 收藏

        作者:Jean J.Labrosse, President, Micrium
        翻譯:北京麥克泰軟件公司 張愛華

        摘要:
          隨著低成本的在線調試能力的增強,例如ARM的ICE(在線仿真器),通過指令單步調試變得更容易,成本也比較低。這種方式可以查看和修改變量值,顯示寄存器的內容,查看內存塊,但通常只有在目標系統停止運行的時候才可以實現。然而,很多實時系統是不能停止的。因此,在不設置斷點的情況下,如何查看系統正在做什么?如何在不妨礙和影響系統動態性能的前提下,實時查看和監測系統的行為?
          當我們試圖觀測實時系統的動態行為時,傳統的調試技術功能很快就變得有限了。自從第一片微處理器誕生以來,用于監控和的工具基本上沒有發生什么變化。為了解決這個問題,嵌入式工程師采用了諸如LED、測試端口、示波器、邏輯分析儀、仿真器、字符型LCD、圖形顯示等工具。事實上,上述的任何一種方式都可以從嵌入式系統中獲取一些正在運行的線索,每種方式都可以提供觀察嵌入式硬件操作的觀察點,用以揭露系統內部發生的神秘事情。但是,其中許多技術需要額外的硬件和軟件來記錄和查看目標系統發生的事情。
          我們首先簡要評估在監控目標系統實時行為時,嵌入式工程師常用的一些技術,然后推薦一種便宜的、使用簡單,但非常強大的新技術。

        使用LED

          很多嵌入式系統都會包含一個,在某些情況下會有多個發光二極管(LED)。LED被用來顯示各種各樣的動態信息。它們可以指示嵌入式系統是否在運行,某個條件是否發生,系統是否發生了錯誤,已經運行到了某個位置等等。LED是一種簡單、有效且比較便宜的設備,但同時它們也有局限性。首先,它們增加了成本,除非將它們進行組合,形成條形或其它更復雜的顯示方式,否則它們不能傳遞變量的值。其次,LED顯示的數據量是有限的,并且大多以一種并不友好的方式進行顯示。必須承認,LED存在一些比較好的方式來指示一個系統正在運行或一個特定的事件已經發生,但在其它方面并不擅長。

        使用printf()函數

          嵌入式工程師轉向在代碼中使用printf()函數(假設采用C語言編程)來輸出對象的動態行為。因此,printf()函數被插入到代碼中的關鍵位置來查看系統的行為。在調試過程中,printf()函數被到處移動來顯示目標應用的不同方面,以此在系統開發過程中獲取信息。不難想象,過度使用printf()函數將導致應用程序臃腫。通常printf()輸出會放在主機的終端輸出窗口,由于這個原因,當數據連續獲得時,工程師需要將各種數據流實時地重新分類。這些數據流一般是由整型或浮點型數據轉換得到的文本值,它迫使工程師讀取每個值時,調整它的量級,理解它的重要性。大多數情況下,采用數據值曲線圖或許比文本值更恰當。
          由于printf()函數占用代碼量,在一些系統中,特別是在8位微控制器中,不能簡單地應用這種方法。即使在代碼不受限制的情況下,printf()函數在格式化輸入時也會引起延時。當通過串口傳遞信息時,這個延時會更長,更不用說增加到系統上的負載。況且新的PC機不再包含串行接口(即RS-232C),因此這個技術幾乎要銷聲匿跡了。

        使用字符型LCD

          有一些嵌入式處理器擁有額外的I/O口與字符型液晶顯示器(LCD)。這種方式相對費用比較昂貴,且需要寫代碼來顯示我們希望得到的狀態和變量的值。這種設備可以顯示的變量數是有限的,需要一次或幾次完成所有的顯示。此外,我們還需要實現一個用戶接口來選擇查看變量的值。很明顯,這種方式占用了嵌入式工程師開發實際產品精力。取決于產品本身的成本或其它原因,顯示可能不會作為最終產品的一部分。

         
         
        圖1:帶有LCD可以顯示2行16個字符的嵌入式系統

        采用圖形顯示

          那些擁有圖形顯示設備的嵌入式系統可以傳遞很多系統的實時信息。值、圖、圖表、柱狀圖等都可以很容易的顯示出來。然而,這種顯示手段會導致系統成本價格的增長,如增加電子顯示設備,實現顯示功能的圖形用戶接口(GUI)軟件,創建接口將感興趣的信息傳遞給工程師所用的時間。盡管在開發的初級階段,顯示設備可以被借用來幫助開發,事實上,很多嵌入式系統擁有的顯示設備,通常是將其作為用戶接口,而不是開發使用。

        轉移顯示使之更加直觀

          我們需要的是允許我們監測目標系統,而不需要負擔額外的費用或增加設備的負載。有一種設備允許我們以圖形方式顯示我們希望從目標系統獲取的任何信息,這個設備是普遍存在的且易于使用,它就是一臺PC機。
          以上結論使得Micrium公司開發了µC/Probe。這個概念很簡單,我們可以把大部分的負擔轉移到運行Microsoft Windows的PC機上,而將盡量少的代碼放到目標系統中。µC/Probe是一個基于Microsoft Windows的應用程序,可以實時顯示產品中任何變量的值,內存分配和I/O口的值。µC/Probe允許通過邏輯圖、數據指示器、溫度計、柱狀圖、速度圖、餅圖、LED以及其他方式來顯示變量的值。而且不需要在嵌入式產品中寫入任何代碼,不需要使用printf()函數,也不需要在產品中包含用戶接口。Micrium公司以源代碼的方式提供了一個小且簡單的樹樁(stub),在創建你的目標應用時需要包含它。在PC機端,樹樁(stub)接口使用通用的串行異步接收發送器接口(UART),通用串行接口(USB),網口(采用TCP/IP),調試接口(JTAG或其它的接口)或其它目標系統可以使用的接口。在開發產品的過程中,一旦在樹樁(stub)與產品一起編譯連接,可以立即開始查看嵌入式系統的實時行為。
          µC/Probe可以用于任何編譯器和處理器(8,16,32位CPU或DSP)。事實上,任何工具鏈(編譯器、匯編器、連接器)都是適合的。如果系統中有RTOS,可以與RTOS結合使用。它可以用于任何RTOS。

        {{分頁}}
          µC/Probe工作流程如下,Windows應用程序分析由工具鏈的連接器產生的文件,確定目標板上每個全局變量的名稱、類型和地址,并在符號瀏覽器中列出所有的變量。然后用戶將圖形組件(虛擬對象)拖拽到一個畫布,也就是數據屏幕中,并為每一個對象指定符號瀏覽器中的一個變量。在目標系統接口允許的情況下,放在開放數據屏幕中的圖形組件關聯符號值將很快獲得更新。如果工程師需要修改目標代碼,連接器則將改變變量的地址,µC/Probe將重新加載新的連接文件,調整數據屏幕中所有圖形組件的信息。
         
         

        圖2 三個簡單步驟:拖拽一個圖形組件,挑選一個監控的符號,點擊運行,觀察圖形組件表示的符號的值

         
         
        圖3 µC/Probe提供了可視對象的完整集合,包括虛擬LED,標簽,標準尺,圖和表
          事實上,目標系統中只需要很少的代碼,就足夠響應如“發送地址0x40102030地址開始的12個字節”這樣的要求。Windows應用程序在收到應答后,根據新的值更新數據屏幕中相關的組件。因為代碼位于RTOS的空閑任務中,在與RTOS一起使用時,目標駐留代碼通常不會插入。換句話說,因為在空閑任務中CPU不執行任何操作,它不占用應用程序的CPU周期。如果工程師希望僅僅更新某一段代碼中的變量的值,他可以將目標駐留代碼放在那個位置。無論如何,用于與Windows應用程序通信占用的時鐘周期的百分比,可以通過簡單地修改目標系統中調用駐留代碼的頻率(和調用的位置)來滿足用戶的需求。
          采用µC/Probe可以顯示溫度,壓強,濕度,過程變量,狀態變量,定時器,計算結果,邏輯輸入和輸出,最大最小值,執行時間,堆棧使用,I/O寄存器,I/O口,表,數組,繪圖變量隨時間的變化等等。也可以顯示布爾型、整型、浮點型數據和字符串。
          µC/Probe允許創建多個數據屏幕,通過邏輯分組來顯示變量,來查看目標的行為。如果設計一個發動機控制器,可以通過創建一個數據屏幕來顯示控制器的實時數據,例如:制動位置、電流和每分鐘最大轉數、氣缸溫度、發動機運行時間、發動機油壓和溫度、空氣壓強和溫度、停止時間、燃料數量等等。

         

        圖4:飛機駕駛艙工具例程
         
         

        圖5:可以用來顯示變量當前值的一些圖形
          µC/Probe提供了完整的圖形的對象,包括模擬LED、標簽、標準尺、圖、表(增強了控制的靈活性),當然,LED可用來顯示布爾型變量的值,開或關。
          標簽用于顯示變量的值或者內容,比如ASCII 字符串,但作為數字量則代表了一個整型或浮點型數。或者用于簡單地顯示一個字符串(可配置長度)。
          標準尺允許使用模擬的標準尺或者儀表方式來顯示值數據。圖則通過兩種通用的圖格式:線圖和柱狀圖來顯示數據。線圖用于追蹤一個或幾個變量或數組變量的值隨時間的變化。柱狀圖為每個數組變量的當前狀態提供了一個圖形化的比較。
          表是最靈活的,并且有一個電子數據表接口,允許數據單元包含采用其它數據單元數據(可能是目標系統中變量的值)的計算公式。極大增強了表的擴展性和靈活性。以枚舉類型為例,可以從整型值轉換為邏輯字符串的形式表示,因此比數值更有意義。

        應用

          對于應用級別的調試來講,高級調試工具,例如µC/Probe比初級的工具更合適。由實現相關功能的幾個任務組成的嵌入式系統,不適合采用斷點和LED的方式來調試。通過使用µC/Probe窗口接口,可以在一個觀察點獲取更廣泛的信息,更適合這種類型的調試工作。為某一個特定的模塊,如RTOS,TCP/IP協議棧或USB協議棧等開發的數據屏幕,可以用于使用這些模塊的任何嵌入式系統。與模塊相對應的數據屏幕可以用于新的工作屏幕,與圖形相關聯的變量將被重新連接,這意味著變量的地址將從運行在新的目標上的代碼的連接輸出文件中自動獲取。
          “高級調試工具在對有問題的低層代碼函數調試時缺乏洞察力”的評論也是正確的。對這種任務調試來說,斷點和LED是不可替代的。無論如何,µC/Probe可以作為在所有產品的初期開發階段使用的工具,為系統高級特性的缺陷,比如任務的性能,堆棧使用,或緩存使用,在早期就提供一些警告信息。



        關鍵詞: 調試動態系統

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 龙江县| 石柱| 财经| 同江市| 垦利县| 扎鲁特旗| 泸西县| 怀宁县| 蓝山县| 阿克| 辽阳市| 兰溪市| 建德市| 大冶市| 浪卡子县| 临沧市| 岚皋县| 宝鸡市| 水富县| 汉寿县| 英德市| 武陟县| 丹东市| 泾川县| 武威市| 涟源市| 龙口市| 肃宁县| 九龙县| 桦甸市| 林芝县| 南靖县| 玉屏| 南平市| 阆中市| 阿拉尔市| 德庆县| 筠连县| 申扎县| 察哈| 青海省|