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

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

功能 編輯

在線仿真器的基本思想是提供一面通向嵌入式系統內部的窗戶。程序員用線上仿真器將程序下載到系統運行後, 可以對程序進行逐步跟蹤並察看數據的變化。

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

在線仿真器總是將待開發的嵌入式系統連接到一個終端個人電腦。該終端或個人電腦為程序員調試和控制系統提供一個交互式的用戶界面

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

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

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

優勢 編輯

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

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

由於在線仿真器模擬處理器, 所以在待調試系統看來, 就像一個真的處理器;但從程序員角度看來, 待測試系統能夠被完全控制, 可以直接下載、調試代碼等等。

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

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

製造商 編輯