Ⅰ 嵌入式系統自學
嵌入式系統軟體工程 方法實用技術及應用,免費下載
鏈接:https://pan..com/s/10No3IypKyLg01bV4T9b22w
《嵌入式系統軟體工程:基礎知識、方法和應用》系統地闡述嵌入式系統軟體工程所涉及的過程、方法、內容,以及在典型工業領域中的應用。全書內容分為兩大部分:第一部分介紹嵌入式系統軟體工程方法論,主要包括嵌入式軟體的開發過程(需求工程、軟體和系統體系結構、編程和測試等內容),開發和測試中所採用的標准,與安全性相關的軟體系統的准入,以及嵌入式軟體所涉及的法律問題:第二部分介紹嵌入式系統軟體在汽車領域、軌道交通領域、航天領域、醫療器械、工業自動化、通信系統中的應用,在每個應用領域重點介紹具體應用領域的一些特定需求、技術和限制條件,以及它們對於嵌入式系統軟體開發過程的影響。
Ⅱ 嵌入式系統分析設計方法有幾種
嵌入式系統有linux、wince等。
系統設計比較難,做系統設計一般需要100~200人一到兩年的時間也許才能做出來。就不給你說設計了。
建議你最好先弄清楚系統。學學系統原理。
分析系統實際上就是看內核源代碼。做bootloader移植的修改的東西會多,看的也多,內核文件非常多。要分層級來看。
Ⅲ 什麼是~嵌入式操作系統
嵌入式操作系統EOS(Embedded
OperatingSystem)是一種用途廣泛的系統軟體,過去它主要應用於工業控制和國防系統領域。EOS負責嵌人系統的全部軟、硬體資源的分配、調度工作,控制協調並發活動;它必須體現其所在系統的特徵,能夠通過裝卸某些模塊來達到系統所要求的功能。目前,已推出一些應用比較成功的EOS產品系列。隨著Internet技術的發展、信息家電的普及應用及EOS的微型化和專業化,EOS開始從單一的弱功能向高專業化的強功能方向發展。嵌人式操作系統在系統實時高效性、硬體的相關依賴性、軟體固態化以及應用的專用性等方面具有較為突出的特點。EOS是相對於一般操作系統而言的,它除具備了一般操作系統最基本的功能,如任務調度、同步機制、中斷處理、文件功能等外,還有以下特點:
(1)可裝卸性。開放性、可伸縮性的體系結構。
(2)強實時性。EOS實時性一般較強,可用於各種設備控制當中。
(3)統一的介面。提供各種設備驅動接日.
(4)操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學易用.
(5)提供強大的網路功能,支持TCP門P協議及其它協議,提供TCP/UDP/IP/PPP協議支持及統一的MAC訪問層介面,為各種移動計算設備預留介面.
(6)強穩定性,弱交互性。嵌入式系統一旦開始運行就不需要用戶過多的干預,這就要負責系統管理的EOS臭有較強的穩定性。嵌入式操作系統的用戶接日一般不提供操作命令,它通過系統調用命令向用戶程序提供服務。
(7)固化代碼。在嵌入系統中,嵌入式操作系統和應用軟體被固化在嵌入式系統計算機的ROM中。輔助存儲器在嵌入式系統中很少使用,因此,嵌入式操作系統的文件管理功能應該能夠很容易地拆卸,而用各種內存文件系統.
(8)更好的硬體適應性,也就是良好的移植性.
國際上用於信息電器的嵌入式操作系統有40種左右。現在,市場上非常流行的EOS產品,包括3Corn公司下屬子公司的Palm
OS,全球佔有份額達50%,MicroS。fi公司的Wind。ws
CE不過29%。在美國市場,Palm
OS更以80%的佔有率遠超Windows
CE。開放源代碼的Linux很適於做信息家電的開發.
比如:中科紅旗軟體技術有限公司開發的紅旗嵌入式Linux和美商網虎公司開發的基於Xlinux的嵌人式操作系統「誇克」。「誇克」是目前全世界最小的Linux,它有兩個很突出的特點,就是體積小和使用GCS編碼。
常見的嵌入式系統有:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX
、Rtems
、QNX、INTEGRITY、OSE、C
Executive
.
嵌入式操作系統的發展也必將帶動新一輪的科技競爭.
Ⅳ 什麼是嵌入式系統如何理解嵌入式系統的定義
1、嵌入式系統:是一種"完全嵌入受控器件內部,為特定應用而設計的專用計算機系統",根據英國電氣工程師協會的定義,嵌入式系統為控制、監視或輔助設備、機器或用於工廠運作的設備。與個人計算機這樣的通用計算機系統不同,嵌入式系統通常執行的是帶有特定要求的預先定義的任務。由於嵌入式系統只針對一項特殊的任務,設計人員能夠對它進行優化,減小尺寸降低成本。嵌入式系統通常進行大量生產,所以單個的成本節約,能夠隨著產量進行成百上千的放大。
2、 可以這么理解嵌入式系統的定義: 嵌入式系統是用來控制或者監視機器、裝置、工廠等大規模設備的系統。國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。
3、(1)嵌入式系統是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統是與應用緊密結合的,它具有很強的專用性,必須結合實際系統需求進行合理的裁減利用。
(2)嵌入式系統是將先進的計算機技術、半導體技術和電子技術和各個行業的具體應用相結合後的產物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。所以,介入嵌入式系統行業,必須有一個正確的定位。例如Palm之所以在PDA領域佔有70%以上的市場,就是因為其立足於個人電子消費品,著重發展圖形界面和多任務管理;而風河的Vxworks之所以在火星車上得以應用,則是因為其高實時性和高可靠性。
(3)嵌入式系統必須根據應用需求對軟硬體進行裁剪,滿足應用系統的功能、可靠性、成本、體積等要求。所以,如果能建立相對通用的軟硬體基礎,然後在其上開發出適應各種需要的系統,是一個比較好的發展模式。目前的嵌入式系統的核心往往是一個只有幾K到幾十K微內核,需要根據實際的使用進行功能擴展或者裁減,但是由於微內核的存在,使得這種擴展能夠非常順利的進行。
實際上,嵌入式系統本身是一個外延極廣的名詞,凡是與產品結合在一起的具有嵌入式特點的控制系統都可以叫嵌入式系統,而且有時很難以給它下一個准確的定義。現在人們講嵌入式系統時,某種程度上指近些年比較熱的具有操作系統的嵌入式系統,本文在進行分析和展望時,也沿用這一觀點。
Ⅳ 關於嵌入式實時操作系統ucos ii的分析
嵌入式實時操作系統ucos ii的分析2010年01月06日 星期三 上午 01:15摘要:近年來,在單片機系統中嵌入操作系統已經成為人們越來越關心的一個話題。本文通過對一種源碼公開的嵌入式實時操作系統ucos ii的分析,以51系列單片機為例,闡述了在單片機中使用該嵌入式操作系統的優缺點,以及在應用中應當注意的一些問題。
關鍵詞:實時操作系統;ucos ii;單片機
引言
早在20世紀60年代,就已經有人開始研究和開發嵌入式操作系統。但直到最近,它才在國內被越來越多的提及,在通信、電子、自動化等需要實時處理的領域所曰益顯現的重要性吸引了人們越來越多的注意力。但是,人們所談論的往往是一些著名的商業內核,諸如VxWorks、PSOS等。這些商業內核性能優越,但價格昂貴,主要用於16位和32位處理器中,針對國內大部分用戶使用的51系列8位單片機,可以選擇免費的ucos ii。
ucos ii的特點
1.ucos ii是由Labrosse先生編寫的一個開放式內核,最主要的特點就是源碼公開。這一點對於用戶來說可謂利弊各半,好處在於,一方面它是免費的,另一方面用戶可以根據自己的需要對它進行修改。缺點在於它缺乏必要的支持,沒有功能強大的軟體包,用戶通常需要自己編寫驅動程序,特別是如果用戶使用的是不太常用的單片機,還必須自己編寫移植程序。
2.ucos ii是一個佔先式的內核,即已經准備就緒的高優先順序任務可以剝奪正在運行的低優先順序任務的CPU使用權。這個特點使得它的實時性比非佔先式的內核要好。通常我們都是在中斷服務程序中使高優先順序任務進入就緒態(例如發信號),這樣退出中斷服務程序後,將進行任務切換,高優先順序任務將被執行。拿51單片機為例,比較一下就可以發現這樣做的好處。假如需要用中斷方式採集一批數據並進行處理,在傳統的編程方法中不能在中斷服務程序中進行復雜的數據處理,因為這會使得關中斷時間過長。所以經常採用的方法是置一標志位,然後退出中斷。由於主程序是循環執行的,所以它總有機會檢測到這一標志並轉到數據處理程序中去。但是因為無法確定發生中斷時程序到底執行到了什麼地方,也就無法判斷要經過多長時間數據處理程序才會執行,中斷響應時間無法確定,系統的實時性不強。如果使用μC/OS-II的話,只要把數據處理程序的優先順序設定得高一些,並在中斷服務程序中使它進入就緒態,中斷結束後數據處理程序就會被立即執行。這樣可以把中斷響應時間限制在一定的范圍內。對於一些對中斷響應時間有嚴格要求的系統,這是必不可少的。但應該指出的是如果數據處理程序簡單,這樣做就未必合適。因為ucos ii要求在中斷服務程序末尾使用OSINTEXIT函數以判斷是否進行任務切換,這需要花費一定的時間。
3.ucos ii和大家所熟知的Linux等分時操作系統不同,它不支持時間片輪轉法。ucos ii是一個基於優先順序的實時操作系統,每個任務的優先順序必須不同,分析它的源碼會發現,ucos ii把任務的優先順序當做任務的標識來使用,如果優先順序相同,任務將無法區分。進入就緒態的優先順序最高的任務首先得到CPU的使用權,只有等它交出CPU的使用權後,其他任務才可以被執行。所以它只能說是多任務,不能說是多進程,至少不是我們所熟悉的那種多進程。顯而易見,如果只考慮實時性,它當然比分時系統好,它可以保證重要任務總是優先佔有CPU。但是在系統中,重要任務畢竟是有限的,這就使得劃分其他任務的優先權變成了一個讓人費神的問題。另外,有些任務交替執行反而對用戶更有利。例如,用單片機控制兩小塊顯示屏時,無論是編程者還是使用者肯定希望它們同時工作,而不是顯示完一塊顯示屏的信息以後再顯示另一塊顯示屏的信息。這時候,要是ucos ii即支持優先順序法又支持時間片輪轉法就更合適了。
4.ucos ii對共享資源提供了保護機制。正如上文所提到的,ucos ii是一個支持多任務的操作系統。一個完整的程序可以劃分成幾個任務,不同的任務執行不同的功能。這樣,一個任務就相當於模塊化設計中的一個子模塊。在任務中添加代碼時,只要不是共享資源就不必擔心互相之間有影響。而對於共享資源(比如串口),ucos ii也提供了很好的解決辦法。一般情況下使用的是信號量的方法。簡單地說,先創建一個信號量並對它進行初始化。當一個任務需要使用一個共享資源時,它必須先申請得到這個信號量,而一旦得到了此信號量,那就只有等使用完了該資源,信號量才會被釋放。在這個過程中即使有優先權更高的任務進入了就緒態,因為無法得到此信號量,也不能使用該資源。這個特點的好處顯而易見,例如當顯示屏正在顯示信息的時候,外部產生了一個中斷,而在中斷服務程序中需要顯示屏顯示其他信息。這樣,退出中斷服務程序後,原有的信息就可能被破壞了。而在μC/OS-II中採用信號量的方法時,只有顯示屏把原有信息顯示完畢後才可以顯示新信息,從而可以避免這個現象。不過,採用這種方法是以犧牲系統的實時性為代價的。如果顯示原有信息需要耗費大量時間,系統只好等待。從結果上看,等於延長了中斷響應時間,這對於未顯示信息是報警信息的情況,無疑是致命的。發生這種情況,在μC/OS-II中稱為優先順序反轉,就是高優先順序任務必須等待低優先順序任務的完成。在上述情況下,在兩個任務之間發生優先順序反轉是無法避免的。所以在使用ucos ii時,必須對所開發的系統了解清楚,才能決定對於某種共享資源是否使用信號量。
ucos ii在單片機使用中的一些特點
1.在單片機系統中嵌入ucos ii將增強系統的可靠性,並使得調試程序變得簡單。以往傳統的單片機開發工作中經常遇到程序跑飛或是陷入死循環。可以用看門狗解決程序跑飛問題,而對於後一種情況,尤其是其中牽扯到復雜數學計算的話,只有設置斷點,耗費大量時間來慢慢分析。如果在系統中嵌入 ucos ii的話,事情就簡單多了。可以把整個程序分成許多任務,每個任務相對獨立,然後在每個任務中設置超時函數,時間用完以後,任務必須交出 CPU的使用權。即使一個任務發生問題,也不會影響其他任務的運行。這樣既提高了系統的可靠性,同時也使得調試程序變得容易。
2.在單片機系統中嵌入ucos ii將增加系統的開銷。現在所使用的51單片機,一般是指87C51或者89C51,其片內都帶有一定的RAM和 ROM。對於一些簡單的程序,如果採用傳統的編程方法,已經不需要外擴存儲器了。如果在其中嵌入ucos ii的話,在只需要使用任務調度、任務切換、信號量處理、延時或超時服務的情況下,也不需要外擴ROM了,但是外擴RAM是必須的。由於ucos ii是可裁減的操作系統,其所需要的RAM大小就取決於操作系統功能的多少。舉例來說,μC/OS-II允許用戶定義最大任務數。由於每建立一個任務,都要產生一個與之相對應的數據結構TCB,該數據結構要佔用很大一部分內存空間。所以在定義最大任務數時,一定要考慮實際情況的需要。如果定得過大,勢必會造成不必要的浪費。嵌入ucos ii以後,總的RAM需求可以由如下表達式得出:
RAM總需求=應用程序的RAM需求+內核數據區的RAM需求+(任務棧需求+最大中斷嵌套棧需求)·任務數
所幸的是,μC/OS-II可以對每個任務分別定義堆棧空間的大小,開發人員可根據任務的實際需求來進行棧空間的分配。但在RAM容量有限的情況下,還是應該注意一下對大型數組、數據結構和函數的使用,別忘了,函數的形參也是要推入堆棧的。
3.ucos ii的移植也是一件需要值得注意的工作。如果沒有現成的移植實例的話,就必須自己來編寫移植代碼。雖然只需要改動兩個文件,但仍需要對相應的微處理器比較熟悉才行,最好參照已有的移植實例。另外,即使有移植實例,在編程前最好也要閱讀一下,因為裡面牽扯到堆棧操作。在編寫中斷服務程序時,把寄存器推入堆棧的順序必須與移植代碼中的順序相對應。
4.和其他一些著名的嵌入式操作系統不同,ucos ii在單片機系統中的啟動過程比較簡單,不像有些操作系統那樣,需要把內核編譯成一個映像文件寫入ROM中,上電復位後,再從ROM中把文件載入到RAM中去,然後再運行應用程序。ucos ii的內核是和應用程序放在一起編譯成一個文件的,使用者只需要把這個文件轉換成HEX格式,寫入ROM中就可以了,上電後,會像普通的單片機程序一樣運行。
結語
由以上介紹可以看出,ucos ii具有免費、使用簡單、可靠性高、實時性好等優點,但也有移植困難、缺乏必要的技術支持等缺點,尤其不像商用嵌入式系統那樣得到廣泛使用和持續的研究更新。但開放性又使得開發人員可以自行裁減和添加所需的功能,在許多應用領域發揮著獨特的作用。當然,是否在單片機系統中嵌入ucos ii應視所開發的項目而定,對於一些簡單的、低成本的項目來說,就沒必要使用嵌入式操作系統了。
Ⅵ 什麼是嵌入式系統原理是
根據IEEE(電氣和電子工程師協會)的定義,嵌入式系統是「控制、監視或者輔助裝置、機器和設備運行的裝置」(devices
used
to
control,
monitor,
or
assist
the
operation
of
equipment,
machinery
or
plants)。從中可以看出嵌入式系統是軟體和硬體的綜合體,還可以涵蓋機械等附屬裝置。目前國內一個普遍被認同的定義是:以應用為中心、以計算機技術為基礎、軟體硬體可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適用於應用系統對功能,對可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。它一般由以下幾部分組成:
嵌入式微處理器
外圍硬體設備
嵌入式操作系統
特定的應用程序
特點:
應用的特定性和廣泛性
技術、知識、資金的密集性
高效性
較長的生命周期
高可靠性
軟硬一體,軟體為主
無自舉開發能力
嵌入式系統本身是一個相對模糊的定義。目前嵌入式系統已經滲透到我們生活中的每個角落,工業、服務業、消費電子……,而恰恰由於這種范圍的擴大,使得「嵌入式系統」更加難於明確定義。
舉個簡單例子:一個手持的mp3是否可以叫做是嵌入式系統呢?答案肯定是「是」。另外一個PC104的微型工業控制計算機你會認為它是嵌入式系統嗎?當然,也是,工業控制是嵌入式系統技術的一個典型應用領域。然而比較兩者,你也許會發現二者幾乎完全不同,除了其中都嵌入有微處理器。那是否可以說嵌入著微處理器的設備就是嵌入式系統?那滑鼠中也有單片機,能叫嵌入式系統嘛?
那到底什麼是嵌入式系統?莫非嵌入式系統只是一個難以定義的抽象概念?
◆嵌入式系統是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統是與應用緊密結合的,它具有很強的專用性,必須結合實際系統需求進行合理的裁減利用。
◆嵌入式系統是將先進的計算機技術、半導體技術和電子技術和各個行業的具體應用相結合後的產物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。所以,介入嵌入式系統行業,必須有一個正確的定位。例如Palm之所以在PDA領域佔有70%以上的市場,就是因為其立足於個人電子消費品,著重發展圖形界面和多任務管理;而風河的Vxworks之所以在火星車上得以應用,則是因為其高實時性和高可靠性。
◆嵌入式系統必須根據應用需求對軟硬體進行裁剪,滿足應用系統的功能、可靠性、成本、體積等要求。所以,如果能建立相對通用的軟硬體基礎,然後在其上開發出適應各種需要的系統,是一個比較好的發展模式。目前的嵌入式系統的核心往往是一個只有幾K到幾十K微內核,需要根據實際的使用進行功能擴展或者裁減,但是由於微內核的存在,使得這種擴展能夠非常順利的進行。
實際上,嵌入式系統本身是一個外延極廣的名詞,凡是與產品結合在一起的具有嵌入式特點的控制系統都可以叫嵌入式系統,而且有時很難以給它下一個准確的定義。現在人們講嵌入式系統時,某種程度上指近些年比較熱的具有操作系統的嵌入式系統,本文在進行分析和展望時,也沿用這一觀點。
一般而言,嵌入式系統的構架可以分成四個部分:處理器、存儲器、輸入輸出(I/O)和軟體(由於多數嵌入式設備的應用軟體和操作系統都是緊密結合的,在這里我們對其不加區分,這也是嵌入式系統和Windows系統的最大區別)。
Ⅶ 幾種主流嵌入式操作系統分析---Linux
在目前已經開發成功的嵌入式系統中,大約有一般使用的是Linux。這與它自身的優良特性是分不開的。 嵌入式Linux同Linux一樣,具有低成本,多種硬體平台支持,優異的性能和良好的網路支持等優點。另外,為了更好的適應嵌入式領域的開發,嵌入式Linux還在Linux的基礎上做了部分改進: 1)改善的內核結構 Linux內核採用的是整體式結構(Monolithic),整個內核式一個單獨的,非常大的程序,這樣雖然能夠使系統的各個部分直接溝通,提高系統響應速度,但與嵌入式系統存儲容量小,資源有限的特點不相符合。因此,在嵌入式系統經常採用的是另一種稱為微內核(Microkernel)的體系結構,即內核本身只提供一些最基本的操作系統功能,如任務調度,內存管理,中斷處理等,而類似於文件系統和網路協議等附加功能則運行在用戶空間中,並且可以根據實際需要進行取捨。這樣就大大減小了內核的體積,便於維護和移植。
Ⅷ 系統學習嵌入式的步驟是什麼
新手必讀「嵌入式系統學習11大步驟」
1、Linux 基礎
安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命令 認識Linux系統的常用服務安裝Linux操作系統 Linux基本命令實踐 設置Linux環境變數 定製Linux的服務 Shell 編程基礎使用vi編輯文件 使用Emacs編輯文件 使用其他編輯器
2、Shell 編程基礎
Shell簡介 認識後台程序Bash編程熟悉Linux系統下的編輯環境 熟悉Linux下的各種Shell 熟練進行shell編程熟悉vi基本操作 熟悉Emacs的基本操作 比較不同shell的區別 編寫一個測試伺服器是否連通的shell腳本程序 編寫一個查看進程是否存在的shell腳本程序 編寫一個帶有循環語句的shell腳本程序 (更多相關內容請關註:東方賽富——國內一流嵌入式培訓學院)
3、Linux 下的 C 編程基礎
linux C語言環境概述 Gcc使用方法 Gdb調試技術 Autoconf Automake Makefile 代碼優化 熟悉Linux系統下的開發環境 熟悉Gcc編譯器 熟悉Makefile規則編寫Hello,World程序 使用 make命令編譯程序 編寫帶有一個循環的程序 調試一個有問題的程序
4、嵌入式系統開發基礎
嵌入式系統概述 交叉編譯 配置TFTP服務 配置NFS服務 下載Bootloader和內核 嵌入式Linux應用軟體開發流程熟悉嵌入式系統概念以及開發流程 建立嵌入式系統開發環境製作cross_gcc工具鏈 編譯並下載U-boot 編譯並下載Linux內核 編譯並下載Linux應用程序
4、嵌入式系統移植
Linux內核代碼 平台相關代碼分析 ARM平台介紹 平台移植的關鍵技術 移植Linux內核到 ARM平台 了解移植的概念 能夠移植Linux內核移植Linux2.6內核到 ARM9開發板
5、嵌入式 Linux 下串口通信
串列I/O的基本概念 嵌入式Linux應用軟體開發流程 Linux系統的文件和設備 與文件相關的系統調用 配置超級終端和MiniCOM 能夠熟悉進行串口通信 熟悉文件I/O 編寫串口通信程序 編寫多串口通信程序(更多相關內容請關註:東方賽富——國內一流嵌入式培訓學院)
6、嵌入式系統中多進程程序設計
Linux系統進程概述 嵌入式系統的進程特點 進程操作 守護進程 相關的系統調用了解Linux系統中進程的概念 能夠編寫多進程程序編寫多進程程序 編寫一個守護進程程序 sleep系統調用任務管理、同步與通信 Linux任務概述任務調度 管道 信號 共享內存 任務管理 API 了解Linux系統任務管理機制 熟悉進程間通信的幾種方式 熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序實現文件傳輸 編寫一個使用共享內存的程序
7、嵌入式系統中多線程程序設計
線程的基礎知識 多線程編程方法 線程應用中的同步問題了解線程的概念 能夠編寫簡單的多線程程序編寫一個多線程程序
8、嵌入式 Linux 網路編程
網路基礎知識 嵌入式Linux中TCP/IP網路結構 socket 編程 常用 API函數 分析Ping命令的實現 基本UDP套介面編程 許可證管理 PPP協議 GPRS 了解嵌入式Linux網路體系結構 能夠進行嵌入式Linux環境下的socket 編程 熟悉UDP協議、PPP協議 熟悉GPRS 使用socket 編寫代理伺服器 使用socket 編寫路由器 編寫許可證伺服器 指出TCP和UDP的優缺點 編寫一個web伺服器 編寫一個運行在 ARM平台的網路播放器
9、GUI 程序開發
GUI基礎 嵌入式系統GUI類型 編譯QT 進行QT開發熟悉嵌入式系統常用的GUI 能夠進行QT編程使用QT編寫「Hello,World」程序 調試一個加入信號/槽的實例 通過重載QWidget 類方法處理事件(更多相關內容請關註:東方賽富——國內一流嵌入式培訓學院)
10、Linux 字元設備驅動程序
設備驅動程序基礎知識 Linux系統的模塊 字元設備驅動分析 fs_operation結構 載入驅動程序了解設備驅動程序的概念 了解Linux字元設備驅動程序結構 能夠編寫字元設備驅動程序編寫Skull驅動 編寫鍵盤驅動 編寫I/O驅動 分析一個看門狗驅動程序 對比Linux2.6內核與2.4內核中字元設備驅動的不同Linux 塊設備驅動程序塊設備驅動程序工作原理 典型的塊設備驅動程序分析 塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構 能夠編寫簡單的塊設備驅動程序比較字元設備與塊設備的異同 編寫MMC卡驅動程序 分析一個文件系統 對比Linux2.6內核與2.4內核中塊設備驅動的不同
11、文件系統
虛擬文件系統 文件系統的建立 ramfs內存文件系統 proc文件系統 devfs 文件系統 MTD技術簡介 MTD塊設備初始化 MTD塊設備的讀寫操作了解Linux系統的文件系統 了解嵌入式Linux的文件系統 了解MTD技術 能夠編寫簡單的文件系統為 ARM9開發板添加 MTD支持 移植JFFS2文件系統 通過proc文件系統修改操作系統參數 分析romfs 文件系統源代碼 創建一個cramfs 文件系統 (更多相關內容請關註:東方賽富——國內一流嵌入式培訓學院)
Ⅸ 如何學習嵌入式
作者:匿名用戶
鏈接:https://www.hu.com/question/19688487/answer/32217959
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
學習嵌入式系統,首先應該明確什麼是嵌入式系統,否則費力去學,卻不知所學為何物,豈不惘然?嵌入式系統的定義很多,這也是困擾嵌入式系統學習的一個因素。筆者根據自己開發和教學過程中的理解,以及對各種嵌入式系統的應用進行總結,提出了嵌入式系統的簡單定義:嵌入式系統是嵌入式計算機系統的簡稱,這個定義突出嵌入式計算機系統和普通計算機系統的共性。下表列出了嵌入式系統的一些典型的應用:
智能機器人(S D R 4,火星登陸車)
娛樂和消費電子(Gameboy Advance,SonyPSP)
網路通信產品(Smartphone)
軍用設備(軍用PDA )
汽車(車載導航,自動駕駛,娛樂系統)
智能儀器(虛擬儀器)
安全防護(防火,防盜)
環境保護(探空氣球)
銀行和商業消費(ATM)
以火星登陸車為例來分析一下嵌入式系統的定義。火星登陸車雖然聽起來感覺在技術上有些高不可測,但是本質就是嵌入式計算機系統的應用,其核心就是一個計算機系統,而這個計算機系統的組成同傳統的計算機系統在本質上沒有什麼差別。兩者的顯著不同之處就在於,用於火星登陸車的計算機系統被安裝到了火星登陸車上。當然,一個計算機系統能夠被安裝在火星登陸車上,是需要進行很多特殊設計的。但是從本質上講,嵌入式系統的核心概念還在計算機系統。嵌入式系統學習的重點也在計算機系統上。一方面,學習者需要牢固掌握計算機系統本身的概念,更重要的是學習嵌入系統的開發過程同傳統計算機系統開發過程的差別。這里需要指出的是,很多學習者本來就沒有從事過完整計算機系統的開發,高校的教學是以程序設計為中心的,計算機系統的構成,操作系統的原理,編程語言等課程都是為了能夠讓學生更好的使用計算機系統進行程序設計,在現有的計算平台上來設計實現各種應用,學生一般沒有機會學習一個完整的計算機系統是如何構建,並親身參與到構建的每一個過程。而對於嵌入式系統而言,從事平台開發的人就是要親自去開發出一個完整的計算機系統,這個過程包括
1. 需求分析
2 硬體設計
3 驅動程序
4 Bootloader & BSP (板級支持包)
5 操作系統的移植
6 應用程序的開發
7 性能檢查
嵌入式系統教學的目的就是教會學生如何根據需求去建立滿足某種特殊行業需求的嵌入式計算機系統。讓學生學會如何構件硬體平台,進行硬體設計,選擇能夠滿足應用要求的最佳的嵌入式操作系統,並完成Bootloader,BSP和驅動程序的編寫,移植,調試等過程。為了滿足行業需求,最終要在所建立的系統上編寫調試相應的應用程序,並進行性能的測試和檢查。
你是誰,你需要學習哪些東西?
如果你的工作只是需要在PC 機上編寫一個圖片瀏覽程序,那麼你就沒有必要去了解當系統收到一個ARP請求包後應該如何回應。同樣的道理,嵌入式系統的學習也是有很多方面的。就嵌入式系統的設計和實現而言,基本上需要四種不同的工作:系統設計工作,硬體設計工作,驅動程序和操作系統移植工作和應用程序設計開發工作。
1.系統設計工作
在系統的設計階段,系統分析師將根據需求確定系統的硬體的基本構成,根據系統的需求選擇使用那種處理器,使用哪種操作系統,使用那些軟體開發工具。系統分析師往往是較為完整的參與過嵌入式系統設計的全過程,對於系統應用的行業較為了解,對於嵌入式系統本身的開發流程十分清楚的人。
2.硬體設計工作
系統硬體設計人員需要根據系統分析師的設計結果,進行硬體原理圖的設計。通常需要硬體設計人員熟悉嵌入式系統的硬體構成。硬體設計人員需要了解常用的嵌入式系統處理器,存儲器(Flash,SDRAM),乙太網MAC晶元,音頻/視頻編解碼晶元,電源管理晶元,匯流排介面電路 (USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無線網路通信模塊(Bluetooth,WLAN,GPRS)等硬體電路構成元素的基本工作原理,連接使用方法,使用注意事項,基本調試方法等內容。在網路上能找到很多公司的評估板的原理圖,對於這些原理圖要仔細研究,摸清處理器同存儲器,網卡,液晶模塊等器件的連接方法和原因。通過對這些電路的研究,能夠較快地了解整個嵌入式系統的構成,這些電路同實際產品中的電路雖有一定差別的,特別是對於手持設備,但這些差別不影響初學者學習嵌入式系統的硬體設計基本構成。
以上這些知識,往往需要較長時間的學習和積累,需要親自參與實踐的機會。對於剛剛接觸嵌入式系統硬體開發的學生來講,一般不可能全部了解這些知識,但也不會是通通一無所知。筆者結合自己開發和教學的經驗認為:首先應該選定一款主流且較為簡單的嵌入式系統處理器,比如基於ARM7TDMI 內核的AT91M40800,S3C44B0 等嵌入式系統處理器,學習32 位RISC處理器的編程模型,指令集。高校教學中,單片計算機課程一般以8051系列單片為核心講解,由於現代32位處理器的結構和開發方式同8位單片機有著較大的差別,學習者還是需要花一點力氣來研究以下32位處理器的。以ARM處理器為例,學習者就需要理解處理器的多種工作模式,備份寄存器,RISC 指令集的特點,MMU 和虛擬地址,中斷處理過程等內容。在學習指令集的過程中,最好能夠每學習幾條指令,就使用這幾條指令在模擬器上實驗以下,觀察處理器執行的結果。這個過程一方面是學習者對於指令本身的學習能夠取得一個比較好的效果,另外也是對開發工具本身的一種學習。接著,就可以開始學習片上資源的使用和配置方法。這時就需要一個方便使用的開發板,學習者能夠通過JTAG模擬器將開發板同調試PC機相連,進行程序的下載,調試。特別是要仔細研究系統的初始化過程和中斷處理的過程。在開發過程中如果遇到問題,應自己分析問題產生的原因,通過分析縮小問題可能產生的范圍,最終找到問題的所在。最重要的就是要保持一種解決問題的信心,面對困難如何處理,往往能夠決定最終系統是否能夠調試成功。然後,學習者可以開始仔細學習處理器同存儲器的連接,存儲空間的配置,各種外擴器件,如網卡,AC97音效卡的工作原理和使用方法。嵌入式系統硬體設計中往往需要使用可編程器件,學習者還需要一定的時間來學習使用常用的可編程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的產品。進行系統硬體原理圖設計,就需要使用原理圖設計的EDA工具,常用的EDA 原理圖設計工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下來就可以參照評估板的電路圖,根據系統的設計要求,開始進行原理圖的繪制了。在原理圖繪制過程中,一定要搞清評估板電路連接的原因,對於一時沒有搞清楚的問題切不可矇混過關。例如,有些處理器的地址線是以位元組位單位的,而另一些處理器的地址線則是以兩個位元組為單位的,當連接16位的存儲器的時候,切不可想當然的把處理器的A 0 直接連接到存儲器的A 0 上面。另外,學生還應具有一定的PCB板圖繪制能力,因為在現階段,很多公司還不能完全把原理圖的設計工作和PCB 的繪制工作分開,往往要求硬體設計人員既能進行原理圖設計又能進行板圖設計。即使是PCB設計和原理圖設計分開的公司,也需要原理圖設計者能為PCB 的設計者對於不同的信號提出布板要求。
3.驅動程序和操作系統移植工作
現代嵌入式系統的開發同傳統8位單片機系統的開發相比,一個顯著的區別就是嵌入式操作系統的廣泛使用。在拿到焊接完畢的電路板,並進行基本的測試後,就要進行驅動程序和操作系統的移植工作了。首先要進行的Bootloader的編寫和移植工作。Bootloader相當於PC系統的BIOS。對於有些嵌入式操作系統,如uc/OSII沒有bootloader同樣可以開發調試。但是對於WindowsCE和嵌入式linux系統而言Bootloader就是必須的了。本文以Windows CE 為例,做一個簡要的說明。
Windows CE 系統的移植工作主要就是BSP(板級支持包)的開發過程。BSP將具體的硬體差異同操作系統的核心隔離開來,主要由Bootloaer ,OAL(OEMAbstraction Layer)和設備驅動程序三部分組成。WindowsCE系統中Bootloader叫做Eboot。Eboot被寫入系統的引導Flash。系統啟動時運行Eboot,完成通過網卡將調試PC 機中WindowsCE 操作系統映像下載到目標系統的SDRAM中並開始執行的功能。對於一個系統移植人員,首先需要閱讀文檔,了解WindowsCE系統Bootloader和BSP的基本概念和開發過程。(呵,還要做這工作啊,我還沒想到(初學^_^))Windows CE的開發系統Platform Builder提供了詳細的文檔和常式,開發人員需要仔細的閱讀文檔和常式。搞清楚各個函數之間的調用關系。在開發過程中的一個重要的步驟就是打通串口,使得目標板能夠通過PC機串口向調試PC 機發送數據。由於ARM系統的模擬器比較昂貴,而且操作系統的調試往往不使用JTAG調試器進行單步調試。所以能從串口觀察程序的執行過程和結果對於調試就顯得十分重要了。串口打通之後一個比較棘手的問題就是網卡晶元的調試。剛剛接觸嵌入式系統開發的人往往沒有直接在寄存器級上使用網卡晶元的經驗,而網卡晶元的說明一般都較為簡短,這就要求開發者學習一些乙太網的基礎知識,對乙太網的MAC 層有一個基本的認識。另外,各種網路調試(抓包)工具的使用也能大大降低系統調試的難度。系統的OAL需要根據具體硬體的不同做出相應的修改,這個部分可參照文檔進行,在調試過程中根據串口的信息分析出錯的地方。要充分發揮跨文件字元串搜索工具的功能,在浩如煙海的源文件中找到出錯的位置。當然,隨著開發者對系統文件目錄結構的熟悉和了解,錯誤定位的速度會不斷加快。WindowsCE 的驅動程序相對而言是比較好寫的。
4.應用程序的開發
嵌入式系統的應用程序開發同在PC 機上開發應用程序的區別不是很大。對於Windows CE系統而言,Microsoft已經提供了較為完善的開發工具。特別是.NET Compact work的使用,使得基於Windows CE.NETCompactwork的應用程序有了跨平台性。開發人員可以使用Windows 的C# 語言直接在PC 上進行http://CE.NET應用程序的開發和模擬調試,也可將目標系統同PC 機相連,進行聯機調試。現在有很多系統支持J2ME(JAVA的嵌入式系統版本) ,這使得JAVA 在嵌入式系統應用開發中佔有較大的優勢。另外,作為專業的嵌入式系統軟體開發人員,還需要充分了解面向對象技術和設計模式等方面的知識,當然作為初學者可以先不深入研究這方面的內容。
常用嵌入式系統處理器和操作系統
處理器
常用嵌入式系統處理器主要包括ARM 處理器,Power PC 處理器,基於MIPS 內核的嵌入式處理器,軟核處理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(數字信號處理器)等。
ARM 處理器的主要特點是具有較高的性能功耗比。ARM處理器被廣泛的應用在手機,PDA等領域,其中較為著名的有Intel 公司生產的基於ARM 內核的XScale系列處理器。由於所有公司生產的基於ARM內核的處理器具有相同的編程模型,在手持和電池供電的系統中,基於ARM的嵌入式系統處理器往往被首先選用。PowerPC(簡稱PPC)處理器具有較強的運算性能和數據吞吐能力,在網路和數據通信領域基於PPC的嵌入式系統處理器有著廣泛的應用。其中Motorola公司生產的MPC860/MPC8260被大量地應用在嵌入式網路產品中。MIPS 處理器的特點表現在十分強大的處理能力上。作為高性能處理器,MIPS處理器適用於網路、企業及高級消費類電子應用,特別是在機頂盒系統中,MIPS處理器具有較高的市場佔有率。隨著可編程器件的規模不斷擴大,使得人們能夠根據需要定製處理器,並方便的將針對某種特殊應用定製的處理器方便的在可編程器件內部實現。除了處理器外,計算機系統還需要許多其他構成部分,比如在多通道媒體數據處理系統中,經常需要使用可編程器件來實現高速的數據處理功能,使用軟核DSP來實現復雜的數字信號處理演算法,同時還需要處理器進行事務處理,軟核處理器將可編程器件,DSP同處理器結合在一起,為系統級設計提供了極大的靈活性。DSP(數字信號處理器)有別於通用處理器,集中表現在其強大的數字信號處理能力上。在DSP 內部提供了硬體乘累加器,處理器在設計上對於特殊的定址方式做了優化,一些DSP 還支持零耗循環(Zero OverheadLoop)。為了方便嵌入式系統設計,主流DSP 一般也都提供了豐富的外設。特別值得一提的是ADI 公司的Blackfin 系列DSP和TI 公司的DM64X系列DSP,兩種處理器都提供了豐富的片上外設,非常適用嵌入式系統應用。
操作系統
http://WindowCE.NET/5.0
作為Microsoft的產品,WindowCE.NE/5.0提供了功能完備的平台開發工具Platform Builder和應用開發工具Embedded Visual C++/Visual Studio 2003。WindowsCE由於擁有廣大使用者所熟悉的windows界面,系統提供了眾多驅動程序,並且有完備的文檔支持。對於應用開發而言,熟悉Windows系統開發的程序員很容易轉到WindowsCE 應用程序的開發。Windows CE將會是一個非常有前途的嵌入式操作系統。
VxWorks
VxWorks是由Windriver(風河)公司出品的嵌入式實時操作系統,大名鼎鼎的火星登陸車就是使用了VxWorks。Windriver為VxWorks提供了集成開發環境tornado。
υC/OSII
υC/OS是由Jean Labrosse設計編寫的開放源代碼的嵌入式實時操作系統,筆者最早接觸的嵌入式操作系統就是它。閱讀並深入理解υC/OS的源代碼對於理解實時系統是大有裨益的。
ARM Linux
ARM linux是由Russell King和其他開發者開發移植的用於ARM 處理器的linux操作系統。ARM Linux系統在GNU GPL下發布。
υCLinux
υClinux 是適用於沒有MMU 的嵌入式處理的LinuxOS 版本。υ Clinux 同樣在GNU GPL發布。
嵌入式系統開發過程中的常見問題和解決方法
Bootloader如何寫入Flash ?
初學者一般都會遇到如何將程序寫入處理器的問題。對於不同的處理器,可以採用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫。對於具有JTAG調試工具軟體的處理器,可以使用如下思路:編寫一段程序,這段程序能將位於SDRAM/SRAM 固定地址中的數據寫入Flash中。燒寫時,首先,將這段軟體下載到SDRAM 中,然後通過調試軟體將要寫入Flash的數據下載到SDRAM/SRAM的某個固定地址開始的緩沖區,然後通過調試器開始執行程序,將數據寫入Flash。除此以外,網路上還提供了很多專用的寫Flash的工具,開發者可以根據自己的需要選用。(現在明白了我在學的那個BF533為什麼先下個flashProgramer.dxe先了)
什麼是arm-elf-gcc?
arm-elf-gcc是一個交叉C語言編譯器。我們在PC平台下編譯程序,編譯器運行的處理器同生成的代碼將要運行的處理器相同。但是,在PC
機上編譯ARM程序時,編譯器運行的處理器同生成的代碼運行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標文件格式。(其實我們平時用的單片機編譯器如GCC—AVR等已是交叉編譯器了,我到現在才弄清楚什麼是交叉編譯器)
走了哪條編譯路徑?
系統程序和驅動程序往往包含很多的編譯選項,很多選項都是在編譯時通過命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
這樣在編譯的時候就知道,編譯的是哪一條路經了。對於支持#pragma message( 「I am here」)的編譯器也可使用#pragma message預編譯指令。
我怎麼知道那段代碼在那個文件中?
系統編程中經常需要使用在多個文件中搜索字元串,在windows平台下可以使用平台提供的多文件字元串搜索工具。在linux平台下,可以使用grep來搜索字元串。Grep的搜索功能十分強大,支持正則表達式搜索,熟練使用grep對於閱讀系統和驅動程序代碼是很有幫助的。
系統是從那個文件開始運行的?
對於Windows CE系統,一般從WINCE420\PLATFORM\YourPlatform\KERNEL\HAL目錄的某個匯編文件中。對於Linux系統版本不同會存在一定差異,以arm處理器為例,一般會在linux2.4.x\arch\arm\kernel的head-armv.S中。
程序執行到了那裡?
可以在程序中插入如下代碼來實現
printf( 「I am here %s, %d\n」,__FILE__,__LINE__);
代碼將打出printf語句所在的文件名和行號。
推薦書目
Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Edition這本書是筆者接觸嵌入式實時系統的入門書,在國內能夠買到中文版。這本書較為清楚地講述了實時系統的概念,各個組成部分的工作原理,特別是公開了實時系統內核的源代碼,仔細研究定會受益匪淺。有個小的提示,對於初學者,這本書可以先不看第一章,直接從第二章看起。
Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Concepts筆者在教學過程中發現,無論是計算機還是電子工程專業都有很多學生對於操作系統的基本概念都沒有搞清,很少有學生有完整的系統編程經驗。Operating System Concepts這本書對操作系統的概念講述只能用經典來形容。對於嵌入式系統有興趣深入研究的同學,首先要把基礎打好,這本書就成了必讀之物了。
Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 學習計算機的同學一定都知道OPERATINGSYSTEMs:Designand
Implementation這本書,筆者對於Tanenbaum這樣的教授由衷佩服。網路協議棧是嵌入式系統中的支柱性組成部分。願意致力於網路深層技術研究的同學,這本書將為你們建立一個堅實的網路基礎。
Karim Yaghmour Building Embedded Linux Systems本書詳盡的介紹了嵌入式linux系統的組成,基本概念和如何去建立各個部分。全書篇幅較小,可謂短小精悍。即可以作為嵌入式linux系統的入門讀物,又是開發過程各個部分的指南。
Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet Advanced RISC Machines Ltd (ARM) ARM920TTechnical Reference Manual學習嵌入式系統不了解當前應用最廣泛的嵌入式處理器怎麼行?ARM7 TDMI 的 data sheet是學習ARM編程模型,指令集的好東西。在嵌入式系統中,MMU(內存管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920TTechnical Reference Manual 正好可以幫你講解這方面的內容。
Perter Van Der LinDen Expert C Programming嵌入式系統級編程最常用的語言還是C 。很多同學都自認為自己的C語言學的很好,那好,就看看這本書吧,找找自己和Experts差距。
嵌入式開發與桌面開發既有不同,又有非常大的聯系,而且十分注重實際操作能力。搞桌面開發的人在一開始接觸嵌入式的時候,通常轉換不過來,這主要體現在定位上。如文中所說,你是誰,你要做什麼?我對硬體的了解僅限於編程領域,PCB設計一竅不通,但並不能說你不懂硬體就不能從事嵌入式開發。一個系統的開發設計方方面面,在自己感興趣和熟悉的領域做出自己的貢獻才是最主要的。
1。硬體設計: 需要有硬體設計的經驗,對各種嵌入式器件有很好的了解。
2。系統移植:需要匯編經驗,操作系統原理以及底層驅動的了解
3。應用程序:需要桌面編程經驗