基本介紹
簡介,組成,
簡介
ARMulator 同時支持全部的標準C庫函式,這樣所有的C程式都可以在仿真器上運行。ARMulator 通過 Semihosting 方式來實現程式中輸入/輸出功能。Semihosting是指在 ARM 程式開發調試的過程中,目標系統還不具備輸入/輸出的功能,通過調試代理向調試器請求 I/O。ARMulator 就是這裡所說的調試代理之一,其他還有 Angel、Multi-ICE也通過類似的方式來實現 I/O 功能。
ARMulator 在 Windows 平台上實現為動態程式庫檔案(.dll),在 Linux 或者 Solaris 系統上實現為共享庫檔案(.so)。前者的使用一般是通過 ARM 公司提供的圖形界面調試器 AXD 中,選擇目標系統為 ARMulate.dll,這樣就設定了 ARMulator 作為調試代理。用戶在進行調試開發時,對於底層使用的調試代理是透明的。
組成
ARMulator 本身是由一系列的模組(module)組成的,其中最主要的模組包括:
? ARM 處理器核心模組,用來仿真處理器的體系結構。
? 處理器使用的存儲器模組,用來仿真存儲系統。
預設的記憶體模型是 flatmem ,記憶體的大小不限制,理論上 4G 的地址空間都可以使用。
同時,ARMulator 也包含了幾種外設模組,用來仿真如下的外設模型:
? Interrupt controller(中斷控制器)
暫存器基址:Base=0x0a000000
? Timer(定時器)
ARMulator 提供了兩個定時器。包含控制暫存器、計數值暫存器、中斷清除暫存器等。定時器支持 free-running 和 periodic 兩種工作方式,前者計數器從0xFFFF遞減,到“0”後計數器溢出發生中斷。後者計數器從計數值暫存器中讀取計數值,然後遞減至“0”後溢出發生中斷。
暫存器基址:Base=0x0a800000
? Watchdog(看門狗)
暫存器基址:Base=0xb0000000 KeyValue=0x12345678
WatchPeriod=0x80000 IRQPeriod=3000 IntNumber=16
? Stack tracker(棧跟蹤器)
棧底地址:StackBase=0x80000000 棧空間限制:StackLimit=0x70000000
? Tube(顯示管)
Tube 實際上是一個暫存器,它用來顯示輸出。一旦寫入這個暫存器某個可以顯示的字元,則調試器將會把它顯示在控制台 Console 下。這樣用來顯示對某個指定地址的寫操作記錄。
暫存器基址:Base=0x0d800020
使用者也可以根據一定的接口規範編寫自己的外設模組,或者通過修改已有模組的方式來適合自己的需求。比如定製自己的存儲系統等。
3.使用 ARMulator
從調試器中可以配置 ARMulator 的一些屬性,在調試器啟動的時候,會將當前配置的部分信息輸出顯示。ADS 提供了6個 .ami 配置檔案來定義當前 ARMulator 的工作行為。當 ARMulator 被調試器啟動時,就會搜尋環境變數 armconf 中的路徑,讀取所有的 .ami 配置檔案來對 ARMulator 進行設定。
ARMulator 還提供了跟蹤(Tracer)功能,用來記錄程式中指令和記憶體被訪問的情況,也可以記錄下各種事件的發生,例如 ARM 處理器事件、MMU 和 cache 事件等。另外,使用 ARMulator 的 profiling 記錄,可以統計特定函式在執行過程中被調用的次數,包括子函式的調用在總的執行時間中所占的比例。
使用 ARMulator 只要在調試器中設定了 target 就可以了,通過圖形用戶界面的調試器AXD ,可以查看 ARM 暫存器(包括通用暫存器和程式狀態暫存器等),也可以查看任意記憶體單元的內容,還可以進行異常的處理,例如中斷和程式中止等。
通過對上面提到的定時器和中斷控制器的設定,在 ARMulator 上甚至可以移植嵌入式實時作業系統 uC/OS-II。uC/OS-II 是一個實時作業系統核心,包含了任務調度、任務管理、時間管理、記憶體管理和任務間的通信與同步等基本功能。通過在 ARMulator 上移植和調試 uC/OS-II,以後就可以更快將其移植到自己的嵌入式硬體平台上。
運行在其他硬體平台,對ARM微處理器以及其相關外設進行模擬的軟體。
比較常見的是:
1、ARM公司自己發布的Armulator。一般附帶在ADS、Realview軟體開發套件中,作為一個調試模組發布。
2、GNU的Armulator。
其中skyeye是國內比較成功的集成armulator開發環境。
使用Armulator,對降低開發成本、提高開發效率有很大的好處。