線上仿真器

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

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

功能

線上仿真器的基本思想是提供一面通向嵌入式系統內部的窗戶。程式設計師用線上仿真器將程式下載到系統執行後, 可以對程式進行逐步追蹤並察看資料的變化。

之所以被叫做仿真器, 因為它們經常用來類比嵌入式系統中的中央處理器。通常來說, 它通過一個插頭插在一個與 CPU 一樣的底座上。由於是類比主處理器, 仿真器可以在程式設計師的控制下做任何處理器可以做的操作。

線上仿真器總是將待開發的嵌入式系統連接到一個終端個人電腦。該終端或個人電腦為程式設計師除錯和控制系統提供一個互動式的使用者介面

值得注意的是,當程式出現問題,大多數的嵌入式系統會立刻變成毫無用處的廢銅爛鐵。嵌入式系統總是缺乏監測軟體問題的機制,比如主記憶體管理單元讀取快取失敗等。如果沒有線上仿真器,嵌入式系統開發將變得非常困難,因為根本沒有辦法知道究竟發生了什麼問題。而有了線上仿真器,程式設計師可以測試每一行原始碼,從而找到究竟是哪一段程式出錯並糾正錯誤以解決問題。

在實際應用中,程式設計師可以通過線上仿真器設定斷點、顯示和監視主記憶體內容以及控制輸入輸出。除此之外,程式設計師還可以通過線上仿真器設定各種條件斷點,從而有機會找到很多錯誤的根源。

最近的一些線上仿真器不再因為仿真而需要一個特殊的目標系統,而是利用由微控制器生產商提供的仿真和除錯資源。雖然這樣的線上仿真器本身由於只處理微處理上的仿真電路, 而不是真正去類比微處理器從而成本得到降低, 代價是在微處理器的設計過程中, 需要在保證提供足夠仿真機能的基礎上控制生產成本。

優勢

幾乎所有的嵌入式系統都由相互獨立但又相互依賴的硬體和軟體組成。通過線上仿真器,可以在軟體真正將要執行的硬體上執行和除錯。同時,通過原碼級除錯(Source Level Debug, 程式設計師可以看到執行的原始碼)和單步執行(程式設計師可以一步一步的執行程式尋找錯誤),程式設計師可以方便的分離出錯誤代碼。

大多數線上仿真器都由一個位於主機和被除錯系統之間的轉接器組成。接頭和電纜組件將轉接器連接到待除錯系統上用於安插微處理器的底座。而最近的線上仿真器上, 程式設計師可以通過 JTAGBDM介面英語Background debug mode interface連接到位於微處理器片上的除錯 (On-Chip Debug) 電路進行軟體除錯。

由於線上仿真器類比處理器, 所以在待除錯系統看來, 就像一個真的處理器;但從程式設計師角度看來, 待測試系統能夠被完全控制, 可以直接下載、除錯代碼等等。

大多數主機都是普通的與被開發系統無關的商業電腦。例如: 安裝Windows系統個人電腦可能被用來開發在 Freescale 的 68HC11 系列微控制器上使用的軟體, 而 68HC11 本身並不能執行 Windows 系統。

程式設計師一般在主機上編寫和編譯嵌入式系統的代碼。所以主機上需要能為特定的嵌入式系統產生代碼的編譯器,他們被叫做交叉編譯器

製造商