“ARM嵌入式”博物館

用ARM設計的一個簡單安防系統 基於ARM的智慧型家居安防.圖書館和博物館等需要安防 和遠程監控.嵌入式系統一般指非 PC 系統,有計算機功能但又不稱之為計算機的設備或器材。 嵌入式系統的架構有專有架構和標準架構之分,在MCU(微控制器)產品上,像瑞薩(Renesas)、飛思卡爾(Freescale)、NEC都擁有自己的專有IP核,而其他嵌入式處理器都是基於標準架構。

嵌入式系統簡介

什麼是嵌入式系統

嵌入式系統一般指非 PC 系統,有計算機功能但又不稱之為計算機的設備或器材。 它是以套用為中心,軟硬體可裁減的,適應套用系統對功能、可靠性、成本、體積、功耗等綜合性嚴格要求的專用計算機系統。 簡單地說,嵌入式系統集系統的套用軟體與硬體於一體,類似於 PC 中 BIOS 的工作方式,具有軟體代碼小、高度自動化、回響速度快等特點, 特別適合於要求實時和多任務的體系。嵌入式系統主要由嵌入式處理器、相關支撐硬體、嵌入式作業系統及套用軟體系統等組成,它是可獨立工作的“器件”。 嵌入式系統幾乎包括了生活中的所有電器設備, 如掌上 PDA 、移動計算設備、電視機頂盒、手機上網、數位電視、多媒體、汽車、微波爐、數字相機、家庭自動化系統、電梯、空調、安全系統、自動售貨機、蜂窩式電話、消費電子設備、工業自動化儀表與醫療儀器等。 嵌入式系統的硬體部分,包括處理器 / 微處理器、存儲器及外設器件和 I/O 連線埠、圖形控制器等。嵌入式系統有別於一般的計算機處理系統 ,它不具備像硬碟那樣大容量的存儲介質,而大多使用 EPROM 、 EEPROM 或快閃記憶體 (Flash Memory) 作為存儲介質。軟體部分包括作業系統軟體 ( 要求實時和多任務操作 ) 和應用程式編程。應用程式控制著系統的運作和行為;而作業系統控制著應用程式編程與硬體的互動作用。

嵌入式系統發展歷程

從20世紀七十年代單片機的出現到今天各式各樣的嵌入式微處理器,微控制器的大規模套用。嵌入式系統的出現最初是基於單片機的。70年代單片機的出現,使得汽車、家電、工業機器、通信裝置以及成千上萬種產品可以通過內嵌電子裝置來獲得更佳的使用性能:更容易使用、更快、更便宜。這些裝置已經初步具備了嵌入式的套用特點,但是這時的套用只是使用8位的晶片,執行一些單執行緒的程式,還談不上“系統”的概念。
1971年11月,Intel公司成功地把算術運算器和控制器電路集成在一起,推出了第一款微處理器Intel 4004,其後各廠家陸續推出了許多8位、16位的微處理器,微處理器的廣泛套用形成了一個廣闊的嵌入式套用市場。
1976年Intel公司推出Multibus,1983年擴展為頻寬達40MB/s的MultibusⅡ。
1978年由Prolog設計的簡單Std匯流排廣泛套用於小型嵌入式系統。
從80年代早期開始,嵌入式系統的程式設計師開始用商業級的“作業系統”編寫嵌入式套用軟體,這使得可以獲取更短的開發周期,更低的開發資金和更高的開發效率,“嵌入式系統”真正出現了。
90年代以後,在分布控制、柔性製造、數位化通信和信息家電等巨大需求的牽引下,嵌入式系統進一步加速發展。隨著對實時性要求的提高,軟體規模不斷上升,實時核逐漸發展為實時多任務作業系統(RTOS),並作為一種軟體平台逐步成為目前國際嵌入式系統的主流。
21世紀無疑是一個網路的時代,未來的嵌入式設備為了適應網路發展的要求,必然要求硬體上提供各種網路通信接口。新一代的嵌入式處理器已經開始內嵌網路接口,除了支持TCP/IP協定,還有的支持USB、 IEEE1394、CAN、Bluetooth或IrDA通信接口中的一種或者幾種,同時也需要提供相應的通信組網協定軟體和物理層驅動軟體。軟體方面系統系統核心支持網路模組,甚至可以在設備上嵌入Web瀏覽器,真正實現隨時隨地用各種設備上網。

ARM的含義及其發展

