Loading AI tools
別名:內嵌系統 来自维基百科,自由的百科全书
嵌入式系統(英語:Embedded system),是一種嵌入機械或電氣系統內部、具有專一功能和實時計算性能的計算機系統。[1][2]嵌入式系統常被用於高效控制許多常見設備,被嵌入的系統通常是包含數位硬件和機械部件的完整設備,例如汽車的防鎖死煞車系統。相反,通用計算機如個人電腦則設計靈活,可以智能處理各式各樣的運算情況,以滿足廣大終端用戶不同的需要。
此條目不符合維基百科的品質標準,需要完全重寫。 |
現代嵌入式系統通常是基於微控制器(如含集成內存和/或外設接口的中央處理單元)的,但在較複雜的系統中普通微處理器(使用外部存儲芯片和外設接口電路)也很常見。通用型處理器、專門進行某類計算的處理器、為手持應用訂製設計的處理器等,都可能應用到嵌入式系統。常見的專用處理器有數字信號處理器。
嵌入式系統的關鍵特性是處理特定的任務,因此工程師能對其進行優化,以降低產品的體積和成本,提升可靠性和性能。
嵌入式系統的物理形態包括便攜設備如計步器、電子手錶和MP3播放器,大型固定裝置如交通燈、工廠控制器,大型複雜系統如混合動力汽車、磁共振成像設備、航空電子設備等。它們的複雜度低至單片機,高至大型底盤或外殼內安裝有多個部件、外設和網絡。
嵌入式系統通常應用於消費類、烹飪、工業、自動化、醫療、商業及軍事領域。
從網絡級的電話交換機到手機終端都部署了大量嵌入式系統。
包括PDA、MP3播放器、移動電話、遊戲機、數位攝像機、DVD播放器、全球衛星定位系統接收器和打印機。
微波爐、洗衣機和洗碗機中採用了嵌入式系統,帶來靈活性、效率和功能;高級暖通空調系統採用聯網的恆溫器更精確、高效的按天或季度控制溫度;智能家居使用嵌入式設備進行感知、控制,通過有線和無線網絡控制燈光、溫濕度、安全、音視頻、監控等。
安全要求相當高的飛機中採用了先進的航空電子設備,如慣性導航系統、全球衛星定位接收器; 各種電機——直流無刷電機、異步電機和直流電機中使用了電氣/電子電機控制器; 汽車、電動車、混合動力汽車越來越多地採用嵌入式系統來節能減排; 其他汽車安全系統,包括防鎖死煞車系統、電子穩定控制系統、牽引力控制系統、自動四驅系統。
使用嵌入式設備進行生命體徵監測,電子聽診器放大聲音,各種醫療成像系統(正電子發射計算機斷層掃描、單光子發射計算機化斷層顯像、計算機斷層掃描、核磁共振成像)進行非入侵式內部檢查; 醫療設備內的嵌入式系統通常採用工業計算機。
嵌入式系統應用在交通、消防、安防、醫療和生命攸關系統中,由於這些系統能夠與黑客等隔離,因而更可靠。在消防安全中,經過設計,系統能在高溫環境下持續工作。出於安全需要,嵌入式系統可以自給自足,能夠處理切斷了電氣和通信系統的情況。
WSN領域的發展,促使一種新型的微型無線設備智慧型微塵迅速普及。人們可以通過信息監測和控制系統感知並作用於物理世界的無數事物。微塵採用微製造技術,通過先進的IC設計技術,將無線子系統與尖端的傳感器結合;從而讓人們可以通過信息監測和控制系統感知並作用於物理世界的無數事物。這些微塵是完全自給自足的,在需要更換電池或充電前通常可以工作數年。
利用嵌入式Wi-Fi模塊,原先利用串口進行通信的設備可以輕鬆啟用無線通信功能。
MIT儀器研究室的查爾斯·斯塔克·德雷珀開發的阿波羅制導計算機是現代嵌入式系統的雛形之一。在項目初期,它被看成風險最高的部分,原因是為了減小尺寸和重量,它採用了當時最新研發的單片集成電路。
第一款大批量生產的嵌入式系統是1961年發布的民兵I導彈內的D-17自動制導計算機。當民兵II導彈在1966年開始生產的時候,D-17升級成一種新型計算機,其中首次大量使用了集成電路。僅這個項目就將反及閘模塊的單價從1000美元降低至3美元,低到可用於商業產品。
由於二十世紀六十年代的這些早期應用,不僅嵌入式系統的價格降低了,同時處理能力和功能也獲得了巨大的提高。以第一款單片機英特爾4004為例,它是為計算器和其他小型系統設計的,但仍然需要外部存儲器和外圍芯片。1978年,國家工程製造商協會發布了可編程單片機的「標準」,涵蓋了幾乎所有以計算機為基礎的控制器,如單板機、數控設備,以及基於事件的控制器。
隨着微控制器和微處理器的價格下降,消費品也可以更換掉基於按鈕的模擬器件,如分壓計和可變電容,採用微處理器讀取開關或按鈕信號。
到了二十世紀八十年代早期,存儲器、輸入輸出部件集成到處理器內,產生了單片機。在採用通用計算機占用的成本太高昂的應用中,單片機取而代之。
較低成本的單片機編程後可取代很多獨立部件,這種嵌入式系統通常比傳統解決方案更複雜,但這些複雜性多數體現在單片機自身。嵌入式系統需要的外圍元件很少,多數設計工作集中在軟件,而軟件原型的建立及測試與設計與建立新的不使用嵌入式處理器的電路相比速度更快。
區別於可以執行多重任務的通用型計算機,嵌入式系統是為某些特定任務而設計的。有些系統則必須滿足實時性要求,以確保安全性和可用性;另一些系統則對性能要求很低甚至不要求性能,以簡化硬件、降低成本。
嵌入式系統並不總是獨立的設備。許多嵌入式系統由嵌入較大設備的小計算部件組成,提供較通用的功能。例如吉他機器人採用嵌入式系統來調弦,但總的來說它的設計目的絕不是調弦而是演奏音樂;車載電腦作為汽車的一個子系統存在,提供導航、控制、車況反饋等功能。
為嵌入式系統編寫的程序稱為固件,存儲在只讀存儲器或閃存芯片內,運行在有限的硬件資源上:小容量內存,小鍵盤或屏幕甚至沒有。
嵌入式系統用戶界面包括了從沒有用戶界面而只專注於單一任務、到類似於現代桌面操作系統的複雜圖形用戶界面的各類界面。
簡單的嵌入式設備使用按鈕、LED、圖形或數字LCD和簡單的菜單系統。
較高階的嵌入式系統使用圖形顯示屏,配合觸摸感應或屏邊按鈕使用,可使占用空間最小並提供靈活性:按鈕的含義隨屏幕顯示的內容而改變,而且指向想要的選項進行操作就能實現選擇。手持系統通常採用顯示屏加操縱杆按鈕作為觸控裝置。
有些系統通過序列埠(如RS-232、USB、I2C等)或網絡連接遠程提供用戶界面。這種方式的優勢在於:擴展了系統的性能、削減了顯示屏的成本、簡化了BSP,可以在PC上構建豐富的用戶界面。例如運行在嵌入式設備平台(如IP攝像機或路由器)上的嵌入式網絡服務器,它無需安裝定製軟件,而是在連到設備的PC端的網絡瀏覽器中顯示用戶界面。
嵌入式處理器大概可分為兩類。一類是普通微處理器:使用獨立的集成電路存儲器和外設。另一類是單片機:具有片上外設,降低了功耗、尺寸和成本。嵌入式系統的軟件是為某種應用定製的,而不是像個人計算機那樣的由終端用戶安裝的商品,因此可以使用各種不同的基本CPU架構:既有范紐曼型架構也有不同程度的哈佛結構;既有RISC也有非精簡指令集處理器;字長從4位到64位甚至更高,當然最典型的仍然是8/16位。多數架構由幾家不同的公司生產,使用了大量不同的變量和類型。
嵌入式系統也會使用通用型微處理器,但比單片機需要更多外圍電路。
PC/104和PC/104+是小型、小批量嵌入式強固系統的標準之一,大多基於x86架構;通常比標準PC要小,而比多數簡單的8/16位嵌入式系統要大;使用MSDOS、Linux、NetBSD,或實時嵌入式操作系統如MicroC/OS-II、QNX、VxWorks。有時這些主板也會使用非x86處理器。
在某些應用中,小巧、高效並非主要關注點,因而可以使用與x86型PC主板兼容的部件。VIA EPIA系列板卡則可以彌補這個空缺,它兼容PC但是高度集成、體積較小,或提供其他對嵌入式工程師很有吸引力的特性。這種方法的好處是低成本商品也可以使用通用的軟件開發工具。用這種方法構建的系統仍然是嵌入式系統,因為它嵌入在較大的設備中、用於滿足單一用途。例如ATM和電子遊戲機,它們都包含了針對各自應用的代碼。
多數嵌入式主板都不是圍繞PC設計的,也不使用ISA或PCI總線。如果採用SoC處理器,用標準總線連接分立元件就不是上策,此外軟硬件開發環境都可能會很不一樣。
一種常用的設計模式是採用小型系統模塊——也許只有商務卡片大小,容納高密度的BGA芯片如ARM處理器和外設、用於存儲的外部閃存、作為內存的DRAM。模塊廠商通常會提供引導軟件和操作系統選項,一般包括Linux和一些實時操作系統。這些模塊由熟悉專業測試方法的組織大批量生產,配合較小批量的、帶特殊應用外設的定製主板使用。
SoC是一種常見的為超大批量嵌入式系統設計的可配置陣列。它在單個芯片內包含了多處理器、乘法器、緩存和接口,形成一個完整的系統;通過專用集成電路或現場可編程門陣列來實現。
嵌入式系統通過外設與外部通信:
同典型的計算機程序員一樣,嵌入式系統設計人員也使用編譯器、連結器和調試器開發嵌入式系統軟件。然而,他們也使用一些大多數程序員不熟悉的工具。
軟件工具的來源有如下幾種:
嵌入式系統設計人員也使用一些不為普通計算機程序員所熟悉的軟件工具:
一些編程語言為嵌入式系統編程提供了一些特殊支持。
調試通常使用內部電路仿真器或者其他一些能夠在微控制器微碼(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指示操作過程中的正常或者故障狀態。這可以讓技術人員、工程師和用戶了解系統的狀態。一個有趣的例外是電度表(electric power meters)和其他一些大街上的東西,閃爍的指示燈是為了吸引注意力或者表示損壞狀態。
許多嵌入式系統都有一定程度或者一定數量的內部加電自檢,自檢有幾種類型:
根據人們需求的不同,可靠性也有不同的定義,有意思的是,可靠性的類型卻相對較少,相似可靠性類型的系統,使用相似類型的內在檢查和恢復方法:
常用的嵌入式軟件架構有幾種不同的基本類型。
在這種設計中,軟體有一個簡單的循環,這個循環調用各個子程序,每個子程序管理硬體或者軟體的某一部分。中斷通常用來設置標記或者更新軟體其他部分能夠讀取的暫存器。
系統使用簡單的API來完成允許和禁止中斷設置。如果處理得當的話,它能夠在嵌套子程序中處理嵌套調用,在最外面的中斷允許嵌套中恢復前面的中斷狀態。這種方法是實作Exokernel的一個最簡單的方法。
通常在循環中有一些子程序使用周期性的即時中斷控制一組軟體定時器,當一個定時器時間到的時候就會執行相應的子程序或者設置相應的標誌。
任何可能發生的硬體事件都應該有軟體定時器的支持,硬體事件大概每萬億次出現一次錯誤,對於現代的硬體來說大概是一年發生一次,對於以百萬計大規模生產的設備來說,遺漏一個軟體軟體定時器在商業上可能是災難性的。
有時測試軟體運行一組基於軟體的安全定時器,它們周期性地複位硬體中的看門狗計時器。如果軟體錯過一個事件,安全定時器軟體將會捕捉到它。如果安全定時器出錯,看門狗硬體將會複位系統。
可以使用指向每個狀態機函數的指標實作狀態機,函數可以用C++、C或者組合語言等實作。變化的狀態將不同的函數放到指標中,每次循環運行時都會執行函數指標。
許多設計人員建議每個循環讀一次輸入輸出設備、並且保存得到的結果,這樣可以保證邏輯過程的在一致的參數上運行。
許多設計人員喜歡將狀態機設計成每個狀態僅僅檢查一到兩項內容,通常是檢查硬體事件和軟體定時器。
設計人員建議多級狀態機應該讓低層狀態機早於高層狀態機運行,這樣高層就能夠根據正確的信息運行。
如內部燃燒控制這樣的複雜功能通常根據多維表格進行處理,代碼通常進行查表處理而不進行複雜的計算,為了減小表格的大小以及成本軟體可以在條目之間進行差值運算。
在最小的微控制器中,尤其是只有128位元組堆疊的8051中,控制環允許好的鏈接器使用靜態分配的數據覆蓋本地變數。在這種機制中,離子程序調用樹末端越近的變數得到的記憶體地址越高。當開始一個新的分支的時候,它的變數可以在以前分支遺棄的空間中進行重新分配。
簡單控制迴圈的一個主要缺點是它無法保證響應特定硬體事件的時間。
細心的設計可以很容易地保證中斷不會被長時間禁止,這樣中斷代碼就可以在非常精確的時間運行。
控制環的另外一個主要缺陷是增加新的特性的時候會變得複雜。需要花費很長時間的演算法必須小心地進行分解以使得每次只有一小部分在主循環中運行。
這種系統的優勢是它的簡單性,並且在很小的軟體上,循環執行地很快幾乎沒有人關心它是不可預測的。
它的另外一個優勢是這種系統保證運行軟體的質量,無法將不好的運行結果歸咎為其他的作業系統。
使用上面的非搶先式任務系統,從一個搶先式定時器或者其他中斷運行。
這樣系統就突然變得很不一樣了。任何一個任務的代碼都有可能損害其他任務的數據&emdash;所以它們必須進行切缺的切分。對於共享數據的訪問必須使用一些同步策略進行控制,如消息隊列、信號燈或者非阻塞同步機制。
經常在這一步開發組織就會購買一套實時操作系統。如果一個組織缺少能夠編寫操作系統的人才或者操作系統將要在幾個產品之上,這可能是一個明智的選擇。這通常要將開發計劃增加六到八周,and forever after programmers can blame delays on it.
這種方法試圖將系統組織得比宏內核更易於配置,而同時提供類似的特點。
微內核是實時操作系統的一個邏輯發展,通常的組織方式是操作系統內核分配內存並且將CPU在不同的線程之間進行切換。用戶模式的進程實現如文件系統、用戶接口等主要的功能。
微內核在二十世紀五十年代開始首次嘗試,但是由於計算機在任務間切換以及在任務間交換數據速度非常緩慢,所以人們放棄了微內核而鍾情於MULTICS和UNIX風格的大內核。總體上來說,微內核在任務切換以及任務間通信速度快的時候是比較成功的,在速度慢的時候是失敗的。
外內核通過使用普通的子程序調用獲得的通信效率很高,硬件以及系統中的軟件都是程序員能用也能擴展的。資源內核(可能是庫的一部分)分配CPU時間、內存以及其他資源。如多任務、網絡以及文件系統這樣的大內核特性通過代碼庫來提供。庫可以進行動態的連接、擴展或者共享。不同的應用甚至可以使用的不同的庫,但是所有的資源都來自於資源內核。
一些航空電子系統使用幾個商用計算機。這樣更進一步,每個計算機都在模擬它們自身的幾個副本,重要的程序同時在幾個計算機上運行並且進行投票控制(vote)。
模擬環境的優點就是即使一個計算機出現故障,軟件的不同例程能夠遷移到正常工作的軟件分區,表決的票數並不受影響。
通常虛擬軟件運行在計算機的用戶模式下,它捕捉、模擬硬件訪問和不在用戶模式下運行的指令。
另外一種常用的機制是兩個計算機計算for a bit,然後將它們的計算結果報到那個點上。如果一個計算機的計算是nut,它就會被關閉。
這種系統通常在沒有系統經費的嵌入式項目中流行,但是從這篇文章的多個作者來看,這通常是不正確的,它們的邏輯是:
然而許多工程師並不認同這一點,嵌入式Linux越來越受到人們的歡迎,尤其是在無線路由器和全球定位系統這樣的功能強大的嵌入式系統中。其中有下面一些原因:
一些系統需要安全、及時、可靠或者高效的特性,上面的架構卻無法達到,構建這樣的系統有一些廣為人知的技巧:
這就意味着使用兩個優先級和監視器的系統是安全、可靠的,因為它們沒有死鎖和優先級倒置的問題。如果監視器能夠執行到結束,那麼就永遠不會掛起。如果使用和諧的任務,可能還會相當高效。然而,RMA無法描述這些系統,優先級最好也不要到處都有,其中包括操作系統和硬件。
參見嵌入式操作系統
無操作系統 | 有操作系統 +弱GUI | 有操作系統 + GUI界面 | |
---|---|---|---|
8/16位處理器 |
|
/ | |
32位處理器 | / |
|
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.