軟件架構之嵌入式系統設計
- 第 12 章:嵌入式系統設計
- 12.1 嵌入式系統概論
- 12.2 嵌入式系統的組成
- 12.2.1 硬件架構
- 12.2.2 軟件架構
- 12.3 嵌入式開發平臺與調試環境
- 12.3.1 嵌入式系統軟件開發平臺
- 12.3.2 嵌入式開發調試
第 12 章:嵌入式系統設計
隨著計算機技術、微電子技術、通信技術以及集成電路技術的發展,嵌入式技術逐漸發展和成熟起來。嵌入式系統的應用日益廣泛,并 在數量上遠遠超越了通用計算機系統,成為了計算機技術和計算機應用領域的一個重要組成部分。
本章主要討論嵌入式系統的基本知識與嵌入式系統的開發設計兩部分內容,主要包括嵌入式系統的概念、軟/硬件組成與基本架構、嵌入式操作系統和嵌入式數據庫系統、網絡系統以及窗口系統等核心支撐軟件系統的基本原理和技術,最后介紹嵌入式系統的開發設計。
12.1 嵌入式系統概論
嵌入式系統是一種以應用為中心,以計算機技術為基礎,可以適應不同應用對功能、可靠性、成本、體積、功耗等方面的要求,集可配置,可裁減的軟、硬件于一體的專用計算機系統。它具有很強的靈活性,主要由嵌入式硬件平臺、相關支撐硬件、嵌入式操作系統、支撐軟件以及應用軟件組成。其中,“嵌入性”、“專用性”與“計算機系統”是嵌入式系統的三個基本的核心要素,具體來講:
嵌入性:指計算機計算機嵌入到對象系統中,且滿足對象系統的環境要求,如物理環境(小型)、電氣/氣氛環境(可靠)、成本(價廉)等要求。
- 專用性:指軟、硬件的裁剪性,滿足對象要求的最小軟、硬件配置等。
- 計算機系統:指嵌入式系統必須是一個能滿足對象系統控制要求的計算機系統。
歸納起來,典型的嵌入式系統具有以下特點:
(1)系統專用性強。嵌入式系統是針對具體應用的專門系統。它的個性化很強,軟件和硬件結合緊密。一般要針對硬件進行軟件的開發和移植,根據硬件的變化和增減對軟件進行修改。由于嵌入式系統總是用來完成某一特定任務,整個系統與具體應用有機地結合在一起,升級換代也以更換整個產品的方式進行,因此,一個嵌入式產品一旦進入市場,一般具
有較長的生命周期。
(2)系統實時性強。嵌入式系統中有相當一部分系統要求對外來事件在限定的時間內及時做出響應,具有實時性。
(3)軟、硬件依賴性強。嵌入式系統的專用性決定了其軟、硬件之間具有很強的互相依賴性,兩者必須協同設計,以達到共同實現預定功能的目的,并滿足性能、成本和可靠性等方面的嚴格要求。
(4)處理器專用。嵌入式系統的處理器與通用計算機的處理器之間最大的不同之處在于,嵌入式系統的處理器一般是為某一特定目的和應用而專門設計的。通常具有功耗低、體積小、集成度高等優點,能夠把許多在通用計算機上需要由板卡完成的任務和功能集成到芯片內部,從而有利于嵌入式系統的小型化和移動能力的增強。
(5)多種技術緊密結合。嵌入式系統通常是計算機技術、半導體技術、電力電子技術及機械技術與各行業的具體應用相結合的產物。通用計算機技術也離不開這些技術,但它們相互結合的緊密程度不及嵌入式系統。
(6)系統透明性。嵌入式系統在形態上與通用計算機系統差異甚大。它的輸入設備往往不是常見的鼠標和鍵盤之類的設備,甚至沒有輸出裝置,用戶可能根本感覺不到它所使用的設備中有嵌入式計算機系統的存在,即使知道也不必關心這個嵌入式計算機系統的相關情況。
(7)系統資源受限。嵌入式系統為了達到結構緊湊、可靠性高及降低系統成本的目的,其存儲容量、輸入/輸出設備的數量和處理器的處理能力都比較有限。
12.2 嵌入式系統的組成
嵌入式系統一般都由軟件和硬件兩個部分組成,其中嵌入式處理器、存儲器和外部設備構成整個系統的硬件基礎。嵌入式系統的軟件部分可以分為 3 個層次:系統軟件、應用支撐軟件和應用軟件。其中,系統軟件和支撐軟件是基礎,應用軟件則是最能體現整個嵌入式系統的特點和功能的部分。
12.2.1 硬件架構
圖 12-1 是一個嵌入式系統的基本硬件架構。微處理器是整個嵌入式系統的核心,負責控制系統的執行。外部設備是嵌入式系統同外界交互的通道,常見的外部設備有 Flash 存儲器、鍵盤、輸入筆、觸摸屏、液晶顯示器等輸入/輸出設備,在很多嵌入式系統中還有與系統用途緊密相關的各種專用外設。嵌入式系統中經常使用的存儲器有 3 種類型:RAM、ROM(Read-Only Memory,只讀內存)和混合存儲器。系統的存儲器用于存放系統的程序代碼、數據和系統運行的結果。
1.嵌入式處理器
嵌入式系統的核心部件是各種類型的嵌入式處理器。據不完全統計,目前世界上嵌入式處理器的種類已經超過了 1000 種,比較流行的也有 30 幾個系列。根據目前的使用情況,嵌入式處理器可以分為如下幾類:
(1)嵌入式微處理器。嵌入式微處理器(Embedded Micro Processing Unit,EMPU)是由通用計算機中的 CPU 演變而來。嵌入式微處理器在功能上跟普通的微處理器基本一致,但是它具有體積小、功耗低、質量輕、成本低及可靠性高的優點。通常,嵌入式微處理器和ROM、RAM、總線接口及外設接口等部件安裝在一塊電路板上,稱為單板計算機。目前,主要的嵌入式微處理器有 AM186/88、386EX、SC-400、POWER PC、MIPS 及 ARM 等系列。
(2)嵌入式微控制器。嵌入式微控制器(Embedded Micro Controlling Unit,EMCU)又稱為單片機,就是整個計算機系統都集成到一塊芯片中。嵌入式微控制器一般以某一種微處理器內核為核心,芯片內部集成有 ROM/EPROM/E2PROM、RAM、總線、總線邏輯、定時器/計數器、WatchDog(監督定時器)、并口/串口、數模/模數轉換器、閃存等必要外設。與嵌入式微處理器相比,嵌入式微控制器的最大特點是單片化,因而體積更小,功耗和成本更低,可靠性更高。
目前,嵌入式微控制器的品種和數量最多,約占嵌入式系統市場份額的 70%。比較有代表性的通用系列有:8051 系列、MCS-96/196/296、C166/167、MC68HC05/11/12/16 等。還有許多半通用系列,如支持 UBS 接口的 MCU 8XC930/931、C540、C541 以及用于支持 I2C、現場總線等各種微控制器。
(3 )嵌入式數字信號處理器。嵌入式數字信號處理器(Embedded Digital Signal Processor,EDSP)是一種專門用于信號處理的處理器,DSP 芯片內部采用程序和數據分開的哈佛結構,具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的 DSP 指令,可以用來快速實現各種數字信號的處理算法。目前,數字信號處理器在嵌入式系統中使用非常廣泛,如數字濾波、快速傅立葉變換及頻譜分析等。同時,嵌入式系統的智能化也是推動嵌入式 DSP 發展的一個動力,如各種帶有智能邏輯的消費類產品、生物信息識別終端、帶有加密/解密算法的設備、實時語音壓縮和解壓系統以及虛擬現實顯示裝置等,這類系統上的智能化算法一般運算量都比較大,這恰好可以充分發揮數字信號處理器的長處。
(4)嵌入式片上系統。嵌入式片上系統(Embedded System On Chip)是一種在一塊芯片上集成很多功能模塊的復雜系統,如微處理器內核、RAM、USB、IEEE 1394、Bluetooth 等。以往這些單元按照各自的功能做成一個個獨立的芯片,并通過電路板與其他單元組成一個系統。現在將這些本來在電路板上的單元都集成到一個芯片中,構成一個嵌入式片上系統,從
而大幅度縮小了系統的體積,降低了系統的復雜度,增強了系統的可靠性。在大量生產時,生產成本也遠遠低于單元部件組成的電路板系統。嵌入式片上系統可以分為通用片上系統和專用片上系統兩類。通用類的主要產品有 Siemens 的 Trocore、Motorola 的 M-Core、某些ARM 系列的器件等。專用類的嵌入式片上系統一般是針對某一個或某些系統而設計的。具有代表性的產品有 Philips 的 Smart XA,它將 XA 單片機的內核和支持超過 2048 位復雜RSA 算法的 CCU 單元制作在一個芯片上,形成一個可加載 Java 或 C 的專用嵌入式片上系統,可用于網絡安全等方面。
2.總線
總線是連接計算機系統內部各個部件的共享高速通路,自 20 世紀 70 年代以來,工業界相繼出現了多種總線標準,很多總線技術在嵌入式系統領域得到了廣泛的應用。嵌入式系統的總線一般分為片內總線和片外總線。片內總線是指嵌入式微處理器內的
CPU 與片內其他部件連接的總線;片外總線是指總線控制器集成在微處理器內部或外部芯片上的用于連接外部設備的總線。
(1)AMBA 總線。AMBA(Advanced Microcontroller Bus Archiecture,先進微控制器總線架構)是 ARM 公司研發的一種總線規范,該總線規范獨立于處理器和制造工藝技術,增強了各種應用中外設和系統單元的可重用性,它提供將 RISC 處理器與 IP 核集成的機制。該規范定義了三種總線:
先進性能總線(Advanced High-performance Bus,AHB)。AHB 由主模塊、從模塊和基礎結構三部分組成,整個 AHB 總線上的傳輸都由主模塊發起,從模塊響應。基礎結構包括:仲裁器、主從模塊多路選擇器、譯碼器、名義主模塊、名義從模塊等。AHB 系統具有時鐘邊沿觸發、無三態、分幀傳輸等特性。AHB 也支持復雜的事務處理,如突發傳送、主單元重試、
流水線操作以及分批事務處理等。
先進系統總線(Advanced System Bus,ASB)。ASB 用于高性能模塊的互連,支持突發數據傳輸模式,較老的總線格式,逐步由 AHB 總線所替代。
先進外設總線(Advanced Peripheral Bus,APB)。APB 主要用于連接低帶寬外圍設備,其總線結構只有唯一的主模塊,即 APB 橋,它不需要仲裁器以及響應/確認信號,以最低功耗為原則進行設計,具有總是兩周期傳輸、無等待周期和響應信號的特點。
(2)PCI 總線。外圍構件互連總線(Peripheral Component Interconnect,PCI)規范先后經歷了 1.0 版本、2.0 版本和 2.1 版本等一系列規范。PCI 總線是地址、數據復用的高性能 32 位與 64 位總線,是微處理器與外圍設備互連的機構,它規定了互連協議、電氣、機械以及配置空間的標準。PCI 是不依賴于具體處理器的局部總線,從結構上看,PCI 是在微處理器和原來的系統總線之間加入的一級總線,由一個橋接電路負責管理,實現上下接口和協調數據傳送,管理器提供了信號緩沖,使多種外設能夠在高時鐘頻率下保持高性能。PCI 總線支持主控技術,允許智能設備在需要時獲得總線控制權,以加速數據傳輸。 為了將 PCI 總線規范應用到工業控制計算機中,1995 年,推出了 Compact PCI 規范,并相繼推出了 PCI-PCI Bridge 規范、Computer TelephonyTDM 規范和用戶定義 I/O 引腳分配規范等。CPCI 總線規范有機地結合了 PCI 總線電氣規范的高性能和歐洲卡結構的高可靠。
目前,CPCI 總線已經在嵌入式系統、工業控制計算機等高端系統中得到了廣泛的應用,并逐步替代了 VME 和 MultiBUS 總線。
(3)Avalon 總線。Avalon 總線是 Altera 公司設計的用于可編程片上系統(System on Programmable Chip,SOPC)中,連接片上處理器和其他 IP 模塊的一種簡單總線協議,規定了主部件和從部件之間進行連接的端口和通信時序。作為總結,表 12-1 對比了幾種嵌入式總線技術的主要特點。
3.存儲器
嵌入式系統的存儲器主要包括主存和外存,圖 12-2 所示為嵌入式系統的存儲結構,嵌入式系統的存儲器主要分為三種:高速緩存(Cache)、片內主存和片外主存以及外存。
(1)高速緩存。高速緩存是存放當前使用最多的程序代碼和數據的,即主存中部分內容的副本,在嵌入式系統系統中,Cache 全部集成在嵌入式微處理器內部,可以分為:數據Cache、指令 Cache 和混合 Cache。
(2)主存。主存是處理器能夠直接訪問的存儲器,用來存放系統和用戶的程序和數據,系統上電后,主存中的代碼直接運行,主存的主要特點是速度快,一般采用 ROM、EPROM、NOR flash、SRAM 和 DRAM 等存儲器件。
(3)外存。外部存儲器是不與運算器直接聯系的后備存儲器,用來存放不常用的或暫不使用的信息,外存一般以非易失性存儲器構成,數據能夠持久保存,即使掉電,也不消失。
Flash 存儲器是在 EPROM 和 EEPROM 的基礎上發展起來的非易失性存儲器,具有結構簡單、可靠性高、體積小、質量輕、功耗低、成本低等優點,是最常用的一種外存類型。
4.I/O 設備與接口
因其應用領域的不同,嵌入式系統的輸入設備多種多樣,比較常見的有鍵盤、鼠標、觸摸屏、手柄、聲控開關等。通常,根據輸入設備實現機理的不同,嵌入式系統的設備可以分為:機械式、觸控式以及聲光式三類。
嵌入式系統的輸出設備除了通用計算機常用的顯示器、打印機、繪圖儀等外,還包括 LED 指示燈、LCD 屏幕、揚聲器等媒體。嵌入式系統與外部設備或其他的計算機系統進行通信時,需經接口適配電路,進行工作速度、數據格式、電平等匹配與轉換,嵌入式系統應用的接口形式是多種多樣的。嵌入式系統中接口電路的設計需要首先考慮的是電平匹配問題,嵌入式系統微處理器所提供與接收信號的電平,必須與所連接的設備的電平相匹配,否則將導致電路損壞或邏輯判定錯誤。其次,還要考慮驅動能力和干擾問題等因素。 當前,在嵌入式系統中廣泛應用的接口主要有:RS232-串行接口、并行接口、USB 接口、IEEE-1394 接口以及 RJ-45 接口等,此外,以藍牙為代表的無線接口在嵌入式系統中的應用也日趨廣泛。
(1)RS-232 接口。RS-232 接口是美國電子工業協會推廣的一種串行通信總線標準,是數據通信設備和數據終端設備間傳輸數據的接口總線,RS-232-C 標準規定其最高速率為20kbps,在低碼元畸變的情況下,最大傳輸距離是 15 米,通過使用增強器,其傳輸距離已經延長到 1000 米左右。
(2)USB 接口。USB(Universal Serial Bus,通用串行總線)是 1995 年由康柏等幾大廠商共同制定的一種支持即插即用的外設接口標準,它支持 USB 外部設備到主機外部總線的連接。在 USB 系統中,必須有一個 USB 主控制器,USB 設備通過四根電纜與 USB 主控制器直接或間接相連,USB 的規范由最初的 1.0 版本發展到了 1.1 版本,以至當前主流的高速 2.0 版本,最高速率可到 480Mbps。
(3)1394 接口。IEEE1394 即火線(FireWire)最初是由 Apple 公司研制的,1995 年IEEE 協會以 FireWire 為藍本制定了這個串行接口標準,其電纜接口為 6 根電纜組成,包括一堆電源線和兩對雙絞信號線。IEEE1394 協議定義了三種傳輸速率:98.304Mbps、196.608Mbps 和 392.216Mbps,分別稱之為 S100、S200 和 S400。為了保證數據傳輸率,線纜的長度一般不超過 4.5m。
IEEE1394 標準通過所有連接設備建立起一種對等網絡,不需要主控節點來控制數據流,即跟 USB 技術相比,最大的區別是 IEEE1394 不需要主控制器,不同的外設之間可以直接傳遞信息,此外,采用該技術,兩臺計算機可以共享同一個外部設備。
IEEE1394 同時支持同步和異步傳輸兩種模式。在異步傳輸模式下,信息的傳遞可以被中斷,在同步模式下,數據將不受任何中斷和干擾下實現連續傳輸。采用異步傳輸模式時,IEEE1394 會根據不同的設備實際需要分配相應的帶寬。同時,IEEE1394 設備也支持熱插拔和即插即用。
12.2.2 軟件架構
隨著嵌入式技術的發展,特別是在后 PC 時代,嵌入式軟件系統得到了極大的豐富和發
展,形成了一個完整的軟件體系,如圖 12-3 所示。
這個體系自底向上由三部分組成:嵌入式操作系統、應用支撐軟件和應用軟件。
(1)操作系統。嵌入式操作系統由操作系統內核、應用程序接口、設備驅動程序接口等幾部分組成。嵌入式操作一般采用微內核結構。操作系統只負責進程的調度、進程間的通信、內存分配及異常與中斷管理最基本的任務,其他大部分的功能則由支撐軟件完成。
(2)應用支撐軟件。嵌入式系統中的應用支撐軟件由窗口系統、網絡系統、數據庫管理系統及 Java 虛擬機等幾部分組成。對于嵌入式系統來講,軟件的開發環境大部分在通用臺式計算機和工作站上運行,但從邏輯上講,它仍然被認為是嵌入式系統支撐軟件的一部分。應用支撐軟件一般用于一些淺度嵌入的系統中,如智能手機、個人數字助理等。
(3)應用軟件。嵌入式系統中的應用軟件是系統整體功能的集中體現。系統的能力總是通過應用軟件表現出來的,一個嵌入式系統可以沒有支撐軟件,甚至可以沒有操作系統,但不可以沒有應用軟件,否則它就不可能成為一個系統。從范圍上講,嵌入式系統的應用軟件涉及工業控制、家電、商業、通信等諸多領域。從跟用戶的交互方式上講,有跟桌面系統類似的軟件,也有嵌入程度很深、使用戶感覺不到其存在的應用軟件。從運行環境上講,有在操作系統和支撐軟件上運行的軟件,也有直接在硬件上運行的應用軟件。
12.3 嵌入式開發平臺與調試環境
嵌入式系統的應用支撐軟件近年來發展迅速。通常,應用支撐軟件包括窗口系統、數據庫管理系統及 Java 虛擬機等幾個部分。應用支撐軟件的出現大大改變了應用軟件的開發條件,同時也使得應用系統的功能不斷增強。本節主要介紹嵌入式開發環境與軟件調試技術。
12.3.1 嵌入式系統軟件開發平臺
嵌入式系統的軟件開發方法采用的不是通用的開發方法,而是交叉式開發方法。本小節主要介紹嵌入式系統軟件開發的交叉編譯環境的基本概念和特點,以及軟件調試常用的幾種方法。
1.交叉平臺開發環境
嵌入式系統的軟件開發采用交叉平臺開發方法(Cross Platform Development,CPD),即軟件在一個通用的平臺上開發,而在另一個嵌入式目標平臺上運行。這個用于開發嵌入式軟件的通用平臺通常叫作宿主機系統,被開發的嵌入式系統稱為目標機系統。而當軟件執行環境和開發環境一致時的開發過程則稱為本地開發(Native Development,ND)。 圖 12-4 是一個典型的交叉平臺開發環境,通常包含三個高度集成的部分:
(1)運行在宿主機和目標機上的強有力的交叉開發工具和實用程序。
(2)運行在目標機上的高性能、可裁剪的實時操作系統。
(3)連接宿主機和目標機的多種通信方式,例如,以太網,串口線,ICE(In Circuit Emulator,在線仿真器)或 ROM 仿真器等。
2.交叉編譯環境
宿主機提供的基本開發工具是交叉編譯器、交叉鏈接器和源代碼調試器。作為目標機的嵌入式系統則可能提供一個動態裝載器、鏈接裝載器、監視器和一個調試代理等。在目標機和宿主機之間有一組連接,通過這組連接程序代碼映像從宿主機下載到目標機,這組連接同時也用來傳輸宿主機和目標機調試代理之間的信息。
嵌入式系統開發人員需要完全了解目標機系統如何在嵌入式系統上存儲程序映像、可執行映像如何下載到內存及執行控制如何傳給應用,以及運行期間如何和何時裝載程序映像,如何交叉式地開發和調試應用系統。這些方面對代碼如何開發、編譯、鏈接等步驟都有影響。
圖 12-5 是一個典型的交叉編譯環境的示例,顯示了如何使用開發工具處理各種輸入文件,并產生最終目標文件的過程。其中,交叉編譯器將用戶編寫的 C/C++/Java 源代碼文件根據目標機的 CPU 類型生成包含二進制代碼和程序數據的目標文件。在此過程中,交叉編譯器會建立一個符號表,包含所產生的目標文件中指向映像地址的符號名,當建立重定位輸出時,編譯器為每個相關的符號產生地址。
通常,還可以使用歸檔工具將這些目標文件收集到一起形成一個庫。最后,鏈接器將這些目標文件作為輸入來產生一個可執行的映像。
一般,用戶會先編輯一個鏈接腳本文件,用來指示鏈接器如何組合和重定位各個代碼段以便生成最終文件。此外,鏈接器還可以將多個目標文件組合成一個更大的重定位目標文件或一個共享目標文件。
目前,嵌入式系統中常用的目標文件格式是 COFF(Common Object File Format,公共對象文件格式)和 ELF(Executable Linking Format,可執行鏈接格式)。另外,一些系統還需要有一些專門的工具將上述格式轉換成二進制代碼格式才可使用。
通常,一個目標文件包含:
(1)關于目標文件的通用信息,如文件尺寸、啟動地址、代碼段和數據段等。
(2)機器架構特定的二進制指令和數據。
(3)符號表和重定位表。
(4)調試信息。
12.3.2 嵌入式開發調試
通用系統與嵌入式系統的軟件調試過程存在著明顯的差異。對于通用系統,調試工具與被調試的程序位于同一臺計算機上,調試工具通過操作系統的調試接口來控制被調試的程序。但是在嵌入式系統中,由于資源的限制,不能直接在其上開發應用程序,調試過程通常也以交叉方式進行的。在實際開發實踐中,經常采用的調試方法有直接測試法、調試監控法、在線仿真法、片上調試法及模擬器法等。
1.直接調試法
直接調試法就是將目標代碼下載到目標機上,讓其執行,通過觀察指示燈來判斷程序的運行狀態。在嵌入式系統發展的早期一般采用這種方式進行調試,其基本步驟是:
(1)在宿主機上編寫程序。
(2)在宿主機上編譯、鏈接生成目標機可執行程序代碼。
(3)將可執行代碼寫入目標機的存儲器中。
(4)在目標機運行程序代碼。
(5)判斷程序的運行情況,如有錯誤則糾正錯誤,重復以上步驟,直到正確為止。
(6)將可執行代碼固化到目標機,開發完成。
這種方法是最原始的調試方法,程序運行時產生的問題,只有通過檢查源代碼來解決,因而開發效率很低。
2.調試監控法
調試監控法也叫插樁法。目標機和宿主機一般通過串行口、并行口或以太網相連接,采用這種方法還需要在宿主機的調試器內和目標機的操作系統上分別啟動一個功能模塊,然后通過這兩個功能模塊的相互通信來實現對應用程序的調試。在目標機上添加的模塊叫作樁,也叫調試服務器或調試監控器,主要有兩個作用:其一,監視和控制被調試的程序;其二,跟宿主機上調試程序通信,接收控制指令,返回結果等。
在進行調試的時候,宿主機上的調試器通過連接線路向調試監控器發送各種請求,實現目標機內存讀/寫和寄存器訪問、程序下載、單步跟蹤和設置斷點等操作。來自宿主機的請求和目標機的響應都按照預定的通信協議進行交互。 使用插樁法作為調試手段時,開發應用程序的基本步驟是:
(1)在宿主機上編寫程序的源代碼。
(2)在宿主機編譯、鏈接生成目標機可執行程序。
(3)將目標機可執行代碼下載到目標機的存儲器中。
(4)使用調試器進行調試。
(5)在調試器幫助下定位錯誤。
(6)在宿主機上修改源代碼,糾正錯誤,重復上述步驟直到正確為止。
(7)將可執行代碼固化到目標機上。
相對于直接測試法,插樁法明顯地提高了開發效率,降低了調試的難度,縮短了產品的開發周期,有效降低了開發成本。但是插樁法仍有明顯的缺點,主要體現在以下幾個方面:
(1)調試監控器本身的開發是個技術難題。
(2)調試監控器在目標機中要占用一定的系統資源,如 CPU 時間、存儲空間及串口
或網絡接口等外設資源。
(3)調試時,不能響應外部中斷,對有時間特性的程序不適用。
(4)在調試過程中,被調試的程序實際上在調試監控器所提供的環境中運行,這個環境可能會與實際目標程序最終的運行環境有一定的差異,這種差異有可能導致調試通過的程序最后仍不能運行。
為了克服插樁法的缺點,出現了一種改良的方法,即 ROM 仿真器法。ROM 仿真器可以被認為是一種用于替代目標機上 ROM 芯片的硬件設備,ROM 仿真器一端跟宿主機相連,一端通過 ROM 芯片的引腳插座與目標機相連。對于嵌入式處理器來
說,ROM 仿真器像是一個只讀存儲器,而對于宿主機來說,像一個調試監控器。ROM 仿真器的地址可以實時映射到目標機的 ROM 地址空間里,所以它可以仿真目標機的 ROM。ROM 仿真器在目標機和宿主機之間建立了一條高速信息通道,其典型的應用就是跟插樁法相結合,形成一種功能更強的調試方法。該方法具有如下優點:
(1)不必再開發調試監控器。
(2)由于是通過 ROM 仿真器上的串行口、并行口或網絡接口與宿主機連接,所以不
必占用目標機上的系統資源。
(3)ROM 仿真器代替了目標機上原來的 ROM,所以不必占用目標機上的存儲空間來
保存調試監控器。
(4)另外,即使目標機本身沒有 ROM,調試依然可以進行,并且不需要使用專門工
具向 ROM 寫入程序和數據。
3.在線仿真法
ICE 是一種用于替代目標機上 CPU 的設備。對目標機來說,在線仿真器就相當于它的CPU,在線仿真器本身就是一個嵌入式系統,有自己的 CPU、內存和軟件。在線仿真器的 CPU 可以執行目標機的所有指令,但比一般的 CPU 有更多的引腳,能夠將內部信號輸出到被控制的目標機上,在線仿真器的存儲器也被映射到用戶的程序空間,因此,即使沒有目標機,僅用在線仿真器也可以進行程序的調試。
在線仿真器和宿主機一般通過串行口、并行口或以太網相連接。在連接在線仿真器和目標系統時,用在線仿真器的 CPU 引出端口替代目標機的 CPU。在用在線仿真器調試程序時,在宿主機運行一個調試器界面程序,該程序根據用戶的操作指令控制目標機上的程序運行。 在線仿真器能實時地檢查運行程序的處理器的狀態,設置硬件斷點和進行實時跟蹤,所以提供了更強的調試功能。在線仿真器,支持多種事件的觸發斷點,這些事件包括內存讀寫、I/O 讀寫及中斷等。在線仿真器的一個重要特性就是實時跟蹤,在線仿真器上有大容量的存儲器用來保存每個指令周期的信息,這個功能使用戶可以知道事件發生的精確時序,特別適于調試實時應用、設備驅動程序和對硬件進行功能測試。但是,在線仿真器的價格一般都比較昂貴。
4.片上調試法
片上調試(In Circuit Debugger,ICD)是 CPU 芯片內部的一種用于支持調試的功能模塊。按照實現的技術,片上調試可以分為仿調試監控器、后臺調試模式(Background Debugging Mode,BDM)、連接測試存取組(Joint Test Access Group,JTAG)和片上仿真(On Chip Emulation,OnCE)等幾類。仿調試監控器類的 ICD 芯片產品有 Motorola 的 CPU16、 CPU32 和ColdFire 等系列,BDM 類的主要有 Motorola 的 MPC5xx 和 MPC8xx 系列等, OnCE 類的主要有 Motorola 的 DSP 芯片系列,JTAG 類的主要有 PPC6xxx、PPC4xx、 ARM7TDMI、ARM9TDMI 及 Intel1960 等。
目前,使用較多的是采用 BDM 技術的 CPU 芯片。這種芯片的外面有跟調試相關的引腳,這些引腳在調試的時候被引出,形成一個與外部相連的調試接口,這種 CPU 具有調試模式和執行模式兩種不同的運行模式。當滿足了特定的觸發條件時,CPU 進入調試模式,在調試模式下,CPU 不再從內存中讀取指令,而是通過其調試端口讀取指令,通過調試端口還可以控制 CPU 進入和退出調試模式。這樣在宿主機上的調試器就可以通過調試端口直接向目標機發送要執行的指令,使調試器可以讀/寫目標機的內存和寄存器,控制目標程序的運行及完成各種復雜的調試功能。
- 該方法的主要優點是:不占用目標機的通信端口等資源;調試環境和最終的程序運行環境基本一致;無須在目標機上增加任何功能模塊即可進行;支持軟、硬斷點;支持跟蹤功能,可以精確計量程序的執行時間;支持時序邏輯分析等功能。
- 該方法的缺點是:實時性不如在線仿真器法強;使用范圍受限,如果目標機不支持片上調試功能,則該方法不適用;實現技術多樣,標準不完全統一,工具軟件的開發和使用均不方便。
5.模擬器法
模擬器是運行于宿主機上的一個純軟件工具,它通過模擬目標機的指令系統或目標機操作系統的系統調用來達到在宿主機上運行和調試嵌入式應用程序的目的。
模擬器適合于調試非實時的應用程序,這類程序一般不與外部設備交互,實時性不強,程序的執行過程是時間封閉的,開發者可以直接在宿主機上驗證程序的邏輯正確性。當確認無誤后,將程序寫入目標機上就可正確運行。模擬器有兩種主要類型:一類是指令級模擬器,在宿主機模擬目標機的指令系統;另一類是系統調用級模擬器,在宿主機上模擬目標操作系統的系統調用。指令級的模擬器相當于宿主機上的一臺虛擬目標機,該目標機的處理器種類可以與宿主機不同,如宿主機是英特爾的 x86 系列機,而虛擬機可以是 ARM、PowerPC、MIPS 等。比較高級的指令級模擬器還可以模擬目標機的外部設備,如鍵盤、串口、網絡接口等。系統調用級的模擬器相當于在宿主機上安裝了目標機的操作系統,使得基于目標機的操作系統的應用程序可以在宿主機上運行。被模擬的目標機操作系統的類型可以跟宿主機的不同。兩種類型的模擬器相比較,指令級模擬器所提供的運行環境與實際目標機更為接近。
使用模擬器的最大好處是在實際的目標機不存在的條件下就可以為其開發應用程序,并且在調試時利用宿主機的資源提供更詳細的錯誤診斷信息,但模擬器有許多不足之處:
(1)模擬器環境和實際運行環境差別很大,無法保證在模擬條件下通過的應用程序也能在真實環境中正確運行。
(2)模擬器不能模擬所有的外部設備,嵌入式系統通常包含諸多外設,但模擬器只能模擬少數部分。
(3)模擬器的實時性差,對于實時類應用程序的調試結果可能不可靠。
(4)運行模擬器需要較高的宿主機配置。盡管模擬器有很多的不足之處,但在項目開發的早期階段,其價值是不可估量的,尤其對那些實時性不強的應用,模擬器調試不需要特殊的硬件資源,是一種非常經濟的方法。