ARM 即Advanced RISC Machines的縮寫,既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術的名字。
1985年4月26日,第一個ARM原型在英國劍橋的Acorn計算機有限公司誕生,由美國加州SanJoseVLSI技術公司製造。
20世紀80年代後期,ARM很快開發成Acorn的台式機產品,形成英國的計算機教育基礎。
1990年成立了Advanced RISC Machines Limited(後來簡稱為ARM Limited,ARM公司)。20世紀90年代,ARM 32位嵌入式RISC(Reduced lnstruction Set Computer)處理器擴展到世界範圍,占據了低功耗、低成本和高性能的嵌入式系統套用領域的領先地位。ARM公司既不生產晶片也不銷售晶片,它只出售晶片技術授權。
1985年4月26日,第一個ARM原型在英國劍橋的Acorn計算機有限公司誕生,由美國加州SanJoseVLSI技術公司製造。
20世紀80年代後期,ARM很快開發成Acorn的台式機產品,形成英國的計算機教育基礎。
1990年成立了Advanced RISC Machines Limited(後來簡稱為ARM Limited,ARM公司)。20世紀90年代,ARM 32位嵌入式RISC(Reduced lnstruction Set Computer)處理器擴展到世界範圍,占據了低功耗、低成本和高性能的嵌入式系統套用領域的領先地位。ARM公司既不生產晶片也不銷售晶片,它只出售晶片技術授權。
1991 年 ARM 公司成立於英國劍橋,主要出售晶片設計技術的授權。目前,採用 ARM技術智慧財產權( IP )核的微處理器,即我們通常所說的 ARM 微處理器,已遍及工業控制、消費類電子產品、通信系統、網路系統、無線系統等各類產品市場,基於 ARM 技術的微處理器套用約占據了 32 位 RISC 微處理器 75 %以上的市場份額, ARM 技術正在逐步滲入到我們生活的各個方面。
ARM 公司是專門從事基於 RISC 技術晶片設計開發的公司,作為智慧財產權供應商,本身不直接從事晶片生產,靠轉讓設計許可由合作公司生產各具特色的晶片,世界各大半導體生產商從ARM公司購買其設計的 ARM 微處理器核,根據各自不同的套用領域,加入適當的外圍電路,從而形成自己的 ARM 微處理器晶片進入市場。目前,全世界有幾十家大的半導體公司都使用 ARM 公司的授權,因此既使得 ARM 技術獲得更多的第三方工具、製造、軟體的支持,又使整個系統成本降低,使產品更容易進入市場被消費者所接受,更具有競爭力。
ARM處理器的三大特點是:耗電少功能強、16位/32位雙指令集和眾多合作夥伴。
ARM商品模式的強大之處在於它在世界範圍有超過100個的合作夥伴(Partners)。ARM 是設計公司,本身不生產晶片。採用轉讓許可證制度,由合作夥伴生產晶片。
當前ARM體系結構的擴充包括:
•Thumb 16位指令集,為了改善代碼密度;
•DSP DSP套用的算術運算指令集;
Jazeller 允許直接執行Java位元組碼。
ARM處理器系列提供的解決方案有:
•無線、消費類電子和圖像套用的開放平台;
•存儲、自動化、工業和網路套用的嵌入式實時系統
•智慧卡和SIM卡的安全套用。
ARM處理器本身是32位設計,但也配備16位指令集。一般來講存儲器比等價32位代碼節省達35%,然而保留了32位系統的所有優勢。ARM的Jazelle技術使Java加速得到比基於軟體的Java虛擬機(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。CPU功能上增加DSP指令集提供增強的16位和32位算術運算能力,提高了性能和靈活性。ARM還提供兩個前沿特性來輔助帶深嵌入處理器的高集成SoC器件的調試,它們是嵌入式ICE-RT邏輯和嵌入式跟蹤宏核(ETMS)系列。

主要的ARM產品系列

當前主要有5個產品系列——ARM7、ARM9、ARM9E、ARM10和SecurCore。
1、ARM7系列
最佳化用於對價位和功耗敏感的消費套用的低功耗32位核,有:
•嵌入式ICE-RT邏輯;
•非常低的功耗;
•三段流水線和馮•諾依曼結構,提供0.9MIPS/MHz。
2、SecurCore SC100特為安全市場設計,帶特定的抗拒竄改和反工程的特性。還帶靈活的保護單元確保作業系統和套用數據的安全。
3、ARM9系列
高性能和低功耗領先的硬宏單元,帶有:
•5段流水線;
•哈佛結構提供1.1MIPS/MHz。
ARM920T和ARM922T內置全性能的MMU、指令和數據cache和高速AMBA匯流排接口。AMBA片上匯流排是一個開放標準,已成為SoC構建和ip庫開發的事實標準。AMBA先進的高性能匯流排(AHB)接口現由所有新的ARM核支持,提供開發全綜合設計系統。
ARM940T內置指令和數據cache、保護單元和高速AMBA匯流排接口。
4、ARM9E系列
可綜合處理器,帶有DSP擴充和緊耦合存儲器(TCM)接口,使存儲器以完全的處理器速度運轉,可直接連線到核心上。
ARM966E-S用於矽片尺寸重要,而對cache沒要求的實時嵌入式套用,可配置TCM大小:0、4K、8K、16K,最大達64M。
ARM946E-S內置集成保護單元,提供實時嵌入式作業系統的cache核方案。
ARM926ET-S帶Jazelle擴充、分開的指令和數據高速AHB接口及全性能MMU。
VFP9 向量浮點可綜合協處理器進一步提高ARM9E處理器性能,提供浮點操作的硬體支持。
5、ARM10系列
硬宏單元,帶有:
•64位AHB指令和數據接口;
•6段流水線;
•1.25MIPS/MHz;
•比同等的ARM9器件性能提高50%。

ARM開發工具簡述

ARM的調試方法

ARM套用軟體的開發工具根據功能的不同,分別有編譯軟體、彙編軟體、連結軟體、調試軟體、嵌入式實時作業系統、函式館、評估板、JTAG仿真器線上仿真器等,目前世界上約有四十多家公司提供以上不同類別的產品。
用戶選用ARM處理器開發嵌入式系統時,選擇合適的開發工具可以加快開發進度,節省開發成本。因此一套含有編輯軟體、編譯軟體、彙編軟體、連結軟體、調試軟體、工程管理及函式館的集成開發環境(IDE)一般來說是必不可少的,至於嵌入式實時作業系統、評估板等其他開發工具則可以根據套用軟體規模和開發計畫選用。
使用集成開發環境開發基於ARM的套用軟體,包括編輯、編譯、彙編、連結等工作全部在PC機上即可完成,調試工作則需要配合其他的模組或產品方可完成,目前常見的調試方法有以下幾種:
1、指令集模擬器
部分集成開發環境提供了指令集模擬器,可方便用戶在PC機上完成一部分簡單的調試工作,但是由於指令集模擬器與真實的硬體環境相差很大,因此即使用戶使用指令集模擬器調試通過的程式也有可能無法在真實的硬體環境下運行,用戶最終必須在硬體平台上完成整個套用的開發。
2、駐留監控軟體
駐留監控軟體(Resident Monitors)是一段運行在目標板上的程式,集成開發環境中的調試軟體通過乙太網口、並行連線埠、串列連線埠等通訊連線埠與駐留監控軟體進行互動,由調試軟體發布命令通知駐留監控軟體控制程式的執行、讀寫存儲器、讀寫暫存器、設定斷點等。
駐留監控軟體是一種比較低廉有效的調試方式,不需要任何其他的硬體調試和仿真設備。ARM公司的Angel就是該類軟體,大部分嵌入式實時作業系統也是採用該類軟體進行調試,不同的是在嵌入式實時作業系統中,駐留監控軟體是作為作業系統的一個任務存在的。
駐留監控軟體的不便之處在於它對硬體設備的要求比較高,一般在硬體穩定之後才能進行套用軟體的開發,同時它占用目標板上的一部分資源,而且不能對程式的全速運行進行完全仿真,所以對一些要求嚴格的情況不是很適合。
3、JTAG仿真器
JTAG仿真器也稱為JTAG調試器,是通過ARM晶片的JTAG邊界掃描口進行調試的設備。JTAG仿真器比較便宜,連線比較方便,通過現有的JTAG邊界掃描口與 ARM CPU 核通信,屬於完全非插入式(即不使用片上資源)調試,它無需目標存儲器,不占用目標系統的任何連線埠,而這些是駐留監控軟體所必需的。另外,由於JTAG調試的目標程式是在目標板上執行,仿真更接近於目標硬體,因此,許多接口問題,如高頻操作限制、AC和DC參數不匹配,電線長度的限制等被最小化了。使用集成開發環境配合JTAG仿真器進行開發是目前採用最多的一種調試方式。
4、線上仿真器
線上仿真器使用仿真頭完全取代目標板上的CPU,可以完全仿真ARM晶片的行為,提供更加深入的調試功能。但這類仿真器為了能夠全速仿真時鐘速度高於100MHz的處理器,通常必須採用極其複雜的設計和工藝,因而其價格比較昂貴。線上仿真器通常用在ARM的硬體開發中,在軟體的開發中較少使用,其價格高昂也是線上仿真器難以普及的因素。
在以下的章節中,我們選取了ARM SDT、ARM ADS、MULTI 2000、Hitools for ARM、Embest IDE for ARM五種集成開發環境向讀者作一個簡單的介紹,這些產品在國內有相對較暢通的銷售渠道,用戶容易購買。前三種由國外廠商出品,歷史比較悠久,在全球範圍內套用較為廣泛,後兩種由國內廠商推出,具有很高的性價比。另外選取了國際市場上較流行的兩種JTAG仿真器:EPI公司的JEENI和ARM公司的Multi-ICE。

ARM集成開發環境舉例

ARM SDT
ARM SDT的英文全稱是ARM Software Development Kit ,是ARM公司(www.arm.com)為方便用戶在ARM晶片上進行套用軟體開發而推出的一整套集成開發工具。ARM SDT經過ARM公司逐年的維護和更新,目前的最新版本是2.5.2,但從版本2.5.1開始,ARM公司宣布推出一套新的集成開發工具ARM ADS 1.0,取ARM SDT而代之,今後將不會再看到ARM SDT的新版本。
ARM SDT由於價格適中,同時經過長期的推廣和普及,目前擁有最廣泛的ARM軟體開發用戶群體,也被相當多的ARM公司的第三方開發工具合作夥伴集成在自己的產品中,比如美國EPI公司的jeeni仿真器
ARM SDT(以下關於ARM SDT的描述均是以版本 2.50為對象)可在Windows95、98、NT以及Solaris 2.5/2.6、HP-UX 10上運行,支持最高到ARM9(含ARM9)的所有ARM處理器晶片的開發,包括StrongARM
ARM SDT包括一套完整的套用軟體開發工具:
* armcc ARM的C編譯器,具有最佳化功能,兼容於ANSI C。
* tcc THUMB的C編譯器,同樣具有最佳化功能,兼容於ANSI C。
* armasm 支持ARM和THUMB的彙編器。
* armlink ARM連線器,連線一個和多個目標檔案,最終生成ELF格式的可執行映像檔案。
* armsd ARM和THUMB的符號調試器。
以上工具為命令行開發工具,均被集成在SDT的兩個Windows開發工具ADW和APM中,用戶無需直接使用命令行工具。
APM Application Project Manageer,ARM工程管理器,完全圖形界面,負責管理源檔案,完成編輯、編譯、連結並最終生成可執行映像檔案等功能。
ADW Application Debugger Windows,ARM調試工具,ADW提供一個調試C、C 和彙編源檔案的全視窗原始碼級調試環境,在此也可以執行彙編指令級調試,同時可以查看暫存器、存儲區、棧等調試信息。
ARM SDT還提供一些實用程式,如fromELF、armprof、decaxf等,可以將ELF檔案轉換為不同的格式,執行程式分析以及解析ARM執行檔格式等。
ARM SDT集成快速指令集模擬器,用戶可以在硬體完成以前完成一部分調試工作;ARM SDT提供ANSI C、C 、Embedded C函式館,所有庫均以lib形式提供,每個庫都分為ARM指令集和Thumb指令集兩種,同時在各指令集中也分為高位元組結尾(big endian)和低位元組結尾(little endian)兩種。
用戶使用ARM SDT開發應用程式可選擇配合Angel駐留模組或者JTAG仿真器進行,目前大部分JTAG仿真器均支持ARM SDT。
ARM SDT 2.50的零售價一般在4000美元到4500美元。
ARM ADS
ARM ADS的英文全稱為 ARM Developer Suite,是ARM公司推出的新一代ARM集成開發工具,用來取代ARM公司以前推出的開發工具ARM SDT,目前ARM ADS的最新版本為1.2。
ARM ADS起源於ARM SDT,對一些SDT的模組進行了增強並替換了一些SDT的組成部分,用戶可以感受到的最強烈的變化是ADS使用CodeWarrior IDE集成開發環境替代了SDT的APM,使用AXD替換了ADW,現代集成開發環境的一些基本特性如源檔案編輯器語法高亮,視窗駐留等功能在ADS中才得以體現。
ARM ADS支持所有ARM系列處理器包括最新的ARM9E和ARM10,除了ARM SDT支持的運行作業系統外還可以在Windows2000/Me以及RedHat Linux上運行。
ARM ADS由六部分組成:
* 代碼生成工具(Code Generation Tools)
代碼生成工具由源程式編譯、彙編、連結工具集組成。ARM公司針對ARM系列每一種結構都進行了專門的最佳化處理,這一點除了作為ARM結構的設計者的ARM公司,其他公司都無法辦到,ARM公司宣稱,其代碼生成工具最終生成的執行檔最多可以比其他公司工具套件生成的檔案小20%。
* 集成開發環境(CodeWarrior IDE from Metrowerks)
CodeWarrior IDE是Metrowerks公司一套比較有名的集成開發環境,有不少廠商將它作為界面工具集成在自己的產品中。CodeWarrior IDE包含工程管理器、代碼生成接口、語法敏感編輯器、源檔案和類瀏覽器、原始碼版本控制系統接口、文本搜尋引擎等,其功能與Visual Studio相似,但界面風格比較獨特。ADS僅在其PC機版本中集成了該IDE。
* 調試器(Debuggers)
調試器部分包括兩個調試器:ARM擴展調試器AXD(ARM eXtended Debugger )、ARM符號調試器armsd(ARM symbolic debugger)。
AXD基於Windows9X/NT風格,具有一般意義上調試器的所有功能,包括簡單和複雜斷點設定、棧顯示、暫存器和存儲區顯示、命令行接口等。
Armsd作為一個命令行工具輔助調試或者用在其他作業系統平台上。
* 指令集模擬器(Instruction Set Simulators)
用戶使用指令集模擬器無需任何硬體即可在PC機上完成一部分調試工作。
* ARM 開發包(ARM Firmware Suite)
ARM開發包由一些底層的例程和庫組成,幫助用戶快速開發基於ARM的套用和作業系統。具體包括系統啟動代碼、串列口驅動程式、時鐘例程、中斷處理程式等,Angel調試軟體也包含在其中。
* ARM套用庫(ARM Applications Library)
ADS的ARM套用庫完善和增強了SDT中的函式館,同時還包括一些相當有用的提供了原始碼的例程。
用戶使用ARM ADS開發應用程式與使用ARM SDT完全相同,同樣是選擇配合Angel駐留模組或者JTAG仿真器進行,目前大部分JTAG仿真器均支持ARM ADS。
ARM ADS的零售價為5500美元,如果選用不固定的許可證方式則需要6500美元。
Multi 2000
Multi 2000是美國Green Hills軟體公司(www.ghs.com)開發的集成開發環境,支持C/C /Embedded C /Ada 95/Fortran程式語言的開發和調試,可運行於Windows平台和Unix平台,並支持各類設備的遠程調試。
Multi 2000支持Green Hills公司的各類編譯器以及其它遵循EABI標準的編譯器,同時Multi 2000支持眾多流行的16位、32位和64位處理器和DSP,如PowerPC、ARM、MIPS、x86、Sparc、TriCore、SH-DSP等,並支持多處理器調試。
Multi 2000包含完成一個軟體工程所需要的所有工具,這些工具可以單獨使用,也可集成第三方系統工具。Multi 2000各模組相互關係以及和套用系統相互作用

*工程生成工具(Project Builer)
工程生成工具實現對項目源檔案、目標檔案、庫檔案以及子項目的統一管理,顯示程式結構,檢測檔案相互依賴關係,提供編譯和連結的圖形設定視窗,並可對程式語言的進行特定環境設定。
* 原始碼調試器(Source-Level Debugger)
原始碼調試器提供程式裝載、執行、運行控制和監視所需要的強大的視窗調試環境,支持各類語言的顯示和調試,同時可以觀察各類調試信息。
* 事件分析器(EventAnalyzer)
事件分析器提供用戶觀察和跟蹤各類套用系統運行和RTOS事件的可配置的圖形化界面,它可移植到很多第三方工具或集成到實時作業系統中,並對以下事件提供基於時間的測量:任務上下文切換、信號量獲取/釋放、中斷和異常、訊息傳送/接受、用戶定義事件。
* 性能剖析器(Performance Profiler)
性能剖析器提供對代碼運行時間的剖析,可基於表格或圖形顯示結果,有效的幫助用戶最佳化代碼。
*實時運行錯誤檢查工具(Run-Time Error Checking)
實時運行錯誤檢查工具提供對程式運行錯誤的實時檢測,對程式代碼大小和運行速度只有極小影響,並具有記憶體泄漏檢測功能。
* 圖形化瀏覽器(Graphical Brower)
圖形化瀏覽器提供對程式中的類、結構變數、全局變數等系統單元的單獨顯示,並可顯示靜態的函式調用關係以及動態的函式調用表。
* 文本編輯器(Text Editor)
Multi 2000的文本編輯器是一個具有豐富特性的用戶可配置的文本圖形化編輯工具,提供關鍵字高亮顯示、自動對齊等輔助功能。
* 版本控制工具(Version Control System)
Multi 2000的版本控制工具和Multi 2000環境緊密結合,提供對套用工程的多用戶共同開發功能。Multi 2000的版本控制工具通過配置對支持很多流行的版本控制程式,如Rational公司的ClearCase等。
Embest IDE
Embest IDE英文全稱是Embest Integrated Development Environment,是深圳市英蓓特信息技術有限公司(www.embedinfo.com)推出的一套套用於嵌入式軟體開發的新一代集成開發環境。
Embest IDE是一個高度集成的圖形界面操作環境,包含編輯器、編譯器、彙編器、連結器、調試器等工具,其界面同Microsoft Visual Studio類似。Embest IDE支持ARM、Motorola等多家公司不同系列的處理器,對於ARM系列處理器,目前支持到ARM9系列,包括ARM7、ARM5等低系列晶片。
Embest IDE運行的主機環境為Windows95/98/NT/Me/2000,支持的開發語言包括標準C、Embedded C和彙編語言。
Embest IDE包括編輯器、編譯器、連線器、調試器、工程管理器等功能模組,用戶同時可選配Embest JTAG仿真器。Embest IDE的所有與處理器和調試設備相關模組採用即插即用方式,可在同一個工作區中同時管理多個套用軟體和庫工程,各工程均可配置不同的處理器和仿真器,用戶可在各工程中無縫切換。
Embest IDE主要特性:
*工程管理器:圖形化的工程管理工具,負責套用源程式的檔案組織和管理,提供編譯、連結、庫檔案的設定視窗。
*源碼編輯器:標準的文本編輯功能,支持語法關鍵字、關鍵字色彩顯示等。
* 編譯工具:集成著名優秀自由軟體GNU的GCC編譯器,並經過最佳化和嚴格測試。
* 調試器:源碼級調試,提供了圖形和命令行兩種調試方式,可進行斷點設定、單步執行、異常處理,可查看修改記憶體、暫存器、變數等,可查看函式棧,可進行反彙編等。
* 調試設備:Embest JTAG仿真器,一端是一個DB25的接口,連線到主機的並行口,另外一端是IDC插頭,連線到目標板的JTAG接口。
* 在線上幫助:中、英文兩種版本線上幫助文檔。
用戶可以使用Embest IDE配合Embest JTAG仿真器進行套用軟體的開發,Embest IDE同時也支持一些國內外常用的Jtag Cable線。
Embest IDE的零售價格為9600人民幣(包括Embest JTAG仿真器)。
Hitool for ARM
由Hitool International Inc.( www.hitoolsys.com)出品,是一種較新的ARM嵌入式套用軟體開發系統,主要包括Hitool ARM Debugger、GNU Compiler(內建)、JTAG cable、評估板以及嵌入式實時作業系統ThreadX等。其中編譯器模組可以替換成ARM ADS Compiler或ARM SDT Compiler。
其主要特點如下:
1) 近似MS Visual Studio的調試界面風格,可以在Win98/ME/NT等多種Win32環境下運行;
2) 優秀的工程管理器、原始碼和二進制代碼編輯器、字元串搜尋引擎以及調試目標的自由拖放等功能;
3) 支持彙編、C以及C 源碼級調試,不僅可以通過串口和並口進行本地調試,也可以通過TCP/IP進行遠端調試;
4) 集成了S-Record、Binary和Disassembly格式的記憶體上下載工具,Flash編程工具;
5) 支持多種常用的Jtag Cable,具備通過宏和腳本實現的自動化調試功能。
有關Hitool for ARM的詳細資訊見附錄和本書附帶光碟。
JEENI仿真器
JEENI仿真器是美國EPI公司(www.epitools.com) 生產的專門用於調試ARM7系列的開發工具。它與PC之間通過乙太網口或串口連線,與ARM7目標板之間通過JTAG口連線。該仿真器使用獨立電源。
JEENI仿真器支持ARM/THUMB指令,支持彙編/高級語言調試。用戶應用程式通過JEENI仿真器下載到目標RAM中。通過JEENI仿真器,用戶可以觀察/修改ARM7的暫存器和存儲器的內容,用戶可以在所下載的程式上設定斷點,用戶可以以彙編/高級語言單步執行程式,也可以全速運行程式,用戶可以觀察高級語言變數的數據結構及內容並對變數的內容線上修改。
JEENI 內部使用了一片帶有高速快取的 ARM 處理器,支持對調試操作的快速回響,比如:單步、讀寫存儲器、讀寫暫存器和下載應用程式到目標板。JEENI 的這種結構,允許乙太網接口在處理器執行JTAG指令的同時訪問存儲器。這種設計極大的提高了下載速度。
JEENI仿真器能夠很好地與SDT2.5工具連線,用戶可使用SDT的編譯器和調試界面。JEENI 對那些正在使用ARM BlackICE/EmbeddedICE JTAG接口的用戶來說是即插即用的替代品。JEENI 可用於ARM SDT 2.11a 或 SDT 2.5,另外大多數第三方的調試器也都支持 JEENI。
Multi-ICE
Multi-ICE是ARM公司自己的JTAG線上仿真器,目前的最新版本是2.1版。
Multi-ICE的JTAG鏈時鐘可以設定為5 kHz到10 MHz,實現JTAG操作的一些簡單邏輯由FPGA實現,使得並行口的通信量最小,以提高系統的性能。Multi-ICE硬體支持低至1V的電壓。Multi-ICE 2.1還可以外部供電,不需要消耗目標系統的電源,這對調試類似手機等攜帶型、電池供電設備是很重要的。
Multi-ICE 2.x支持該公司的實時調試工具MultiTrace,MultiTrace包含一個處理器,因此可以跟蹤觸發點前後的軌跡,並且可以在不終止後台任務的同時對前台任務進行調試,在微處理器運行時改變存儲器的內容,所有這些特性使延時降到最低。
Multi-ICE 2.x支持ARM7、ARM9、ARM9E、ARM 10和Intel Xscale微結構系列。它通過TAP控制器串聯,提供多個ARM處理器以及混合結構晶片的片上調試。它還支持低頻或變頻設計以及超低壓核的調試,並且支持實時調試。
Multi-ICE提供支持Windows NT4.0、Windows95/ 98/2000/Me、HPUX 10.20 和 Solaris V2.6/7.0的驅動程式。

