armulator

ARMulator 是一個在 ARM 公司推出的集成開發環境 ADS (ARM Developer Suite)中提供的指令集模擬器。它與運行在通用計算機(通常是x86體系結構)上的調試器相連線,模擬 ARM 微處理器體系結構和指令集,提供了開發和調試 ARM 程式的軟體仿真環境。ARMulator 不僅可以仿真 ARM 處理器的體系結構和指令集,還可以仿真存儲器和處理器外圍設備,例如中斷控制器和定時器等,這樣就模擬了一個進行嵌入式開發的最小子系統,另外使用者還可以擴展添加自己的外設。

基本介紹

  • 外文名:armulator
  • 支持:全部的標準C庫函式
  • 運行:在仿真器
  • 通過: Semihosting 方式
簡介,組成,

簡介

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(看門狗
看門狗是為了防止用戶程式出錯導致系統死鎖而採用的一種保護手段。一旦到了預定時間沒有設定看門狗,看門狗就會停止ARMulator的運行,返回調試器中。看門狗使用2個定時器工作,第一個定時器在復位時啟動,或者通過程式寫入KeyValue 暫存器預先設定好的值來啟動,當過了一定時鐘周期(WatchPeriod)後,第一個定時器產生 IRQ 中斷,並啟動第二個定時器;如果在規定時間(IRQPeriod)內程式沒有寫KeyValue暫存器,則看門狗將停止 ARMulator ,返回調試器中。
暫存器基址:Base=0xb0000000 KeyValue=0x12345678
WatchPeriod=0x80000 IRQPeriod=3000 IntNumber=16
? Stack tracker(棧跟蹤器)
棧跟蹤器在每條指令執行後,檢查棧指針(r13)暫存器的值。它記錄下棧頂的最小值,從而可以計算出所用堆疊的最大長度。
棧底地址: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,對降低開發成本、提高開發效率有很大的好處。

相關詞條

熱門詞條

聯絡我們