在線模擬器

調試嵌入式系統軟體的硬體設備

在線模擬器(英語:In-Circuit Emulator,簡稱:ICE)是調試嵌入式系統軟體的硬體設備。嵌入式系統開發者要面對一般軟體開發者所沒有的特殊問題,因為嵌入式系統往往不像商業計算機那樣具有鍵盤、顯示屏、磁碟機和其他各種有效的用戶界面和存儲設備。在線模擬器通過處理器的額外輔助功能,使系統在不失去其功能的情況下,提供調試功能。歷史上,由於處理器能力有限,這通常意味著將其處理器臨時更換成一個硬體模擬器。硬體模擬器是普通處理器的特製版本,內部設有多種額外的調試信號,以便提供處理器內部狀態的信息。

簡介


在線模擬器也可以指在處理器上直接進行調試的硬體設備。由於JTAG等新技術的出現,人們可以直接在標準的量產型處理器上直接進行調試,而不需要特製的處理器,從而消除了開發環境與運行環境的區別,也促進了這項技術的低成本化與普及化。在這種情況下,由於實際上並沒有任何的“模擬”,“在線模擬器”是個名不副實的誤稱,有時會造成一些誤解。當模擬器被插入到待開發晶元的某個部分的時候,在線模擬也被稱作硬體模擬。這樣的在線模擬器,可以在系統運行實時數據的情況下,提供相對很好的調試能力。

功能


在線模擬器的基本思想是提供一面通向嵌入式系統內部的窗戶。程序員用線上模擬器將程序下載到系統運行后,可以對程序進行逐步跟蹤並查看數據的變化。
之所以被叫做模擬器,因為它們經常用來模擬嵌入式系統中的中央處理器。通常來說,它通過一個插頭插在一個與CPU一樣的底座上。由於是模擬主處理器,模擬器可以在程序員的控制下做任何處理器可以做的操作。
在線模擬器總是將待開發的嵌入式系統連接到一個終端或個人計算機。該終端或個人計算機為程序員調試和控制系統提供一個互動式的用戶界面。
值得注意的是,當程序出現問題,大多數的嵌入式系統會立刻變成毫無用處的廢銅爛鐵。嵌入式系統總是缺乏監測軟體問題的機制,比如內存管理單元讀取緩存失敗等。如果沒有在線模擬器,嵌入式系統開發將變得非常困難,因為根本沒有辦法知道究竟發生了什麼問題。而有了在線模擬器,程序員可以測試每一行源代碼,從而找到究竟是哪一段程序出錯並糾正錯誤以解決問題。
在實際應用中,程序員可以通過在線模擬器設置斷點、顯示和監視內存內容以及控制輸入輸出。除此之外,程序員還可以通過在線模擬器設置各種條件斷點,從而有機會找到很多錯誤的根源。
最近的一些在線模擬器不再因為模擬而需要一個特殊的目標系統,而是利用由微控制器生產商提供的模擬和調試資源。雖然這樣的在線模擬器本身由於只處理微處理上的模擬電路,而不是真正去模擬微處理器從而成本得到降低,代價是在微處理器的設計過程中,需要在保證提供足夠模擬機能的基礎上控制生產成本。

優勢


幾乎所有的嵌入式系統都由相互獨立但又相互依賴的硬體和軟體組成。通過在線模擬器,可以在軟體真正將要運行的硬體上運行和調試。同時,通過源碼級調試(Source Level Debug,程序員可以看到運行的源代碼)和單步調試(程序員可以一步一步地運行程序尋找錯誤),程序員可以方便的分離出錯誤代碼。
大多數在線模擬器都由一個位於主機和調試系統之間的適配器組成。接頭和電纜組件將適配器連接到待調試系統上用於安插微處理器的底座。而最近的在線模擬器上,程序員可以通過JTAG或BDM介面連接到位於微處理器片上的調試(On-Chip Debug)電路進行軟體調試。
由於在線模擬器模擬處理器,所以在待調試系統看來,就像一個真的處理器;但從程序員角度看來,待測試系統能夠被完全控制,可以直接下載、調試代碼等等。
大多數主機都是普通的與與開發統無關的商業計算機。例如:安裝Windows系統的個人計算機可能被用來開發在Freescale的68HC11系列微控制器上使用的軟體,而68HC11本身並不能運行Windows系統。
程序員一般在主機上編寫和編譯嵌入式系統的代碼。所以主機上需要能為特定的嵌入式系統產生代碼的編譯器,他們被叫做交叉編譯器或彙編器。