常見的嵌入式作業系統有那些

嵌入式作業系統一覽
其實,嵌入式系統並不是一個新生的事物,從八十年代起,國際上就有一些IT組織、公司,開始進行商用嵌入式系統和專用作業系統的研發。這其中湧現了一些著名的嵌入式系統:
Windows CE
Microsoft Windows CE是從整體上為有限資源的平台設計的多執行緒、完整優先權、多任務的作業系統。它的模組化設計允許它對於從掌上電腦到專用的工業控制器的用戶電子設備進行定製。作業系統的基本核心需要至少200K的ROM。
VxWorks
VxWorks是目前嵌入式系統領域中使用最廣泛、市場占有率最高的系統。它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS RX000、POWER PC等等。大多數的VxWorks API是專有的。採用GNU的編譯和調試器。
pSOS
ISI公司已經被WinRiver公司兼併,現在pSOS屬於WindRiver公司的產品。這個系統是一個模組化、高性能的實時作業系統,專為嵌入式微處理器設計,提供一個完全多任務環境,在定製的或是商業化的硬體上提供高性能和高可靠性。可以讓開發者根據作業系統的功能和記憶體需求定製成每一個套用所需的系統。開發者可以利用它來實現從簡單的單個獨立設備到複雜的、網路化的多處理器系統。
QNX
QNX是一個實時的、可擴充的作業系統,它部分遵循POSIX相關標準,如:POSIX.1b實時擴展。它提供了一個很小的微核心以及一些可選的配合進程。其核心僅提供4種服務:進程調度、進程間通信、底層網路通信和中斷處理,其進程在獨立的地址空間運行。所有其它OS服務,都實現為協作的用戶進程,因此QNX核心非常小巧(QNX4.x大約為12Kb)而且運行速度極快。這個靈活的結構可以使用戶根據實際的需求,將系統配置成微小的嵌入式作業系統或是包括幾百個處理器的超級虛擬機作業系統。
Palm OS
3Com公司的Palm OS在PDA市場上占有很大的市場份額,它有開放的作業系統應用程式接口(API),開發商可以根據需要自行開發所需要的應用程式。
OS-9
Microwave的OS-9是為微處理器的關鍵實時任務而設計的作業系統,廣泛套用於高科技產品中,包括消費電子產品、工業自動化、無線通訊產品、醫療儀器、數位電視/多媒體設備。它提供了很好的安全性和容錯性。與其他的嵌入式系統相比,它的靈活性和可升級性非常突出。
LynxOS
Lynx Real-time Systems的LynxOS是一個分散式、嵌入式、可規模擴展的實時作業系統,它遵循POSIX.1a、POSIX.1b和POSIX.1c標準。LynxOS支持執行緒概念,提供256個全局用戶執行緒優先權;提供一些傳統的、非實時系統的服務特徵;包括基於調用需求的虛擬記憶體,一個基於Motif的用戶圖形界面,與工業標準兼容的網路系統以及套用開發工具。
目前,世面上有很多商業性嵌入式系統都在努力地為自己爭取著嵌入式市場的份額。但是,這些專用作業系統均屬於商業化產品,價格昂貴;而且,由於它們各自的原始碼不公開,使得每個系統上的套用軟體與其它系統都無法兼容。並且,由於這種封閉性還導致了商業嵌入式系統在對各種設備的支持方面存在很大的問題,使得對它們的軟體移植變得很困難。在嵌入式這個IT產業的新的關鍵領域,Linux作業系統適時地出現在了國家和國內各嵌入式廠商面前,由於Linux自身諸多優勢,吸引了許多開發商的目光,成為嵌入式作業系統的新寵。它的出現無疑為國家發展嵌入式作業系統事業提供了一個極有吸引力的機會。

