本人學習電子信息工程快4年,但是接觸到的硬件開發和系統開發比較少,更多接觸到的是android軟件應用開發和簡單的單片機應用,嵌入式開發是多聽多餘瞭解。本人目的是想對嵌入式開發感興趣的朋友做一個關於嵌入式開發的框架和應用有個瞭解。
1、神碼是嵌入式系統?
嵌入式系統(Embedded
system),是一種“完全嵌入受控器件內部,爲特定應用而設計的專用計算機系統”,根據英國電器工程師協會(U.K.
Institution of Electrical Engineer)的定義,嵌入式系統爲控制、監視或輔助設備、機器或用於工廠運作的設備。與個人計算機這樣的通用計算機系統不同,嵌入式系統通常執行的是帶有特定要求的預先定義的任務。由於嵌入式系統只針對一項特殊的任務,設計人員能夠對它進行優化,減小尺寸降低成本。由於嵌入式系統通常進行大量生產,所以單個的成本節約,能夠隨着產量進行成百上千的放大。
嵌入式系統的核心是由一個或幾個預先編程好以用來執行少數幾項任務的微處理器或者單片機組成。與通用計算機能夠運行用戶選擇的軟件不同,嵌入式系統上的軟件通常是暫時不變的;所以經常稱爲“固件”。
2.嵌入式應用實例
- 自動櫃員機(ATM)automatic teller machine
- 航空電子,例如慣性導航系統、飛行控制硬件和軟件以及其他飛機和導彈中的集成系統
- 移動電話和電信交換機
- 計算機網絡設備,包括路由器、時間服務器和防火牆
- 辦公設備,包括打印機、複印機、傳真機、多功能打印機(MFPs)
- 磁盤驅動器(軟盤驅動器和硬盤驅動器)
- 汽車發動機控制器和防鎖死剎車系統
- 家庭自動化產品,如恆溫器、冷氣機、灑水裝置和安全監視系統
- 手持計算器
- 家用電器,包括微波爐、洗衣機、電視機、DVD播放器和錄製器
- 醫療設備,如X光機、核磁共振成像儀
- 測試設備,如數字存儲示波器、邏輯分析儀、頻譜分析儀
- 多功能手錶
- 多媒體電器:因特網無線接收機、電視機頂盒、數字衛星接收器
- 個人數碼助理(PDA),也就是帶有個人信息管理和其他應用程序的小型手持計算機
特性
- 嵌入式系統在廣義上說就是計算機系統,它包括除了以通用爲目的計算機之外的所有計算機。從便攜式音樂播放器到航天飛機的實時控制子系統都能見到嵌入式系統的應用。與通用計算機系統可以滿足多種任務不同,嵌入式系統只能完成某些特定目的的任務。但有些也有實時性能的制約因素必須得到滿足的原因,如安全性和可用性。除此之外其他功能可能要求較低或沒有要求,使系統的硬件得以簡化,以降低成本。對於大批量生產的系統來說,降低成本通常是設計的首要考慮。嵌入式系統通常需要簡化去除不需要的功能以降低成本,設計師通常選擇剛剛滿足所需功能的硬件使目標最小化低成本的實現。
- 嵌入式系統並非總是獨立的設備。許多嵌入式系統是以一個部件存在於一個較大的設備,它爲設備提供更多的功能,使設備能完成更廣泛的任務。例如,吉布森吉他機器人採用了嵌入式系統來調絃,但總的來說吉布森吉他機器人設計的目的絕不是調絃而是演奏音樂。同樣的,車載電腦作爲汽車的一個子系統,爲它提供了導航,控制,車況反饋等功能。
- 部分爲嵌入式系統編寫的程序被稱爲固件,他們存儲在只讀存儲器或閃存芯片。他們運行在資源有限的計算機硬件:小內存,沒有鍵盤,甚至沒有屏幕。
用戶界面
嵌入式系統用戶界面包括了從沒有用戶界面,專注於單一任務到現在的類似於現代桌面操作系統的複雜圖形用戶界面的各類界面。
簡單的嵌入式系統
簡單的嵌入式設備往往由按鈕,發光二極管(LEDs)和僅僅能顯示小字符或數字的顯示器,以及簡單的菜單系統組成。
較爲複雜的嵌入式系統
較爲複雜的嵌入式系統擁有的完整的圖形屏幕、觸摸感應或屏幕邊緣按鈕在最大限度地使用空間的同時,提供了足夠的靈活性:指點控制是很自然的非常理想的操控方式,這樣的方式可以改變屏幕的意義。
手持系統通常都有一個屏幕和作爲定位裝置的控制按鍵。
CPU平臺
在嵌入式系統設計中有許多不同的CPU架構,如ARM、MIPS、Coldfire/68k、PowerPC、X86、PIC、Intel 8051、Atmel AVR、Renesas H8、SH、V850、FR-V、M32R、DMCU等。
這與桌面計算機市場有所不同,至2003年爲止在那個領域只有少數幾家競爭的架構,其中主要是英特爾/AMDx86和用於Apple Macintosh的Apple/Motorola/IBM PowerPC。在桌面計算機領域,隨着對於Java接受程度的增長,軟件對於特定運行環境的依賴越來越少。
PC/104標準是小型、小批量嵌入式和ruggedized系統設計的基礎。這些系統通常使用DOS、Linux、NetBSD或者如QNX、Inferno這樣的實時嵌入式操作系統。
大批量生產的嵌入式系統的通常配置是片上系統(en:System On Chip),它是一個專用集成電路,CPU是外購的知識產權並且添加到集成電路設計中。一個類似的常用機制是使用可編程門陣列,所有的邏輯包括CPU部分都可以編程實現。許多時髦的FPGA都是爲這個目的設計的。
工具
同典型的計算機程序員一樣,嵌入式系統設計人員也使用編譯器、連結器和調試器開發嵌入式系統軟件。然而,他們也使用一些大多數程序員不熟悉的工具。
軟件工具的來源有如下幾種:
嵌入式系統設計人員也使用一些不爲普通計算機程序員所熟悉的軟件工具:
- 一個常用工具是“電路內部仿真器”(ICE,in-circuit emulator)或者是最新設計中的嵌入式調試器。這個調試工具是開發嵌入式程序的基本技巧。它代替微處理器或者嵌入微處理器內部,提供了在系統中快速調用和調試試驗代碼的便捷工具。一個焊點通常就是一個插入系統的特殊電路,通常使用一臺連結到這些焊點的個人計算機作爲調試界面。
- 連結器通常是各種各樣(exotic)。對於大多數商業編程來說,連接器幾乎總是最後纔想起的(afterthough)部分,缺省設置也從來不變。與此相反,嵌入式連結器有完整、複雜的命令行語言是很普通的。經常有不同類型的內存,分別保存特殊的代碼和數據。單獨的數據結構能夠放在特殊的地址,這樣軟件能夠很方便地訪問映射到內存的控制寄存器。嵌入式連結器經常有用於減小代碼大小和運行時間的外部(exotic)優化工具。例如,他們可能移動子程序的位置以使用較小的調用和跳轉指令。它們經常帶有管理data overlays和band switch技術的特性,這些技術是在嵌入式軟件經常使用的擴展廉價CPU的方法。
- 另外一個常用的工具是一個在程序中添加代碼和或者CRC的工具程序(經常是自己寫的),使用這個工具嵌入式系統能夠在執行程序之前先進行程序數據檢查。
- 爲數字信號處理開發軟件的嵌入式程序員經常使用MathCad或者Mathematica這樣的數學工具進行數學仿真。
- 一些較少使用的工具有將數據文件轉換成代碼的工具,使用這種工具就可以在程序中包含任意類型的數據。
- 少數一些項目爲了特殊的可靠性或者數字信號處理要求使用同步編程語言。
一些編程語言爲嵌入式系統編程提供了一些特殊支持。
- 對於C語言,ISO/IEC
TR 18037:2005定義了
- 指定的地址空間
- 指定的存儲類
- 基本輸入輸出的硬件尋址
調試
調試通常使用內部電路仿真器或者其他一些能夠在單片機微碼(microcode)內部產生中斷的調試器。微碼中斷讓調試器能夠在只有CPU工作的硬件中進行操作,基於CPU的調試器能夠從CPU的角度來測試和調試計算機的電路。PDP-11開創了這種特性的先河。
開發人員能夠仍然使用斷點、單步執行以及高級語言進行調試,在許多的調試工具上都有這種能力。另外開發人員在調試實時事件順序的時候需要記錄、使用簡單的記錄工具。
首先遇到這種問題的個人電腦和大型機程序員經常在設計優先級和可行方法的時候感到困惑。指導、代碼審查和非個人風格(egoless)的編程是值得推薦的。
隨着嵌入式系統變得越來越複雜,更高層次的工具和操作系統逐漸移植到可行的設備上。例如,蜂窩電話、個人數字助理和其他的消費用計算機需要一些從個人或者這些電子設備製造商之外的公司購買或者提供的一些重要軟件。在這些系統中,需要如Linux、OSGi或者Java這樣的開放編程環境,這樣第三方軟件提供上才能夠在大規模的市場上銷售軟件。
大多數這樣的開發環境都有一個運行在個人電腦上的參考設計,這種軟件的絕大部分都可以在傳統的個人電腦上開發。然而,從開放環境移植到專用的電子設備和電子設備的驅動程序開發通常仍然是傳統的嵌入式系統軟件工程師的工作。在有些情況下,the engineer works for the integrated circuit manufacturer, but there is still such a person somewhere.
操作系統
嵌入式系統經常沒有操作系統、專用的嵌入式操作系統(經常是實時操作系統)或者指定程序員移植到這些新系統。
啓動
嵌入式系統帶有啓動代碼,通常它禁止中斷、設置電子設備參數、測試計算機(RAM、CPU和軟件),然後開始應用程序運行。許多嵌入式系統從短暫的掉電狀態恢復,經常重起而不進行最近的自檢。在十分之一秒內重起是常見的現象。
許多設計人員發現LED在指示錯誤狀態上非常有用,它們可以幫助進行故障處理。一個常用的機制是在復位的時候點亮電子設備所有的LED以表明供電和LED正常工作;然後在進行加電自檢時由軟件改變LED的狀態;在此之後,軟件用這些LED指示操作過程中的正常或者故障狀態。這可以讓技術人員、工程師和用戶瞭解系統的狀態。