簡介
線上仿真器(英語:In-Circuit Emulator,簡稱:ICE)是調試嵌入式系統軟體的硬體設備。嵌入式系統開發者要面對一般軟體開發者所沒有的特殊問題,因為嵌入式系統往往不像商業計算機那樣具有鍵盤、顯示屏、磁碟機和其他各種有效的用戶界面和存儲設備。線上仿真器通過處理器的額外輔助功能,使系統在不失去其功能的情況下,提供調試功能。歷史上,由於處理器能力有限,這通常意味著將其處理器臨時更換成一個硬體仿真器。硬體仿真器是普通處理器的特製版本,內部設有多種額外的調試信號,以便提供處理器內部狀態的信息。
而現今,線上仿真器也可以指在處理器上直接進行調試的硬體設備。由於JTAG等新技術的出現,人們可以直接在標準的量產型處理器上直接進行調試,而不需要特製的處理器,從而消除了開發環境與運行環境的區別,也促進了這項技術的低成本化與普及化。在這種情況下,由於實際上並沒有任何的“仿真”,“線上仿真器”是個名不副實的誤稱,有時會造成一些誤解。當仿真器被插入到待開發晶片的某個部分的時候,線上仿真也被稱作硬體仿真。這樣的線上仿真器,可以在系統運行實時數據的情況下,提供相對很好的調試能力。
功能
線上仿真器的基本思想是提供一面通向嵌入式系統內部的窗戶。程式設計師用線上仿真器將程式下載到系統運行後, 可以對程式進行逐步跟蹤並察看數據的變化。
之所以被叫做仿真器, 因為它們經常用來模擬嵌入式系統中的中央處理器。通常來說, 它通過一個插頭插在一個與 CPU 一樣的底座上。由於是模擬主處理器, 仿真器可以在程式設計師的控制下做任何處理器可以做的操作。
線上仿真器總是將待開發的嵌入式系統連線到一個終端或個人計算機。該終端或個人計算機為程式設計師調試和控制系統提供一個互動式的用戶界面。
值得注意的是,當程式出現問題,大多數的嵌入式系統會立刻變成毫無用處的廢銅爛鐵。嵌入式系統總是缺乏監測軟體問題的機制,比如記憶體管理單元讀取快取失敗等。如果沒有線上仿真器,嵌入式系統開發將變得非常困難,因為根本沒有辦法知道究竟發生了什麼問題。而有了線上仿真器,程式設計師可以測試每一行原始碼,從而找到究竟是哪一段程式出錯並糾正錯誤以解決問題。
在實際套用中,程式設計師可以通過線上仿真器設定斷點、顯示和監視記憶體內容以及控制輸入輸出。除此之外,程式設計師還可以通過線上仿真器設定各種條件斷點,從而有機會找到很多錯誤的根源。
最近的一些線上仿真器不再因為仿真而需要一個特殊的目標系統,而是利用由微控制器生產商提供的仿真和調試資源。雖然這樣的線上仿真器本身由於只處理微處理上的仿真電路, 而不是真正去模擬微處理器從而成本得到降低, 代價是在微處理器的設計過程中, 需要在保證提供足夠仿真機能的基礎上控制生產成本。
優勢
幾乎所有的嵌入式系統都由相互獨立但又相互依賴的硬體和軟體組成。通過線上仿真器,可以在軟體真正將要運行的硬體上運行和調試。同時,通過原碼級調試(Source Level Debug, 程式設計師可以看到運行的原始碼)和單步調試(程式設計師可以一步一步的運行程式尋找錯誤),程式設計師可以方便的分離出錯誤代碼。
大多數線上仿真器都由一個位於主機和被調試系統之間的適配器組成。接頭和電纜組件將適配器連線到待調試系統上用於安插微處理器的底座。而最近的線上仿真器上, 程式設計師可以通過JTAG或BDM接口連線到位於微處理器片上的調試 (On-Chip Debug) 電路進行軟體調試。
由於線上仿真器模擬處理器, 所以在待調試系統看來, 就像一個真的處理器;但從程式設計師角度看來, 待測試系統能夠被完全控制, 可以直接下載、調試代碼等等。
大多數主機都是普通的與被開發系統無關的商業計算機。例如: 安裝Windows系統的個人計算機可能被用來開發在Freescale的 68HC11 系列微控制器上使用的軟體, 而 68HC11 本身並不能運行 Windows 系統。
程式設計師一般在主機上編寫和編譯嵌入式系統的代碼。所以主機上需要能為特定的嵌入式系統產生代碼的編譯器,他們被叫做交叉編譯器或彙編器。