用GNU工具開發基於ARM嵌入式系統的方法

當前,ARM公司的32位RISC處理器,以其核心耗電少、成本低、功能強、特有16/32位雙指令集,已成為移動通信、手持計算、多媒體數字消費等嵌入式解決方案的RISC標準,市場占有率超過了75 %。多家公司都推出了自己的基於ARM核心的處理器產品,越來越多的開發人員開始了針對ARM平台的開發。通常開發人員需要購買晶片廠商或第三方提供的開發板,還需要購買開發軟體,如C編譯器或者集成了實時作業系統的開發環境。開發板的價格從數百到上千美元,而編譯器、實時作業系統價格更是動輒數千到數萬美元。這樣,在開發初期,軟硬體上的投資就需要上萬美元,對於國內大多數開發人員來說,無疑是太貴了。
慶幸的是,GNU所倡導的自由軟體給開發者帶來了福音。1984 年,旨在開發一個類似 Unix 的,並且是完全免費的完整作業系統和配套工具:GNU 系統(發音為"guh-NEW")。GNU的作業系統和開發工具都是免費的,遵循GNU 通用公共許可證 (GPL)協定,任何人都可以從網上獲取全部的原始碼。關於GNU和公共許可證協定的詳細資訊,讀者可參看GNU網站的中文介紹:http://www.gnu.org/home.cn.html。
除了大家熟知的Linux作業系統外,GNU的軟體還包括編譯器(gcc,g )、二進制轉換工具(Objdump,objcopy)、調試工具(gdb,gdbserver,kgdb)和基於不同硬體平台的開發庫。GNU開發工具的主要缺點是採用命令行方式,用戶掌握和使用比較困難,不如基於Windows系統的開發工具好用。但是,GNU工具的複雜性是由於它更貼近編譯器和作業系統的底層,並提供了更大的靈活性。一旦學習和掌握了相關工具,也就了解了系統設計的基礎知識,為今後的開發工作打下基礎。GNU的開發工具都是免費的,遵循GPL協定,任何人都可以從網上獲取。筆者參與了一個基於ARM平台的嵌入式Linux系統開發,採用的是摩托羅拉龍珠系列的MC928MX1。從測試代碼、引導程式、嵌入式Linux移植、應用程式、圖形界面都可以用GNU工具進行開發,不需要在開發工具上做額外的投入。本文所介紹的開發方法同樣適用於其它公司的基於ARM的產品。
1 硬體平台
MC928MX1(以下簡稱MX1)是摩托羅拉公司基於ARM核心的第一款MCU,主要面向高端嵌入式套用。內部採用ARM920T核心,並集成了SDRAM/Flash、LCD、USB、藍牙(bluetooth)、多媒體快閃記憶體卡(MMC)、CMOS攝像頭等控制器。關於MX1的詳細資訊,感興趣的讀者可以參考http://www.motorola.com.cn/semiconductors/。作為套用開發的最小系統必須包括RAM(程式運行空間)、Flash(存放目標代碼)和串列接口(用於調試和下載程式)。MX1提供了6個片選端(CS0~CS5),內置了SDRAM控制器,數據寬度32位。在筆者的系統中採用了2片8M×16位的SDRAM和2片4M×16位的同步Flash存儲器,分別接入數據線的低16位和高16位,如圖1所示。
圖1中SDRAM接片選端CS2,Flash接片選端CS3,其餘為SDRAM/Flash的控制信號。最小系統還包括至少1個串列接口,可以採用MX1內置的UART控制器,圖略。
2 自舉模式
目前,許多嵌入式處理器都提供了自舉模式(bootstrap),供用戶寫入引導代碼。自舉模式利用了固化在晶片內部的一段引導程式,當處理器復位時,如果在特定引腳上加信號,則處理器將在復位後執行固化ROM中的程式。例如,MX1提供了4條復位引腳,復位時引腳不同的電平組合可以從不同的片選端啟動系統。自舉ROM中的程式完成串口的初始化,然後等待用戶從串口寫入用戶代碼。自舉模式所能接受的是一種專門格式的文本檔案,包括數據和要寫入/讀出的地址。關於自舉模式的代碼格式,可參考相關晶片的手冊。在摩托羅拉的網站還提供了許多小工具,幫助開發者將其它格式的檔案轉換成為自舉模式格式。通過自舉模式下載的通常是一段和上位機軟體(如超級終端)通信的程式,完成接收數據並寫入Flash的操作。寫入的數據可以是用戶自己的應用程式、數據或者作業系統的核心。通過自舉模式下載的引導程式同樣可以用GNU工具開發。
3 GNU的編譯器和開發工具
GNU提供的編譯工具包括彙編器as、C編譯器gcc、C 編譯器g 、連線器ld和二進制轉換工具objcopy。基於ARM平台的工具分別為arm-linux-as、arm-linux-gcc、arm-linux-g 、arm -linux-ld 和arm-linux-objcopy。GNU的所有開發工具都可以從www.gnu.org上下載,基於ARM的工具可以從www.uclinux.org獲得。GNU的編譯器功能非常強大,共有上百個操作選項,這也是這類工具讓初學者頭痛的原因。不過,實際開發中只需要用到有限的幾個,大部分可以採用預設選項。GNU工具的開發流程如下:編寫C、C 語言或彙編源程式,用gcc或g 生成目標檔案,編寫連接腳本檔案,用連線器生成最終目標檔案(elf格式),用二進制轉換工具生成可下載的二進制代碼。GNU工具都運行在Linux下,開發者需要1台運行Linux的PC作為上位機。由於篇幅所限,不能完整地介紹整個嵌入式作業系統的開發過程,將以第二節中提到的通過自舉模式下載的引導程式為例,說明開發的過程。對於像Linux這樣的大系統,基本的開發流程是一樣的。
引導程式將通過自舉模式下載到MX1的片內RAM,從地址0x00300000開始並執行。完成串口和SDRAM的初始化後,引導程式將等待接收應用程式或作業系統核心,將接收到的數據放在SDRAM中。數據接收完畢後,引導程式將SDRAM中的數據寫入Flash,下一次就可以從Flash中直接引導系統了。由於作業系統的核心比較大,如Linux有1 MB以上,下載過程必須考慮糾錯。因此,接收部分採用Xmode協定,可以用Windows下超級終端的Xmode傳送方式傳送檔案。
1)編寫C、C 語言或彙編源程式
通常彙編源程式用於系統最基本的初始化,如初始化堆疊指針、設定頁表、操作ARM的協處理器等。初始化完成後就可以跳轉到C代碼執行。需要注意的是,GNU的彙編器遵循AT&T的彙編語法,讀者可以從GNU的站點(www.gnu.org)上下載有關規範。彙編程式的預設入口是start標號,用戶也可以在連線腳本檔案中用ENTRY標誌指明其它入口點(見下文關於連線腳本的說明)。
(2)用gcc或g 生成目標檔案
如果應用程式包括多個檔案,就需要進行分別編譯,最後用連線器連線起來。如筆者的引導程式包括3個檔案:init.s(彙編代碼、初始化硬體) xmrecever.c(通信模組,採用Xmode協定)和flash.c(Flash擦寫模組)。
分別用如下命令生成目標檔案:
arm-linux-gcc-c-O2-o init.o init.s
arm-linux-gcc-c-O2-o xmrecever.o xmrecever.c
arm-linux-gcc-c-O2-o flash.o flash.c
其中-c命令表示只生成目標代碼,不進行連線;-o 命令指明目標檔案的名稱;-O2表示採用二級最佳化,採用最佳化後可使生成的代碼更短,運行速度更快。如果項目包含很多檔案,則需要編寫makefile檔案。關於makefile的內容,請感興趣的讀者參考相關資料。
(3)編寫連線腳本檔案
gcc等編譯器內置有預設的連線腳本。如果採用預設腳本,則生成的目標代碼需要作業系統才能載入運行。為了能在嵌入式系統上直接運行,需要編寫自己的連線腳本檔案。編寫連線腳本,首先要對目標檔案的格式有一定了解。GNU編譯器生成的目標檔案預設為elf格式。elf檔案由若干段(section)組成,如不特殊指明,由C源程式生成的目標代碼中包含如下段:.text(正文段)包含程式的指令代碼;.data(數據段)包含固定的數據,如常量、字元串;.bss(未初始化數據段)包含未初始化的變數、數組等。C 源程式生成的目標代碼中還包括.fini(析構函式代碼)和.init(構造函式代碼)等。有關elf檔案格式,讀者可自行參考相關資料。連線器的任務就是將多個目標檔案的.text、.data和.bss等段連線在一起,而連線腳本檔案是告訴連線器從什麼地址開始放置這些段。例如筆者的引導程式連線檔案link.lds為:
ENTRY(begin) SECTION { .=0x00300000; .text : { *(.text) } .data: { *(.data) } .bss: { *(.bss) } }
其中,ENTRY(begin)指明程式的入口點為begin標號;.=0x00300000指明目標代碼的起始地址為0x00300000,這一段地址為MX1的片內RAM;.text : { *(.text) }表示從0x00300000開始放置所有目標檔案的代碼段,隨後的.data: { *(.data) }表示數據段從代碼段的末尾開始,再後是.BSS段
(4)用連線器生成最終目標檔案
有了連線腳本檔案,如下命令可生成最終的目標檔案:
arm-linux-ld-nostadlib-o bootstrap.elf-T link.lds init.o xmrecever.o flash.o
其中,ostadlib表示不連線系統的運行庫,而是直接從begin入口;-o指明目標檔案的名稱;-T指明採用的連線腳本檔案;最後是需要連線的目標檔案列表。
(5)生成二進制代碼
連線生成的elf檔案還不能直接下載執行,通過objcopy工具可生成最終的二進制檔案:
arm-linux-objcopy-O binary bootstrap.elf bootstrap.bin
其中-Obinary指定生成為二進制格式檔案。Objcopy還可以生成S格式的檔案,只需將參數換成-O srec。如果想將生成的目標代碼反彙編,還可以用objdump工具:
arm-linux-objdump-D bootstrap.elf
至此,所生成的目標檔案就可以直接寫入Flash中運行了。如果要通過自舉模式下載,還需要轉換為自舉模式的檔案格式,相關轉換工具可以在摩托羅拉的網站上找到。
掌握了GNU工具後,開發者就可以開發或移植C或C 代碼的程式。用戶可以不需要作業系統,直接開發簡單應用程式。但對於更複雜的套用來說,作業系統必不可少。目前流行的原始碼公開的作業系統如Linux、μC/OS都可以用GNU工具編譯。ARM的Linux已有很多成熟的版本,可以支持ARM720、ARM920、ARM1020等多種處理器,讀者可從www.uclinux.org或www.armdevzone.com上獲取最新信息。Linux移植過程中和處理器相關的代碼都放在arch/arm目錄下。對於核心,用戶需要做的是設定自己系統的記憶體映像,RAM起始地址,I/O地址空間和虛擬I/O地址空間,參看arch/arm/mach-integrator/arch.c檔案。除了核心外,用戶還需要為自己的系統編制各種各樣的驅動程式。
4 調試工具
Linux下的GNU調試工具主要是gdb、gdbserver和kgdb。其中gdb和gdbserver可完成對目標板上Linux下應用程式的遠程調試。gdbserver是一個很小的應用程式,運行於目標板上,可監控被調試進程的運行,並通過串口與上位機上的gdb通信。開發者可以通過上位機的gdb輸入命令,控制目標板上進程的運行,查看記憶體和暫存器的內容。gdb5.1.1以後的版本加入了對ARM處理器的支持,在初始化時加入-target==arm參數可直接生成基於ARM平台的gdbserver。gdb工具可以從ftp://ftp.gnu.org/pub/gnu/gdb/上下載。
對於Linux核心的調試,可以採用kgdb工具,同樣需要通過串口與上位機上的gdb通信,對目標板的Linux核心進行調試。由於篇幅所限,感興趣的讀者可以從http://oss.sgi.com/projects/kgdb/上了解具體的使用方法。
以上以一個具體的實例為例,對GNU工具中的常用功能作了介紹。其實GNU工具的功能還遠不止這些,更進一步的操作有:針對不同處理器,不同算法的軟體最佳化、高效的內嵌彙編、大型項目管理功能等。相信GNU能成為越來越多開發人員的選擇。

學習嵌入式的訣竅“軟硬兼施”

怎樣做才能快速的嵌入式了? 其實,做工程是沒有捷徑可走的
先說做硬體:
把你的數字電路教材和模擬電路的教材讀熟,暫時先把重點放在數字電路上面,接著把微機原理和接口技術讀熟悉了,最好能用彙編寫幾個簡單的程式上機調試一下,這是很重要的。
完成上面的工作大概需要半年,不管你有多么的聰明,除非你以前這個基礎就打的不錯,否則,還是老老實實花上至少半年的時間!還是那句話,沒有捷徑可走,如果你相信那些什麼“21天學通xx”什麼的,那么我告訴你,放棄做工程吧!再說,你這么容易就學會了,別人也能的,你確定能拿到高薪嗎?
下一步,就是選擇一個DSP(或其它的嵌入式CPU)平台作為你的目標平台,先熟悉它的架構和與外圍電路的接口,然後學習她的指令集,也要寫一些小程式去跑一下。這個時候,你應該去買一個開發板了,一般的廠家附帶會給你一些demo程式,看懂它,理解它,修改它,在你的板子上跑一跑。
完成上面兩步,說明你已經入了這個行業的門了,下一步,想成為高手的話,就是自己去設計一些項目了,這個階段所花的時間每個人都是不同的,要看你的造化(主要是前面的基礎是否牢固)了。
再說說軟體:
在嵌入式行業,你想做軟體開發的話,沒別的,那就深入理解C語言,尤其是C的指針,如果你以前學過C,但是沒有意識到C相比其它的高級語言的優點的話(不是聽別人說的,你自己的體會),你可以按下面步驟來理解C:
1、重新翻一遍C的教材,記住一些常用的C語法,但不要死摳語法;
2、從編譯器的角度來理解C;
從編譯原理的角度來理解你工作中使用的高級語言,如果你做到這一點,至少有兩個好處:
第一個好處是避免一大堆低水平重複出現的編譯錯誤。一名優秀的Coder平均在一個工作日中應該完成200行以上的源碼,其編譯錯誤應該控制在5個以下,要知道這200行源碼不是一次完成的,所以大多數情況下你都要追求一次編譯通過;
第二個好處是可以提高源碼的可讀性和效率。規範地編寫你的代碼使你自己的邏輯清晰,因為你明白多加幾個括弧和空行、多換行對齊、多注釋,編譯器是會自動識別的,不影響程式執行的效率,反過來,控制好遞歸調用和循環內的if語句才是提高程式效率的關鍵,要全力避免遞歸,但要深刻理解遞歸,能通過自己建立堆疊來把遞歸程式轉換成非遞歸程式,要求還是較高的喔!
3、從硬體的角度來理解C。
完成上面3步,你就是C的高手了,接下來應該去看看軟體工程方面的書了,這個我還不太懂,不敢妄言。
另外說說教材的選擇:學一門東西,選好你的教材,只要一本就可以了。堅決防止這種情況的出現:去圖書館借很多本書,像搶劫似的,而只是每一本都翻翻,就又還給圖書館了的!注意上面我把彙編語言放在硬體學習的板塊裡面,是由於彙編跟硬體的關係太緊密了,以至於是先學彙編還是先學習硬體電路和CPU架構成了要分清到底是“先有雞還是先有蛋”的千年哲學難題了。

相關詞條

熱門詞條

聯絡我們