第一篇:《嵌入式技術》學習總結報告
《嵌入式技術》學習總結報告
目錄
一、嵌入式系統簡介............................................................................................2
1.1 嵌入式系統的定義和特點....................................................................2 1.2 嵌入式系統的構成.................................................................................3 1.3 嵌入式系統的應用.................................................................................5 1.4 嵌入式系統的工具鏈.............................................................................6 1.5 嵌入式系統的發展趨勢.........................................................................7
二、嵌入式系統的學習實踐................................................................................8
三、實驗內容........................................................................................................9
3.1ZedBoard-Zynq7000介紹........................................................................9 3.2 軟件的安裝設置...................................................................................10 3.3 main函數分析.......................................................................................10 3.4 任務管理...............................................................................................12
3.4.1 任務優先級.........................................................................................13 3.4.2 任務的堆棧.........................................................................................13 3.4.3 任務的狀態.........................................................................................14
3.5 就緒任務的管理...................................................................................15 3.6 任務調度...............................................................................................17
3.6.1 任務搶占.............................................................................................17 3.6.2 輪轉調度.............................................................................................18 3.6.3 調度時機.............................................................................................19 3.6.4 調度實現.............................................................................................19
3.7 上下文切換...........................................................................................20
四、工作總結......................................................................................................2
21/ 22
《嵌入式技術》學習總結報告
一、嵌入式系統簡介 1.1嵌入式系統的定義和特點
嵌入式操作系統(Embedded Operation System,EOS)是一種“嵌入機械或電氣系統內部、具有專屬功能的計算機系統”,通常要求實時計算性能。被嵌入的系統通常是包含硬件和機械部件的完整設備。相反,通用計算機如個人計算機則設計靈活,以滿足廣大終端用戶的需求。現在常見的很多設備都采用嵌入式系統控制。EOS負責嵌入系統的全部軟、硬件資源的分配、任務調度,控制、協調并發活動。它必須體現其所在系統的特征,能夠通過裝卸某些模塊來達到系統所要求的功能。嵌入式系統與對象系統密切相關,其主要技術發展方向是滿足嵌入式應用要求,不斷擴展對象系統要求的外圍電路(如ADC、DAC、PWM、日歷時鐘、電源監測、程序運行監測電路等),形成滿足對象系統要求的應用系統。因此,嵌入式系統作為一個專用計算機系統,要不斷向計算機應用系統發展。因此,可以把定義中的專用計算機系統引伸成,滿足對象系統要求的計算機應用系統。“嵌入性”、“專用性”與“計算機系統”是嵌入式系統的三個基本要素。對象系統則是指嵌入式系統所嵌入的宿主系統。另外,在理解嵌入式系統定義時,不要與嵌入式設備相混淆。嵌入式設備是指內部有嵌入式系統的產品、設備,例如,內含單片機的家用電器、儀器儀表、工控單元、機器人、手機、PDA等。
嵌入式系統的特點與定義不同,它是由定義中的三個基本要素衍生出來的。不同的嵌入式系統其特點會有所差異。與“嵌入性”的相關特點:由于是嵌入到對象系統中,必須滿足對象系統的環境要求,如物理環境(小型)、電氣/氣氛環境(可靠)、成本(價廉)等要求的特點。與“專用性”的相關特點:軟、硬件的裁剪性。滿足對象要求的最小軟、硬件配置等。與“計算機系統”的相關特點:嵌入式系統必須是能滿足對象系統控制要求的計算機系統。與上兩個特點相呼應,這樣的計算機必須配置有與對象系統相適應的接口電路。
目前,已推出一些應用比較成功的EOS產品系列。隨著Internet技術的發展、信息家電的普及應用及EOS的微型化和專業化,EOS開始從單一的弱功能向高專業化的強功能方向發展。嵌入式操作系統在系統實時高效性、硬件的相關依賴性、軟件固化以及應用的專用性等方面具有較為突出的特點。EOS是相對于一般操作系統而言的,它除具備了一般操作系統最基本的功能,如任務調度、同步機制、中斷處理、文件功能等外,還有以下特點:
(1)可裝卸性。開放性、可伸縮性的體系結構。
(2)強實時性。EOS實時性一般較強,可用于各種設備控制當中。(3)統一的接口。提供各種設備驅動接口。
(4)操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學易用。
2/ 22
《嵌入式技術》學習總結報告
(5)提供強大的網絡功能,支持TCP/IP協議及其它協議,提供TCP/UDP/IP/PPP協議支持及統一的MAC訪問層接口,為各種移動計算設備預留接口.(6)強穩定性,弱交互性。嵌入式系統一旦開始運行就不需要用戶過多的干預,這就要負責系統管理的EOS具有較強的穩定性。嵌入式操作系統的用戶接口一般不提供操作命令,它通過系統調用命令向用戶程序提供服務。
(7)固化代碼。在嵌入系統中,嵌入式操作系統和應用軟件被固化在嵌入式系統計算機的ROM中。輔助存儲器在嵌入式系統中很少使用,因此,嵌入式操作系統的文件管理功能應該能夠很容易地拆卸,而用各種內存文件系統.(8)更好的硬件適應性,也就是良好的移植性.1.2嵌入式系統的構成
嵌入式系統按形態可分為設備級(工控機)、板級(單板、模塊)、芯片級(MCU、SoC)。嵌入式系通常由嵌入式處理器、外圍設備、嵌入式操作系統和應用軟件等幾大部分組成。嵌入式系統與對象系統密切相關,其主要技術發展方向是滿足嵌入式應用要求,不斷擴展對象系統要求的外圍電路(如ADC、DAC、PWM、日歷時鐘、電源監測、程序運行監測電路等),形成滿足對象系統要求的應用系統。因此,嵌入式系統作為一個專用計算機系統,要不斷向計算機應用系統發展。
(1)嵌入式處理器
嵌入式處理器是嵌入式系統的核心部件。嵌入式處理器與通用處理器的最大不同點在于其大多工作在為特定用戶群設計的系統中。它通常把通用計算機中許多由板卡完成的任務集成在芯片內部,從而有有利于嵌入式系統設計趨于小型化,并具有高效率、高可靠性等特征。嵌入式處理器大概可分為兩類。一類是普通微處理器:使用獨立的集成電路存儲器和外設。另一類是單片機:具有片上外設,降低了功耗、尺寸和成本。嵌入式系統的軟件是為某種應用定制的,而不是像個人計算機那樣的由終端用戶安裝的商品,因此可以使用各種不同的基本CPU架構:既有范紐曼型架構也有不同程度的哈佛結構;既有RISC也有非精簡指令集處理器;字長從4位到64位甚至更高,當然最典型的仍然是8/16位。多數架構由幾家不同的公司生產,使用了大量不同的變量和類型。嵌入式系統也會使用通用型微處理器,但比單片機需要更多外圍電路。大的硬件廠商會推出自己的嵌入式處理器,因而現今市面上有1000多種嵌入式處理器芯片,其中使用最為廣泛的有ARM、MIPS、PowerPC、MC6800等。
SoC是一種常見的為超大批量嵌入式系統設計的可配置陣列。它在單個芯片內包含了多處理器、乘法器、緩存和接口,形成一個完整的系統;通過特定用途集成電路或現場可編程門陣列來實現。
(2)嵌入式主板
3/ 22
《嵌入式技術》學習總結報告
嵌入式主板一般理解為嵌入在設備里面做控制、數據處理使用的CPU板,也就是設備的“大腦”。嵌入式到設備里面,當然就會對主板的體積以及功耗(嵌入式主板的散熱問題)有比較嚴格的要求。所以一般來講嵌入式主板會具備尺寸小、高集成度、低功耗等特性。目前嵌入式主板比較常見的一般有兩大類:基于X86的嵌入式主板(一般使用INTEL、威盛、AMD或其他產家的X86芯片如:臺灣RDC、臺灣ICOP等等);基于RISC的ARM 嵌入式主板(由ARM公司授權生產,每個芯片產家各有自己特殊的功能)。嵌入式的ARM板一般都是板載CPU,而基于x86 CPU的主板則不一定。基于RISC 的ARM板一般都是根據產品的要求做具體設計,所以主板在尺寸外觀上面通常沒有做定義。
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和一些實時操作系統。這些模塊由熟悉專業測試方法的組織大批量生產,配合較小批量的、帶特殊應用外設的定制主板使用。
(3)外圍設備
外圍設備是指在一個嵌入式系統中,除了嵌入式處理器以外用于完成存儲、通信、調試、顯示等輔助功能的其它部件。根據外圍設備的功能可以分為存儲器、接口和人機交互。嵌入式系統通過外設與外部通信串行,包括通信接口:RS-232、RS-
422、RS-485等;同步串行通信接口:I2C、SPI、ESSI等;USB;多媒體卡:SD卡、CF卡等;網絡:以太網、LonWorks等;現場總線:CAN總線、LIN總線、PROFIBUS等;定時器:PLL、捕獲比較模塊和時間處理單元;分立IO:GPIO;模擬-數字/數字-模擬轉換(ADC/DAC);調試接口:JTAG、ISP、ICSP、BDM端口、BITP、DP9端口等。
(4)嵌入式操作系統
4/ 22
《嵌入式技術》學習總結報告
在大型嵌入式應用系統中,為了使嵌入式開發更方便、快捷,需要具備一種穩定、安全的軟件模塊集合,用以管理存儲器分配、中斷處理、任務間通信和定時器響應,以及提供多任務處理等,即嵌入式操作系統。嵌入式操作系統的引入大大的提高了嵌入式系統的功能,方便了應用軟件的設計,但同時占用了寶貴的嵌入式系統資源。一般在比較大型或需要多任務的應用場合才考慮使用嵌入式系統。嵌入式系統常常需要有實時要求,所以嵌入式操作系統往往又是“實時操作系統”。早期的嵌入式系統幾乎都用于控制目的,從而或多或少都有些實時要求,所以從前“嵌入式操作系統”實際上是“實時操作系統”的代名詞。今年來由于手持式計算機和掌上電腦等設備的出現,也有了不帶實時要求的嵌入式系統。另外一方面,由于CPU速度的提高,一些原先認為是“實時”的反應速度現在已經很普遍了。這樣,一些原先需要在“實時”操作系統上才能實現的應用,現在已不難在常的操作系統上實現。在這樣的背景下,“嵌入式操作系統”和“實時操作系統”就成了不同的概念名詞。
常見的嵌入式操作系統有: Android、Firefox OS、iPhone OS、uC/OS、uCLinux、VxWorks、pSOS、Nucleus、PalmOS、Windows CE、Windows XP Embedded、Windows Vista Embedded、嵌入式Linux、ECOS、QNX、Lynx、Symbian、Arm-Linux等。
(5)應用軟件
嵌入式系統的應用軟件是針對特定的實際專業領域,基于相應的嵌入式硬件平臺,并能完成用戶的預期任務的計算機軟件。用戶的任務可能有時間和精度的要求。有些應用軟件需要嵌入操作系統的支持,但在簡單的場合下不需要專門的操作系統。由于嵌入式應用軟件對成本十分敏感,因此,為減少系統成本,除了精簡每個硬件單元的成本外,應盡可能的減少應用軟件的資源消耗,盡可能的優化。
1.3嵌入式系統的應用
嵌入式計算機在應用數量上遠遠超過了各種通用計算機,一臺通用計算機的外部設備中就包含了5-10個嵌入式微處理器。嵌入式系統技術具有非常廣闊的應用前景,其應用領域可以包括:工業控制:業過程控制、數字機床、電力系統、電網安全、電網設備監測、石油化工系統;交通管理:在車輛導航、流量控制、信息監測與汽車服務方面,嵌入式系統技術已經獲得了廣泛的應用,內嵌GPS模塊,GSM模塊的移動定位終端已經在各種運輸行業獲得了成功的使用;信息家電:這將稱為嵌入式系統最大的應用領域,冰箱、空調等的網絡化、智能化將引領人們的生活步入一個嶄新的空間。即使你不在家里,也可以通過電話線、網絡進行遠程控制。在這些設備中,嵌入式系統將大有用武之地。家庭智能管理系統:水、電、煤氣表的遠程自動抄表,安全防火、防盜系統,其中嵌有的專用控
5/ 22
《嵌入式技術》學習總結報告
制芯片將代替傳統的人工檢查,并實現更高,更準確和更安全的性能;POS網絡及電子商務:公共交通無接觸智能卡(Contactless Smartcard, CSC)發行系統,公共電話卡發行系統,自動售貨機,各種智能ATM終端將全面走入人們的生活,到時手持一卡就可以行遍天下。環境工程與自然:水文資料實時監測,防洪體系及水土質量監測、堤壩安全,地震監測網,實時氣象信息網,水源和空氣污染監測。在很多環境惡劣,地況復雜的地區,嵌入式系統將實現無人監測。軍事領域:戰機、火控系統、導彈、火箭。
1.4嵌入式系統的工具鏈
工具對工程師設計開發的成功所起的決定性因素也在提高。應用越來越復雜,工具的選擇也越來越重要。現在市場上有些工具是免費的,也有很多商業工具。無論是免費的還是商業的,工具的好壞往往會影響整個工程的最終結果。現在的嵌入式系統開發工具非常多樣化,市場分散。目前據不完全統計,全世界嵌入式處理器的品種數已經超過1000多種,流行體系結構有30多個系列,在其上運行的操作系統環境也非常多樣化,包括VxWorks、QNX、Linux、Nuclears、WinCE等等。不僅各種操作系統有各自的開發工具,在同一系統下不同的開發階段也有不同的開發工具。如在用戶的目標板開發初期,需要硬件仿真器來調試硬件系統和基本的驅動程序,在調試應用程序階段使用交互式的開發環境進行軟件調試,在測試階段需要專門的測試軟件進行功能和性能的測試等等。對于設計人員來說,要掌握、駕馭這樣龐大的開發體系是一件非常困難的事情,而且編程的復雜度相當大。
在選擇工具時,主要需要注意以下幾個方面:編譯器的性能和穩定性、代碼覆蓋、仿真(不僅是對CPU的仿真,還有對其他硬件和設備的仿真)。工具鏈,一般由編譯器、連接器、解釋器和調試器組成,在嵌入式開發中一般指交叉工具鏈。在嵌入式開發中,往往在機器A中使用工具鏈生成可執行程序,而在機器B中執行程序。而機器A和機器B的指令系統往往不同,常見的是利用x86機器上的工具鏈開發基于ARM或MIPS的嵌入式系統。工具鏈的構成往往與目標對象和使用工具鏈的操作系統平臺有關。通常構建交叉工具鏈有如下三種方法:(1)分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。(2)通過諸如Crosstool等腳本工具來實現一次編譯,生成交叉編譯工具鏈。該方法相對要簡單許多,并且出錯的機會也非常少,建議大多數情況下使用該方法構建交叉編譯工具鏈。(3)直接通過網上下載已經制作好的交叉編譯工具鏈。該方法的優點不用多說,當然是簡單省事,但該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許并不適合6/ 22
《嵌入式技術》學習總結報告
你要編譯的程序,同時也許會在使用時出現許多莫名其妙的錯誤,建議慎用此方法。
對于新手而言,直接下載一些廠商提供的集成開發環境(IDE),能夠快速入手嵌入式開發。常用的IDE有Keil MDK、Xilinx ISE、Xilinx EDK、TKStudioIDE、Atmel的AVR Studio(for AVR以及AVR32)、Microchip的MPLab(for PIC、PIC18與dsPIC等)、Aiji的EDS(for ARM),南京萬利的MedWin(for 8051)、IAR Embedded Workbench等。“整體解決方案是毒藥”,我們使用IDE但是不要迷信整體解決方案。
嵌入式系統開發工具的發展已經有二十多年的歷史,目前開放性和開放源碼成為一股強大的潮流,推動嵌入式系統設計技術向前發展,傳統的嵌入式系統開發工具已不能適應這一潮流。最新的發展趨勢是,使用Eclipse開放源碼集成化開發環境(IDE)平臺,采用插件技術,在這樣的平臺基礎上擴展許多開發工具套件。越來越多的嵌入式系統軟件供應商將Eclipse平臺作為自身工具的基礎,推出個性化的開發工具套件,除提供標準的編譯器、編輯器、調試器,還提供增強的操作系統內核級調試手段和高級的系統分析工具,如內存泄漏檢測、系統性能監控等。總之,嵌入式開發工具將向高度集成、編譯優化、具有系統設計、可視化建模、仿真和驗證功能方向發展。
1.5嵌入式系統的發展趨勢
在嵌入式系統開發領域,技術發展的最新趨勢可以從企業層面、平臺層面和部件層面分別觀察,其核心是以盡可能快的速度、盡可能低的成本來滿足迅速變化的市場需求。(1)以往,嵌入式軟件開發的技術問題主要是在工程師和開發團隊的層面來解決。不同的工程師和開發項目之間可以共享的資源并沒有得到足夠的重視和利用,這是業界經常說的一個問題—制造每輛汽車都必須從輪子開始。共享資源、提高軟件部件的可重用性,這是整個軟件業界幾十年來的普遍趨勢,只是這個趨勢在嵌入式軟件領域的步伐比企業軟件慢了不少。隨著DSO(Device Software Optimization,設備軟件優化)概念的提出,嵌入式軟件的可重用性將會得到快速提高。這就是嵌入式軟件在企業層面的主流趨勢。(2)從開發平臺層面來看,開放已經成為一種主流思想,對于開放系統首先會讓人想到的就是Linux。不過,開放本身不是一種技術,而是一種包容先進技術的思路和方法。新技術往往是從封閉開始,通過走向開放而發揮更大的價值。(3)從部件層面來看,最主流的趨勢是多核技術的興起。這個趨勢從處理器芯片巨頭的動向可以一目了然。對于嵌入式軟件工程師來講,采用開放、高效并且能夠讓自己不斷積累開發成果的開發平臺與工具,讓自己能夠專注于產品功能特性的開發,而不是花費太多精力去做維護工具和基礎性、重復性的功能開發。
7/ 22
《嵌入式技術》學習總結報告
二、嵌入式系統的學習實踐
目前從事嵌入式開發的主要有兩類人。一類是學電子工程、通信工程等偏硬件專業出身的人,他們主要是搞硬件設計,需要開發一些與硬件關系最密切的最底層軟件:BootLoader、Board SupportPackage(像PC的BIOS一樣,往下驅動硬件,往上支持操作系統),最初級的硬件驅動程序等。他們的優勢是對硬件原理非常清楚,不足是他們更擅長定義各種硬件接口,但對復雜軟件系統往往力不從心(例如嵌入式操作系統原理和復雜應用軟件等)。另一類是學軟件、計算機專業出身的人,主要從事嵌入式操作系統和應用軟件的開發。如果我們學軟件的人對硬件原理和接口有較好的掌握,我們完全也可寫BSP和硬件驅動程序。嵌入式硬件設計完后,各種功能就全靠軟件來實現了,嵌入式設備的增值很大程度上取決于嵌入式軟件,這占了嵌入式系統的最主要工作。目前有很多公司將硬件設計包給了專門的硬件公司,稍復雜的硬件都交給臺灣或國外公司設計,國內的硬件設計力量很弱,很多嵌入式公司自己只負責開發軟件,因為公司都知道,嵌入式產品的差異很大程度在軟件上,在軟件方面是最有“花頭”可做的,所以搞軟件的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能設備越是復雜系統,軟件越起關鍵作用,而且這是目前的趨勢。
中國的學生能夠在大學相關課程中充分對MCU基礎知識進行學習,這已經走在了很多國家(甚至包括日本)的前面。但中國新一代工程師面對的主要問題是如何去積累經驗。嵌入式系統的開發通常是硬件和軟件同時進行的,其在開發過程中出現不良狀況的原因有可能是硬件或是軟件,有時甚至可能是兩者同時發生故障。在這樣的狀況下,就要求從事硬件的技術人員要相當程度的懂得軟件,從事軟件的技術開發人員也要在一定程度上懂得硬件。另外,目前該行業存在最終產品的壽命較短的情況,這就意味著每年都有必要開發新的產品。但是從初級階段進行開發,需要花費大量的開發成本及開發時間。因此,有效地歸納總結現有的開發成果,并有效地投入新開發中加以利用是十分重要的。
很多工程師在設計嵌入式系統的時候往往選擇最底層的工具,把絕大部分的時間都花在了底層的細節,而往往忽視了創新性和系統級的把握。工程師無論是為了自身的發展還是為了所設計產品的競爭力,這兩點其實都是至關重要的。
首先是“工欲善其事,必先利其器”,若有條件要盡可能采用更快更強的工具進行開發。其次是“磨刀不誤砍柴工”,要盡可能挖掘集成開發軟件中的資源,如花些時間去了解許多實用輔助軟件,如DMA、Cache和片內帶寬分析工具等。同時,在至少一個領域中具有深入的技術知識。工程師能夠分析問題或是編寫程序是遠遠不夠的,他們還要能夠利用自己的知識完成獨特創新的設計。所以,工程師要體現自身價值,必須有系統性的眼光,能夠進行有創新性的設計。在這種情況下,工程師們更多的應該從底層的編程細節中脫身,讓工具去處理那些“常
8/ 22
《嵌入式技術》學習總結報告
規”事務,而工程師本身就可以專注于自己的設計或研究領域,從更高的角度來看待自己在設計的系統,而不是只見樹木,不見森林。
三、實驗內容
我所在的小組的實驗任務,基于ZedBoard-Zynq7000的μC/OS-III代碼的分析和調試,重點分析μC/OS-III操作系統的任務調度機制。
3.1ZedBoard-Zynq7000介紹
ZedBoard是一款基于賽靈思Zynq-7000可擴展處理平臺(EPP)的低成本開發板,也是行業首款面向廣大開源小區的Zynq-7000 EP可擴展處理平臺開發工具包。開發板為基于Linux、安卓、Windows或其它操作系統/實時操作系統的設計開發提供了所需的一切。另外,該平臺提供數款擴展連接器,便于用戶訪問處理系統和可編程邏輯。Zynq-7000 EPP緊密集成了ARM?處理系統和7系列可編程邏輯,充分利用它們的優勢,并結合ZedBoard可以開發出獨樹一幟且功能強大的設計。
圖一:ZedBoard-Zynq7000 Zynq7000系列是基于Xilinx的可編程SOC架構,集成了一個雙核的ARM? Cortex?-A9 處理器,一個Xilinx可編程邏輯(PL)。Zynq7000集成有仿真芯片,提供了板載USB-JTAG編程、USB-UART,方便開發者進行調試。
9/ 22
《嵌入式技術》學習總結報告
圖二:Zynq-7000 AP SoC系統框架
3.2軟件的安裝設置
(1)安裝UART驅動。目前只有32位版本的,在windows 7以下可安裝。在windows 8安裝失敗。
(2)安裝Vivado Design Suite.選擇默認安裝即可。
(3)uCOS-III項目的構建。Micrium-ZC702-uCOS-III源碼壓縮包中有“Micrium ZC702 uCOS-III Readme.pdf”說明書。打開Xilinx SDK,安裝說明書里面的步驟一步一步進行配置即可完成uCOS-III 項目的構建。
3.3main函數分析
結合《Micrium-uCOS-III-UserManual》對代碼進行靜態分析,最好的方法是找到程序入口函數main(ZC702_uCOSIIIApplicationapp.c),然后在main函數內逐行代碼分析從而對程序的流程有一個大體的了解。在分析過程中碰到關鍵或感興趣的函數或結構可以進一步跟入分析。
intmain(void){ OS_ERR os_err;
10/ 22
《嵌入式技術》學習總結報告
Xil_DCacheDisable();//關數據cache
Xil_ICacheDisable();//關 instruction cache
Reset_Handler();/* Scatter loading is complete.*/ /* Now the caches can be activated.*/
BSP_BranchPredictorEn();/* Enable branch prediction.*/
BSP_L2C310Config();/* Configure the L2 cache controller.*/
BSP_CachesEn();/* Enable L1 I&D caches + L2 unified cache.*/
CPU_Init();/* Initialize the uC/CPU services */
BSP_Init();
OSInit(&os_err);/* Initialize uC/OS-III.*/
OSTaskCreate((OS_TCB *)&AppTaskStartTCB,//任務控制塊 /* Create the start task */(CPU_CHAR *)“Startup Task”,(OS_TASK_PTR)AppTaskStart,//任務地址(void *)0,(OS_PRIO)APP_CFG_TASK_START_PRIO,(CPU_STK *)&AppTaskStartStk[0],(CPU_STK_SIZE)APP_CFG_TASK_START_STK_SIZE / 10u,(CPU_STK_SIZE)APP_CFG_TASK_START_STK_SIZE,(OS_MSG_QTY)0u,(OS_TICK)0u,(void *)0,(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR *)&os_err);
OSStart(&os_err);/* Start multitasking(i.e.give control to uC/OS-III).*/
for(;;){
11/ 22
《嵌入式技術》學習總結報告
} } 對main函數內調用的一些函數和結構做進一步分析,可知OS_TCB(ZC702_uCOSIIIuCOS-IIISourceos.h)是系統用于表示一個任務的結構,是系統的核心數據結構之一。OSInit(ZC702_uCOSIIIuCOS-IIISourceos_core.c)函數是值得重點看的函數。main->OSInit->OS_IdleTaskInit,通過調用OS_IdleTaskInit的調用創建了系統的一個名叫“uC/OS-III Idle Task”的任務,其優先級值為31。這個任務相應執行的函數,基本沒有做任何操作,簡單對OSIdleTaskCtr、OSStatTaskCtr兩個系統計數進行增加。OSIdleTaskHook()是用戶可以自定義的函數,uCOS-III代碼中有大量這種Hook函數,方便用戶進行功能擴展。當然用戶也可直接對任意代碼進行修改,但是對系統Hook函數進行重寫能夠很好地保持原有uCOS-III系統的完整性。
void OS_IdleTask(void *p_arg){ ??
while(DEF_ON){
CPU_CRITICAL_ENTER();
OSIdleTaskCtr++;#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCtr++;#endif
CPU_CRITICAL_EXIT();
OSIdleTaskHook();/* Call user definable HOOK */
} } main->OSInit->OS_TickTaskInit創建了一個名叫“uC/OS-III Tick Task”的任務(優先級為10),任務的創建都得通過OSTaskCreate來創建,main函數中又創建“Startup Task”任務。這三個任務對應的運行函數內都包含了while死循環,因此系統運行起來后至少有三個任務,分別是Idle任務、Tick任務、Startup任務。
3.4任務管理
12/ 22
《嵌入式技術》學習總結報告
μC/OS-III支持多任務,理論上可以支持任意多個任務,但實際通常受限于系統內存的多少。所有任務管理都是基于OS_TCB結構來進行的,接下來我們詳細分析OS_TCB的定義(uCOS-IIISourceos.h),可知一個任務有優先級、狀態、堆棧,下面分別予以介紹。
3.4.1 任務優先級
μC/OS-III的優先級共有32個(0-31),數值越小優先級越高,一般地優先級0和31保留給系統使用。中斷處理任務的優先級最高,空閑任務的優先級最低。
圖三:μC/OS-III任務優先級
3.4.2 任務的堆棧
在利用OSTaskCreate創建新任務前,必須先創建好任務堆棧,如Startup任務就用如下代碼來分配堆棧:
13/ 22
《嵌入式技術》學習總結報告
static CPU_STK
AppTaskStartStk[APP_CFG_TASK_START_STK_SIZE]; 堆棧主要的大小是可以由用戶自己定義(需考慮任務里函數的嵌套層數和局部變量占用空間多少。另外在嵌入式開發中,應盡可能避免遞歸的調用),堆棧是向下增長的。堆棧溢出(這里的溢出是指堆棧空間不夠用)是操作系統必須考慮的問題,μC/OS-III有三種解決方法:(1)利用內存管理單元(MMU)或內存保護單位(MPU);(2)利用某些CPU提供的堆棧溢出檢測功能;(3)基于軟件實現的堆棧溢出檢測。前兩者都依賴于硬件提供該功能。
圖四:μC/OS-III堆棧結構
3.4.3 任務的狀態
OS_TCB結構中的TaskState表示任務的狀態。在μC/OS-III中,從用戶的角度來看任務有五個狀態:靜止(Dormant)、就緒(Ready)、運行(Running)、掛起(Pending)、中斷(Inrerrupted)。任務的狀態是動態轉換的,構造好OS_TCB結構后,此時任務處于靜止狀態,OSTaskCreate函數中調用OS_TaskInitTCB函數將任務狀態設為OS_TASK_STATE_RDY并調用OS_RdyListInsertTail將任務插入相應優先級的就緒隊列中。
14/ 22
《嵌入式技術》學習總結報告
圖五:任務狀態的轉換
3.5就緒任務的管理
任務在運行前都處于就緒狀態或中斷狀態,CPU的調度基本上就是以某種策略從所有就緒任務中挑選一個任務運行。μC/OS-III利用一個就緒優先級位圖和一個就緒隊列表來管理就緒任務。
OSInit->OS_PrioInit()中對任務優先級位圖表進行了初始化。μC/OS-III 有OS_CFG_PRIO_MAX優先級(見os_cfg.h),優先級值越小表示優先級越高。優先級0表示最高級別,優先級OS_CFG_PRIO_MAX-1最低(在本實驗中OS_CFG_PRIO_MAX=32).如果某個優先級上存在就緒的任務,那么就在位圖表中相應的位設置為1,否則設置為0.位圖寬度可以是8bit、16bit、32bit,這樣依賴于CPU_DATA的值即依賴所用CPU的特性(本實驗中是32bit,優先級總數為
15/ 22
《嵌入式技術》學習總結報告
32,因此位圖大小為32*1)。查找最高就緒的優先級,只需在優先級位圖中找第一不為0的bit。
OS_PRIO OS_PrioGetHighest(void){ CPU_DATA *p_tbl;OS_PRIO prio;prio =(OS_PRIO)0;p_tbl = &OSPrioTbl[0];while(*p_tbl ==(CPU_DATA)0){
prio += DEF_INT_CPU_NBR_BITS;)p_tbl++;} prio +=(OS_PRIO)CPU_CntLeadZeros(*p_tbl);return(prio);}
圖六:就緒優先級位圖
就緒列表實際上是一包含OS_CFG_PRIO_MAX個OS_RDY_LIST(見os.h)類型實體的數組(OSRdyList[])。OS_RDY_LIST實體包含三個成員:Entries、TailPtr、HeadPtr。Entries表示該優先級別上任務個數,TailPtr和HeadPt用于創建包含該所有優先級別上的就緒任務的雙向鏈表。代碼中包含了OS_RdyListInit()、16/ 22
《嵌入式技術》學習總結報告
OS_RdyListInsert()、OS_RdyListInsertHead()、OS_RdyListInsertTail()、OS_RdyListMoveHeadToTail()、OS_RdyListRemove()等函數用于操作就緒列表。
圖七:任務創建后加入就緒列表
3.6 任務調度
3.6.1 任務搶占
在μC/OS-III中,任務調度器(scheduler)即分發器(dispatcher)負責任務的調度。μC/OS-III使用基于優先級、搶占式的調度策略。搶占是指當由于某種原因使更高優先級任務變成就緒狀態(較當前任務),那么調度器立即將CPU分別給該更高優先級任務,而當前任務變成掛起狀態。類似地,當中斷服務程序(ISR)將一個處于掛起狀態的更高優先級任務喚醒時,當前被中斷的任務保持掛起狀態,被喚醒的那個更高優先級任務得到執行。如圖八,是一種直接的搶占方式,μC/OS-III還支持一種較Post Defferd即延時的搶占方式(圖九)。延時搶占方式,多一步ISR Handler(在操作系統中被稱為中斷軟處理,主要目的是減少關中斷的時間)用于處理在ISR(中斷硬處理)中來不及處理事情。
17/ 22
《嵌入式技術》學習總結報告
圖八:任務搶占
圖九:帶延遲處理的任務搶占
3.6.2輪轉調度
如果未開啟輪轉策略,正在執行的任務除非主動放棄執行(包括等待某些時間、或者調用睡眠函數)或者被搶占,那么同級別的任務得等到該任務執行完采用機會執行。當同一個優先級上有兩個以上就緒任務時,μC/OS-III 采用時間片策略使得該優先級上所有任務得到依次輪轉執行。當然如果一個任務的時間片未
18/ 22
《嵌入式技術》學習總結報告
用完,也可主動放棄CPU使得下個任務得到執行。輪轉調度策略不是必須的,μC/OS-III允許用戶開啟或關閉該策略。
圖九:時間片調度
3.6.3 調度時機
調度可能發生時機包括:(1)一個任務給其他任務發送(send)消息或信號時;(2)任務OSTimeDly()或者OSTimeDlyHMSM();(3)任務調用等待函數OS???Pend()等待尚未發生的任務;(4)任務放棄掛起:其它任務調用OS???PendAbort()改變該任務狀態;(5)任務創建時:創建的任務可能擁有比當前任務較高優先級;(6)任務被刪除時:如果該任務就是當前任務;(7)內核對象被刪除時;(7)任務優先級發生改變時;(8)任務調用OSTaskSuspend()掛起自己;(9)任務調用OSTaskResume()喚醒了其它任務;(10)所有嵌套的ISR退出時:調度由OSIntExit()發起而不是OSSched();(11)調度器被解鎖;(12)任務調用OSSchedRoundRobinYield()主動放棄時間片;(12)用戶調用了OSSched();(13)任務時間片用完了。
3.6.4 調度實現
調度器的實現在函數OSSched()和OSIntExit()中。其中,OSSched()由任務級別代碼發起而OSIntExit()是有中斷服務程序發起。任務的調度是基于前面提及的就緒任務的相關數據結構:就緒優先級位圖和就緒隊列。
19/ 22
《嵌入式技術》學習總結報告
圖十:調度時主要用到的數據結構
3.7 上下文切換
上下文切換:當μC/OS-III要執行另一任務時,需要將當前任務使用的那些CPU寄存器值保存當前任務堆棧中,同時加載要執行的任務的上下文給CPU的寄存器進而開始另一任務的執行。上下文切換存在一些開銷,通常CPU寄存器越多(任務用到的寄存器越多),開銷就會越大。上下文切換的時間開銷取決于有多少個CPU寄存器需要被存儲和載入。
圖十一:上下文在堆棧中的存儲
20/ 22
《嵌入式技術》學習總結報告
存在兩種上下文的切換:普通任務的上下文切換、中斷服務程序的上下文切換。前者在函數OSCtxSw()中實現(其實是由宏OS_TASK_SW()調用,后者在函數OSIntCtxSw()中實現。這兩個函數都是采用匯編語言實現,因此是CPU相關的(見uCOS-IIIPortsARM-Cortex-AGenericGNU os_cpu_a_vfp-d32.S)。這里只介紹OSCtxSw()的實現。
OSIntCtxSw:
BL OSTaskSwHook@ OSTaskSwHook()@
MOVW R0, #:lower16:OSPrioCur@ OSPrioCur = OSPrioHighRdy@ MOVT R0, #:upper16:OSPrioCur MOVW R1, #:lower16:OSPrioHighRdy MOVT R1, #:upper16:OSPrioHighRdy LDRB R2, [R1] STRB R2, [R0]
MOVW R0, #:lower16:OSTCBCurPtr@ OSTCBCurPtr = OSTCBHighRdyPtr@ MOVT R0, #:upper16:OSTCBCurPtr MOVW R1, #:lower16:OSTCBHighRdyPtr MOVT R1, #:upper16:OSTCBHighRdyPtr LDR R2, [R1] STR R2, [R0] LDR SP, [R2] @ SP = OSTCBHighRdyPtr->OSTCBStkPtr@
OS_CPU_ARM_FP_REG_POP R0 @ RESTORE NEW TASK'S CONTEXT: LDMFD SP!, {R0} @ Pop new task's CPSR, MSR SPSR_cxsf, R0 LDMFD SP!, {R0-R12, LR, PC}^ @ Pop new task's context.如圖,當有更高優先級就緒任務需要被執行,任務調度器就會調用OSCtxSW()。主要有以下步驟:
(1)OSTCBCurPtr指向當前正運行的任務對應的OS_TCB,然后任務級調度器調用OSSched().(2通過OSTCBHighRdyPt指針,可以找到即將要運行的任務的OS_TCB;(3)OSTCBHighRdyPtr->StkPtr指向將要被執行的任務的堆棧的頂部;(4)執行任務上下文切換,將CPU的相關寄存器存儲到當前任務(即將被調出CPU的任務)的堆棧。由于保存了上下文(以棧幀形式存儲),將來該任務可以被恢復現場,以便繼續運行。
(5)調用OSSched()后,CPU堆棧指針TSP會指向任務的堆棧。
21/ 22
《嵌入式技術》學習總結報告
圖十二:OSCtxSw()所執行操作
四、工作總結
學習嵌入式,顯然應偏重于嵌入式軟件,特別是嵌入式操作系統方面。對于搞嵌入式軟件的人,最重要的技術顯然是:(1)掌握主流嵌入式微處理器的結構與原理。(2)必須掌握一個嵌入式操作系統。(3)必須熟悉嵌入式軟件開發流程并至少做過一個嵌入式軟件項目。
通過本門課程的學習,我對嵌入式系統有了較直觀的理解,并加深了操作系統一些概念的理解。但畢竟時間有限,希望可以在后續的進一步學習中加強實踐,希望早日能在嵌入式領域做一些開發工作。
22/ 22
第二篇:嵌入式總結報告
嵌入式實驗報告
期末論文
學生姓名: 楊佳潔 學 號: 11570118 班 級: 11計算機2班 指導教師: 黃 靜
2014年5月20日
嵌入式程序設計與應用課程主要以理論與實驗結合的方式講授,包括設備驅動,信號轉換I、II,幀緩沖設備驅動和觸摸屏這五部分,通過學習,我逐漸加深了對linux的理解。
在模塊驅動部分,通過老師的講解,我了解了Linux驅動程序的結構,掌握了程序驅動的結構體和操作函數這些基本知識,尤其知道了驅動程序負責將應用程序如讀、寫等操作正確無誤的傳遞給相關的硬件,并使硬件能夠做出正確反應的代碼。驅動程序隱藏了硬件的工作細節,應用程序只需要通過一組標準化的接口實現對硬件的操作。
S3C2410X 芯片內部集成了一個8 路10 位A/ D 轉換器,其中第5、第6 通道可用于支持觸摸屏接口,而AD轉換器的功能是將輸入的模擬信號轉換成數字信號,驅動程序主要依賴于ADC控制寄存器、ADC數據寄存器等進行讀寫操作。而實驗過程中涉及的驅動程序加載則是之前未曾接觸的知識,所以在知道了編譯方式分為動、靜兩種方式后,我掌握了如何對程序進行動態編譯方式。
系統有多個顯示卡時,Linux 下可支持多個幀緩沖設備,FrameBuffer是 Linux 為顯示設備提供的一個接口,把顯存抽象后的一種設備。課程中我主要理解了相關程序代碼的分析,尤其對FB程序中內存的申請以及填充描點函數有了較為詳細的理解。
在觸摸屏驅動部分,理論方面我熟悉了解了觸摸屏的原理,即檢測觸摸點被壓下后的電壓值來返回坐標。通過代碼分析,掌握了觸摸屏進行輸出標定、與LED顯示器配合的過程。課程的最后一部分是AD轉換,與之前的轉換不同之處在于本次目的是將采集的數據呈現在html網頁中。所以在實驗過程中,我在掌握boa服務器的編譯和配置之外還掌握了制作網頁的基本結構。
當然雖然基本理解了老師講解的理論知識但是在實驗中仍然遇到了很多問題。如在文件共享時由于忽略pc機與虛擬機必須在同一網段的條件導致無法使用提供的src;修改文件中涉及的路徑與實際情況不相符使程序編譯出現錯誤。還有一些尚未解決的為題,在觸摸屏實驗部分“消除默認路徑”部分,有時會出現“沒有此進程”的錯誤提示,通過重啟linux可避免這個錯誤,但是出現錯誤的原因不是很清楚。
8周的課程結束了,它拓展了我對嵌入式應用涉及的領域的認識,掌握了很多之前沒有接觸過的知識,也在老師和同學的幫助下比較順利地完成了實驗,尤其是對在linux系統及xshell下操作的基本命令有了很大的擴展和更加熟練的使用。但是老師在講解理論知識的時候主要關注的是程序代碼的解析,所以在做實驗時對比較復雜的實驗步驟理解的不夠透徹,希望自己日后可以在不斷的鍛煉中逐漸理解。相信無論是理論知識還是實驗中的實踐經驗都對我日后深入學習嵌入式有很大的幫助。
第三篇:學習嵌入式技術之后的感想
學習嵌入式技術之后的感想
嵌入式系統(Embedded Systems),實際上是“嵌入式計算機系統”的簡稱,它是相對于通用計算機系統而言的。在有些系統里也有計算機,但是計算機是作為某個專用系統的一個部件而存在的。像這樣“嵌入”到更大,專用的系統中計算機系統,稱之為“嵌入式計算機”,“嵌入式計算機系統”或“嵌入式系統”。在日常生活中,早已存在許多嵌入式系統的應用,如天天必用的移動電話,帶在手腕上的電子表,烹調用的微波爐,辦公室里的打印機,汽車里的供油噴射控制系統,防鎖死剎車系統(ABS)。以及現在流行的個人數字助理(PDA),數碼相機,數碼攝相機等等,它們內部都有一個中央處理器cpu.嵌入式系統無處不在,從家庭的洗衣機,電冰箱,小汽車到辦公室里的遠程好會議系統等,都屬于可以用嵌入式技術進行開發和改造的產品。嵌入式系統本是一個相對模糊的定義。一個手持的MP3和PC104的微型工業控制計算機都可以認為是嵌入式系統。
根據電氣工程師協會(IEE)的定義,嵌入式系統是用來控制或監視機器裝置或工廠等的大規模系統的設備。
可以看出此定義是從應用方面考慮的。嵌入式系統是軟件和硬件的綜合體,還可以涵蓋機電等附屬裝置。
國內一般定義為:以應用中心,以計算機技術為基礎,軟硬件可裁減,從而能夠適應實際應用中對功能,可靠性,成本,體積,功耗等嚴格要求的專用計算機系統。
嵌入式系統在應用數量上遠遠超過了各種通用計算機。一臺通用計算機的外部設備中就包含5—10個嵌入式微處理器,鍵盤,硬盤,顯示器,Moden,網卡,聲卡,打印機,掃描機,數碼相機,集線器等,均是由嵌入式處理器進程控制的,在制造工業,過程控制,通信,儀器,汽車,航空航天,軍事裝備,消費類產品等方面,嵌入式系統都有用武之地。
入式系統本身是一個相對模糊的定義,一個手持的MP3和一個PC104的微型工業控制計算機都可以認為是嵌入式系統。總體來說,嵌入式系統是“用于控制,監視或者輔助操作機器和設備的裝備”。一個典型的桌面Linux系統包括3個主要的軟件層---linux內核、C庫和應用程序代碼。內核是唯一可以完全控制硬件的層,內核驅動程序代表應用程序與硬件之間進行會話。內核之上是C庫,負責把POSIX API轉換為內核可以識別的形式,然后調用內核,從應用程序向內核傳遞參數。應用程序依靠驅動內核來完成特定的任務。嵌入式與單片機的關系與區別;
嵌入式計算機系統起源于微型機時代,但很快就進入到獨立發展的單片機時代。在單片機時代,嵌入式系統以器件形態迅速進入到傳統電子技術領域中,以電子技術應用工程師為主體,實現傳統電子系統的智能化,而計算機專業隊伍并沒有真正進入單片機應用領域。因此,電子技術應用工程師以自己習慣性的電子技術應用模式,從事單片機的應用開發。這種應用模式最重要的特點是:軟、硬件的底層性和隨意性;對象系統專業技術的密切相關性;缺少計算機工程設計方法。
雖然在單片機時代,計算機專業淡出了嵌入式系統領域,但隨著后PC時代的到來,網絡、通信技術得以發展;同時,嵌入式系統軟、硬件技術有了很大的提升,為計算機專業人士介入嵌入式系統應用開辟了廣闊天地。計算機專業人士的介入,形成的計算機應用模式帶有明顯的計算機的工程應用特點,即基于嵌入式系統軟、硬件平臺,以網絡、通信為主的非嵌入式底層應用。兩種應用模式的并存與互補
由于嵌入式系統最大、最廣、最底層的應用是傳統電子技術領域的智能化改造,因此,以通曉對象專業的電子技術隊伍為主,用最少的嵌入式系統軟、硬件開銷,以8位機為主,帶有濃重的電子系統設計色彩的電子系統應用模式會長期存在下去。另外,計算機專業人士會愈來愈多地介入嵌入式系統應用,但囿于對象專業知識的隔閡,其應用領域會集中在網絡、通信、多媒體、商務電子等方面,不可能替代原來電子工程師在控制、儀器儀表、機械電子等方面的嵌入式應用。因此,客觀存在的兩種應用模式會長期并存下去,在不同的領域中相互補充。電子系統設計模式應從計算機應用設計模式中,學習計算機工程方法和嵌入式系統軟件技術;計算機應用設計模式應從電子系統設計模式中,了解嵌入式系統應用的電路系統特性、基本的外圍電路設計方法和對象系統的基本要求等。嵌入式系統應用的高低端:由于嵌入式系統有過很長的一段單片機的獨立發展道路,大多是基于8位單片機,實現最底層的嵌入式系統應用,帶有明顯的電子系統設計模式特點。大多數從事單片機應用開發人員,都是對象系統領域中的電子系統工程師,加之單片機的出現,立即脫離了計算機專業領域,以“智能化”器件身份進入電子系統領域,沒有帶入“嵌入式系統”概念。因此,不少從事單片機應用的人,不了解單片機與嵌入式系統的關系,在談到“嵌入式系統”領域時,往往理解成計算機專業領域的,基于32位嵌入式處理器,從事網絡、通信、多媒體等的應用。這樣,“單片機”與“嵌入式系統”形成了嵌入式系統中常見的兩個獨立的名詞。但由于“單片機”是典型的、獨立發展起來的嵌入式系統,從學科建設的角度出發,應該把它統一成“嵌入式系統”。考慮到原來單片機的電子系統底層應用特點,可以把嵌入式系統應用分成高端與低端,把原來的單片機應用理解成嵌入式系統的低端應用,含義為它的底層性以及與對象系統的緊耦。嵌入式與PC機的關系與區別:
嵌入式系統一般指非 pc 系統,有計算機功能但又不稱之為計算機的設備或器材。它是以應用為中心,軟硬件可裁減的,適應應用系統對功能、可靠性、成本、體積、功耗等綜合性嚴格要求的專用計算機系統。簡單地說,嵌入式系統集系統的應用軟件與硬件于一體,類似于 pc 中 bios 的工作方式,具有軟件代碼小、高度自動化、響應速度快等特點,特別適合于要求實時和多任務的體系。嵌入式系統主要由嵌入式處理器、相關支撐硬件、嵌入式操作系統及應用軟件系統等組成,它是可獨立工作的“器件”。
個人pc一詞源自于1978年IBM的第一部桌上型計算機型號PC,在此之前有Apple II的個人用計算機。能獨立運行、完成特定功能的個人計算機。個人計算機不需要共享其他計算機的處理、磁盤和打印機等資源也可以獨立工作。今天,個人計算機一詞則泛指所有的個人計算機、如桌上型計算機、筆記型計算機、或是兼容于IBM系統的個人計算機等。
嵌入式這門課程名稱對我來說并不陌生,是因為上學期講我們單片機的艾爾肯老師提過,他說我們這個專業最重要最應用兩門課程是單片機和嵌入式。那時候我特別感興趣,還去圖書館看有關的書,在網上查資料,是因為我總覺得我們以前學的都是理論沒有什么動手做的,別人問我“你讀的專業做什么?”,我也說不去話來,只說畫電路圖,研究計算機硬件等回答,所以決心學好這些課門,剛開始把單片機的實驗做的特努力,每次程序下載成功的時候特別高興,可后來不怎么感興趣了,因為我不會寫程序,只懂一點點,實驗上的程序是書上有的要么老師給的,只復制粘貼而一。
我們開始學習《ARM&LINUX嵌入式系統教程》,由于初次接觸嵌入式系統,感覺蠻難的,很多的概念都聽也沒聽過,覺得挺尷尬,老師每次上課都布置作業,下課后同學一起做實驗,我覺得這個挺不錯的,當然,其中遇到很多的難題,很多東西都是第一次接觸,又沒有別人在旁邊指導操作,完全憑借自己去摸索練習,我不懂得地方別人懂,誰也不懂查資料,吵吵鬧鬧這樣還學了一些東西,不管怎么說自己下手做,還老師關于實驗內容提問。到第9周我們開始做實驗了,這個實驗比以前做的實驗難多了,做起來也難,幾乎每次實驗不那么理想,越努力做好越出問題,老師講的時候覺得挺懂,一手可以做好實驗感覺,可事實不是這樣的。其中的困難可想而知。然而堅持就是勝利,牙一咬眼一閉堅持做下去,而通過本次實驗,我感覺收獲還是蠻多的。可能我對于嵌入式的知識學習的還是不太多,但是這之外的東西收獲頗豐。它讓我學會了如何通過自己的努力去認知一個新事物,更重要的是端正自己的學習態度,只有真正下功夫去學習,才能有收獲,正所謂“一份耕耘,一份收獲。”沒有付出,何談回報呢?再者,通過本次實驗,我也學會了如何去分析問題,如何找出自己設計中的不足,繼而去排除解決問題,這就是一個自我學習的過程。當我通過實驗去學習理論知識時,自己動手得出的結論,不僅能加深我對嵌入式的理解,更能加深我對此的記憶。
當然,在這其中,我也發現自己的許多不足之處,由于我把C語言沒有好好學習,才落到如此地步,這也可以說是一個教訓吧!我相信在以后的學習工作中,我一定會端正自己的學習態度,一絲不茍的去對待每一件事。只有做好足夠的準備,才能事半功倍。參考的書和網址:
ARM & LINUX 嵌入式系統教程(第2版)第1頁
第四篇:嵌入式行業調查總結報告
行業調查總結報告
一、嵌入式工程師個人基本情況
在“2012-2013中國嵌入式開發從業人員調查”活動中,針對行業內嵌入式工程師個人基本情況的調查,除了延續前四屆調查問卷的專業角度和務實的關注點,對公眾普遍關注的工作經驗、學歷、薪資范圍等關鍵項著手進行數據的匯總和分析之外,我們還增加了嵌入式工程師地域分布的調查。同時也綜合之前調查匯總的結果數據,通過縱向的對比和分析,力求更全面地呈現出一個直觀的、在時間跨度上的變化趨勢。
1、工作經驗
來自華清遠見2012-2013的行業調查數據的結果顯示,目前從事嵌入式開發“不到1年”和“1-2年”的工程師所占的比例依然是最大的,分別是29%和25%,占總參與調研人數的54%,對比去年增加了4個百分點,而具備相對豐富開發經驗的嵌入式工程師(2年以上工作經驗)則占總調研人數的46%。對比2008至2012年這幾年的調查數據,我們不難得出這樣的結論:伴隨著整個嵌入式行業的快速穩步發展,嵌入式專業領域內技術研發人才分布已經呈現出日趨合理的比例結構,過去的一年,有更多的一線研發工程師投身到嵌入式這一熱門行業中,并且繼續呈現出逐年增長的趨勢。結合本報告后面關于“企業人才需求現狀”的調查結果,我們也不難分析出,嵌入式企業的發展速度和專業人才的成長速度依然有一定的差距,行業內專業研發工程師供不應求的狀態扔將會持續。嵌入式開發涉及領域極廣,嵌入式產品在日趨智能的工作和生活中也無處不在,巨大的市場發展空間將為更多投身嵌入式領域的工程師提供更為廣闊的職業發展平臺,我們相信,伴隨著未來幾年更多的專業嵌入式人才的加盟,這個行業將在堅實的步伐中高昂挺進全盛期。
2、學歷要求
來自2012-2013的調查統計數據顯示,嵌入式開發從業人員的學歷仍然以本科(60%)和碩士(23%)居多,占所有參與調查人員的 83%,和去年調查報告結果基本持平。從中可以看出:在整個嵌入式行業的從業人員中,本科生和研究生憑借其扎實的理論功底和良好的綜合素質,依然是嵌入式開發從業者的主要群體,并且在未來一段時間內也將持續穩居此項調查的前兩位。同時,我們也可以進一步得出結論:在社會生活壓力不斷增大、大學生就業率更低、難度更高的今天,高校專業學科建設和教學改革的步伐越來越快,嵌入式及相關專業在大學校園內的普及和發展也達到了前所未有的速度。在高校更加貼近用人企業真實需求的實訓模式的引導下,越來越多的計算機、電子、自動化等相關專業及物理、數學、信息工程等基礎專業的本科生和研究生開始將自己的職業規劃定位到高薪誘人且發展前景極為廣闊的專業嵌入式開發領域。而作為一個具有龐大基數的群體,本科生勢必將成為未來解決嵌入式人才供不應求問題的一個巨大突破口,而對于這樣一個蓬勃發展的專業領域來說,也勢必將為更多大學生提供更高質量的就業機會,從而有效推動相關專業的大學畢業生與企業人才真實需求的無縫對接。
3、地域分布
嵌入式行業從業人員的地域分布為本調查活動的新增調研項目,調查統計數據顯示,嵌入式開發從業人員主要集中在北京、深圳、上海、廣州、成都等一線城市,分別占總調研人數的18%、13%、11%、9%、8%,總計占59%。這一調研數據顯示,高新技術企業密集的大城市仍然是廣大嵌入式開發者獲取更多工作機會及長遠職業發展空間的首選。隨著國家中西部開發的不斷加強以及更多創新產業園和國際知名企業的入駐落戶,武漢、西安等中西部城市也將呈現越來越旺盛的嵌入式人才需求,相信這將為更多的嵌入式開發者提供更為廣闊的地域發展空間及就業機會,任何城市經濟的發展,都離不開眾多專業人才的加入。
4、薪資水平
來自華清遠見2012-2013的調查統計數據顯示,嵌入式行業從業人員月薪為3000-8000元的比例占到69%,與去年保持一致,月薪3000以下的比例減少了一個百分點,8000元以上高薪部分的比例略有增加。結合本次調查在職工程師“工作經驗”項目的統計結果可以看出,工作在 1-2年的工程師薪水基本會在3000-8000元的范圍,而隨著工作年限的增加,薪資水平也會有較明顯的提高。對于嵌入式工程師來說,“經驗”會顯得尤為重要,相比其他IT從業人員,嵌入式工程師的開發經驗將會使薪水增長更快。當然對于新入行的嵌入式工程師來說,也將面臨巨大的機遇,從個人職業發展角度來看,未來將會有更大的發展空間。該項調查通過客觀的數據分析結果,全面反映了嵌入式開發從業人員的一個整體薪資待遇情況,顯然由于整個嵌入式行業正處于高速發展期,必然使得專業人才的薪資發展空間與其個人專業技術經驗的積累直接相關。人才永遠是企業發展的核心動力,而嵌入式工程師作為一個高薪誘人、極具成長空間及發展潛力的專業技術崗位,也必將成為推動整個嵌入式行業更加快速地向前邁進的中堅力量。
二、嵌入式行業公司的基本狀況
接下來的調查是針對與技術工程師息息相關的嵌入式行業中眾多產品研發企業的發展現狀,以期能夠幫助大家從另外一個角度,借助更廣闊的視野來分析了解整個嵌入式行業的現狀。結合嵌入式企業在研發產品應用及核心技術領域的特點,本部分調查內容主要從“所屬行業分布情況、公司規模、軟件開發平臺、軟件開發調試工具、軟件開發語言、硬件開發平臺、處理器芯片、軟硬件人員安排、未來嵌入式操作系統首選”等方面展開,其中本調查中新增的項目包括:軟件開發調試工具、處理器芯片、未來嵌入式操作系統首選等項目,以幫助大家更加全面而有針對性地了解嵌入式行業內,專業研發企業的整體狀況及未來的技術發展趨勢。
1、所屬行業分布情況
作為智能設備及終端產品的核心基礎,嵌入式技術的應用已經滲透到社會工作及生活的各個領域。由于嵌入式技術的成熟應用,也進一步加速了移動互聯網、物聯網及云計算的產業化進程。來自2012-2013的行業調查數據顯示,目前嵌入式產品應用最多的三大領域依然是“消費電子、通信設備、工業控制”,所占比例分別是23%、17%和13%,三大領域所占比例之和占53%,其中消費電子所占比例將相較去年有明顯增長,相信這與智能手機、平板電腦等移動設備的大面積普及有直接關系。而占據9%的“其他”一項選擇中,參與調查者主要選擇的是“電力設備、智能電網、物聯網、儀器儀表、教育”等行業。我們有理由相信,這些都充分表明,未來嵌入式系統將會走進IT產業的各個領域,成為推動整個產業發展的核心中堅力量。
2、公司規模
從“公司規模”調查項的統計結果可以看出,100人以內的小型公司所占比例為49%,基本上接近一半,100-500人的中型公司所占比例為 29%,這和傳統的IT企業規模構成差別還是比較大,這恰恰說明了嵌入式系統充分結合行業應用、具有靈活定制性的特點。嵌入式系統應用領域非常廣泛,在每個典型的應用領域內都要求企業具備一定的專注性和專業性,這與傳統的IT行業經常會在某個領域內出現壟斷的大型企業的局面有所不同。
3、軟件開發平臺的選擇
來自華清遠見2012-2013的調查統計數據顯示,在嵌入式產品研發的軟件開發平臺的選擇上,嵌入式Linux仍以42%的市場份額遙遙領先于其他嵌入式開發軟件平臺,由此可見,Linux憑借其得天獨厚的優勢和廣泛的應用領域,依然成為眾多嵌入式企業研發團隊的首選。而作為移動互聯網的重要切入點,智能手機操作系統平臺也吸引了越來越多的開發者加入,Android智能手機操作系統平臺以絕對的優勢(16%)成為手機操作系統平臺首選,市場份額也在逐年提升,對比去年的調研數據,雖然iOS操作系統在過去的一年增長幅度高于Android,但與Android操作系統的市場占有率仍然有一定的差距,以5%的比例屈居手機操作系統平臺第二。在對華清遠見老學員的回訪中,很多嵌入式linux就業班畢業的學員,目前也呈現出軟硬件各方向的多元發展趨勢,也有部分畢業學員直接進入Android移動開發領域,由此可見,嵌入式Linux的學習無疑給眾多學員提供了更為廣闊的職業發展空間,究其原因主要是在于Android手機操作系統是在Linux內核基礎上開發的,尤其在底層部分,兩個系統基本是一樣的,對于之前一直從事Linux開發的工程師來說,轉向Android平臺開發是比較輕松的事。而在新興物聯網領域,嵌入式作為物聯網產品的核心技術之一,也將為嵌入式系統提供更為廣闊的產業發展空間。嵌入式Linux的長遠發展空間、Android、iOS等平臺智能設備的廣泛應用、物聯網的巨大產業發展空間,所有這些與嵌入式相關的行業新動向,無疑為更多邁入嵌入式開發的初學者提供更好的就業機會和職業發展前景。
4、軟件開發調試工具的選擇
軟件開發調試工具的選擇為本新增調研項目,調查統計的數據結果顯示,keil和IAR分別以37%、24%的比例成為嵌入式開發者的主要調試工具,總計占所有參與調研人數的61%。合適的調試工具的選擇使用,可以大大加快產品的開發進度。這也使得在調試工具層面的技術支持和發展成為研發過程中需要考慮的因素之一。同時,這個調查結果也為初學者如何選擇開發工具提供有價值的參考。
5、硬件開發平臺的選擇
從2012-2013的調查統計數據中可以看到,ARM處理器(包括ARM7/9/
11、Cortex-M系列、Cortex-A系列)毫無疑問地占據了嵌入式處理器絕大部分的市場份額(74%),在ARM及其合作伙伴的市場推動下,ARM7/9/11較前一年的統計結果,出現了非常明顯的下滑,市場份額下降了13個百分點,而最新ARMv7架構的Cortex系列處理器成功布局嵌入式移動計算領域并取得了快速的發展,其中定位低端的Cortex-M系列處理器和定位高端的Cortex-A處理器較一年前的統計結果,分布有兩個百分點的增長,已毋庸置疑地成為ARM處理器應用的主流。隨著物聯網產業的快速發展,對低功耗微控制器的需求必然會更進一步地推動Cortex-M系列處理器的快速應用,而高性能智能手機、平板電腦及更多智能終端設備的開速普及則使得Cortex-A系列處理器獲得了快速發展的機會。
6、處理器芯片的選擇
處理器芯片的選擇為本新增的調研項目,據調查統計數據的結果顯示,TI(德州儀器)和SAMSUNG(三星),成為最受開發者歡迎的嵌入式處理器芯片提供商,占據了接近一半(47%)的市場份額,其他知名廠家處理器芯片所占市場份額分布為:Qualcomm(高通)10%、Intel(英特爾)8%、NXP(恩智浦)6%、Atmel(愛特梅爾)5%、Nvidia(英偉達)5%、Freescale(飛思卡爾)4%、Renesas(瑞薩)3%,除以上廠家之外的其他處理器則占總體市場份額的12%。
7、軟件開發語言的使用
來自2012-2013華清遠見的調查統計數據顯示,在嵌入式產品研發的軟件開發語言的使用上,C語言仍然是嵌入式開發過程中最普遍使用的語言,其市場份額繼續保持領先(70%),這一統計結果再一次表明,無論是在傳統的工業控制領域、通信領域,還是迅猛發展的消費電子,安防控制、信息家電等領域,C語言均是嵌入式開發語言的首選。對比去年的調研數據,Java語言和Objective-C的使用比例有所上升,究其原因不難看出,Android智能手機操作系統的開發需求推動了java語言的廣泛使用,成為在嵌入式領域內最受歡迎的高級語言,而iOS智能手機操作系統的開發則拓展了Objective-C語言的開發人群。C++所占比例為10%,位居第三。匯編語言所占比例3%,與去年持平。
8、軟硬件人員的安排
2012-2013的調查數據顯示,有一半從事嵌入式產品研發的企業都是采用軟硬件人員分工合作完成產品的開發方式(50%),與去年的調查數據(62%)橫向對比看,這一選項所占的比例也呈現出下降的趨勢(下降了12個百分點)。而“人員不分開,要求員工同時具備硬件和軟件開發能力,可獨立完成項目”的公司所占比例,由去年的22%上升到今年的29%(上升了7個百分點)。從這一轉變,我們可以看到:嵌入式系統作為一個軟硬件結合的系統,需要嵌入式開發工程師在軟件和硬件兩個方面都不斷深化學習,同時具備軟硬件開發能力的工程師,將在求職過程中擁有更多的選擇機會以及更大的成長空間。同時,從各大招聘網站的最新搜索數據中也可以看出,目前嵌入式軟件開發人才的需求量遠遠大于純硬件開發人才,嵌入式系統項目研發差不多80%以上的工作量都是在軟件部分,軟件是嵌入式系統最核心的部分,也是體現嵌入式系統優勢的最關鍵部分,企業對嵌入式軟件開發人才的需求必將持續上漲。
9、未來嵌入式操作系統首選
在本新增調研項目中新增了對未來1-2年內嵌入式行業會占主導地位的嵌入式操作系統的調查,調查統計數據顯示,嵌入式Linux仍然是未來幾年內,嵌入式工程師認可的最具發展潛力的首選嵌入式操作系統,所占比例接近一半(47%),而Android智能手機操作系統,也受到了越來越多嵌入式工程師的關注,并對其在移動手機操作系統中廣闊的發展空間及發展潛力充滿了期待。由此可見,作為開源系列的兩款優秀的嵌入式操作系統(嵌入式Linux及 Android),其開源的特性,無疑使其在市場競爭中,具備了最強大的競爭優勢及用戶基礎,用戶就是王道。
獲取專業知識的途徑
1、首選搜索引擎
在嵌入式工程師對搜索引擎使用習慣的調查中,百度和Google的使用率依然是平分秋色,這和這兩個搜索引擎在國內市場份額的實際占有率有很大差別,也與正打得火熱的國內搜索引擎市場的實際狀況有很大的不同。究其原因,這與嵌入式工程師會經常搜索國外的最新技術資料有直接關系,Google在搜索國外網站技術資料的廣度和深度上具有明顯的優勢。嵌入式技術更新非常快,對于開發人員來說,必須具備較強的學習能力,善于通過各種渠道更新自身的知識體系,關注最新技術發展熱點,適應行業最新發展需求。
2、微博平臺
由于微博在發布信息及信息傳播上具備速度快的明顯優勢,目前已成為主流的媒體平臺之一。以成為。通過2012-2013的調查數據,我們可以看出,嵌入式工程師對微博的熱度雖然明顯低于大眾用戶,但關注微博的嵌入式工程師也在慢慢增多。對比去年的調研數據,很少使用微博的用戶,下降了18個百分點(由去年的65%下降到今年的47%)。使用新浪和騰訊微博的用戶比例分別是35%和16%,也有更多的行業媒體與嵌入式企業通過微博手段發布行業資訊及企業動態,吸引更多的嵌入式工程師關注,相信這對于企業品牌及產品形象的傳播將會提供更多的幫助。
四、嵌入式工程師對職業生涯的看法
作為一個正在高速發展的行業,許多技術工程師和準備進入行業的技術愛好者都非常關注嵌入式領域未來的職業規劃和行業整體的發展狀況。本部分調查則主要從“企業人才需求現狀、對工作薪資的滿意度、未來一年薪資漲幅、如何看待培訓以及對未來職業人生的規劃”等方面進行問題設置,希望能從各個角度上展現嵌入式工程師對目前工作狀態的的滿意程度和真實需求。
1、企業人才需求現狀
來自2012-2013的調查數據顯示,在整個行業發展的過程中,嵌入式人才需求目前仍然是供不應求,74%左右參與調查的一線工程師均表示,自己所屬的公司目前都急缺嵌入式開發方面的專業技術人才。雖然人才缺口仍然很大,但連續4年的調查數據顯示,這一比例已在持續下降(2011年比2010年低了5個百分點,2012年比 2011年低了3個百分點,2013年比2012年低了1個百分點),這也表明,隨著國家政策的更加重視、市場的整體推動及多渠道的嵌入式人才培養體系的不斷完善,嵌入式開發人才需求瓶頸的問題,在逐步得到緩解,整個嵌入式專業人才市場的供求關系正在向更健康的方向發展和邁進。但是企業對專業人才需求量的缺口依然非常大,整個嵌入式行業的發展也需要更多專業嵌入式人才的加盟,而且越早進入這個行業,優勢越大。
2、對工作薪資的滿意度
本薪資滿意度的調查結果顯示,有63%的工程師對目前的薪資水平表示非常滿意或基本滿意,比去年同期有4個百分點的增長。另外有37%的人對目前薪資表示了不滿意。結合“薪資分布”調查項的結果,本的薪資水平與工程師的滿意度基本保持了同等比例的增長,工程師對自身能力的提升充滿了信心,對行業發展的整體趨勢表現出非常積極的態度。
3、未來一年薪資漲幅
來自華清遠見2012-2013的調查統計,針對“未來一年薪資漲幅”的調查結果顯示,幾乎所有在職工程師對未來一年薪資的增長都充滿了信心,其中接近68%的人預測漲幅會在40%以內,16%的預測漲幅會在41-60%之間,比去年上升了5個百分點,13%的人預測漲幅會在61%以上,比去年上升了5個百分點,以上數據要高于整個IT行業的平均水平,這充分說明在嵌入式領域,開發人員對自身的發展有更高的要求和更大的信心,對行業未來的發展也表示出積極樂觀的態度。嵌入式技術的成熟應用推動了很多產業的高速發展,例如物聯網、移動互聯網、云計算等,這也讓嵌入式工程師看到了未來自身的更高價值。對于用人企業來說,開發人員對未來薪資有更加的期望會增加企業開發成本,企業必須通過不斷推出有市場競爭力的產品,更高效的內部管理,才能留住更多的人才,保證企業利潤的持續增長。
4、未來職業人生的規劃
在2012-2013的調查統計結果中,“對未來職業人生的規劃”一項,接近66%的工程師給予了肯定的評價,其中48%的工程師表示希望提升自己的層次,期待目前所在公司能給自己更大的成長空間。18%的工程師則表示喜歡自己現在的公司以及工作職位,短時間內應該不會有較大的改變。考慮跳槽的工程師所占比例為23%,比去年上升了4個百分點,打算自己創業的為7%,其他選項均占較小比例。對比去年同期的數據,我們不難看出,由于行業內專業人才的持續緊缺,嵌入式研發工程師在職業發展上擁有更多的主動選擇權。
第五篇:計算機專業暑期學習嵌入式社會實踐總結報告
實踐報告摘要:學習嵌入式是我的夢想,我很羨慕能夠在嵌入式方面獨檔一面的高手,希望有一天我也能像他們那樣自信自如的在嵌入式這片熱土上揮灑著自己的青春和浪漫。帶著無比豪邁的心情和繽紛的夢想來到易嵌學習嵌入式,在新的老師、新的同學和新的環境中,我開始了我的嵌入式學習,開始了新一輪的拼搏。
在易嵌短暫的兩個月,我們從linux基礎入手,強化了c語言編程,學習了linux系統編程和網絡編程。時間雖短,但成長很快,無論是理論知識還是實踐能力都得到了大幅度的提高。在這里將理論和實踐相結合,相互促進,相互補充,使得學習更加透徹。通過用不同方法實現同一個項目,不斷深入,層層推進,學以致用!
在易嵌的這個暑假,我過得充實而快樂。在這里有著同學間的探討、師生間的互動和魔鬼般的訓練!在我豐富多彩的人生路上留下了永遠亮麗與難忘的記憶!
關鍵字:易嵌 嵌入式 linux c語言 難忘的記憶
實踐報告正文:看著四年的大學生活就快要結束了,心中隱隱有一種傷感與失落,我陷入了沉思:該挺直腰桿走自己的路了!學習嵌入式是我的夢想,我很羨慕能夠在嵌入式方面獨檔一面的高手,希望有一天我也能像他們那樣自信自如的在嵌入式這片熱土上揮灑著自己的青春和浪漫。
當我決定好好利用這個暑假,學習我一直都想去學的嵌入式的時候,就注定要在我豐富多彩的人生路上留下永遠亮麗與難忘的記憶!算算畢業的時間,我已經聞到了離別的氣息,在這即將遠離大學時代的時刻,才真正懂得回眸的意義。想想走過的路,想想現在的路,想想來時的路,不知道未來能否成功,既然選擇了遠方,就注定要風雨兼程!帶著無比豪邁的心情和繽紛的夢想來到易嵌學習嵌入式,希望在這嶄新的一頁留下人生的美好!在新的老師、新的同學和新的環境中,我開始了我的嵌入式學習,開始了新一輪的拼搏。
無論現在多么努力都無法追回失去的金色年華,所以在開班典禮的時候,我便為自己制定了目標!我將好好利用最后一個暑假,多學些知識鍛煉自己,為自己儲備一些精神食糧并不斷開拓視野和提升自己的能力,讓自己能夠在畢業的時候成為學校的驕傲!
在易嵌短暫的兩個月,我們從linux基礎入手,強化了c語言編程,學習了linux系統編程和網絡編程。時間雖短,但成長很快,無論是理論知識還是實踐能力都得到了大幅度的提高。
通過對linux操作系統的學習,我初步掌握了linux基礎。剛開始我對linux只是有一點兒了解,但并沒有真正的去接觸。在這段時間里,從linux系統安裝開始著手,了解linux的發展,相比其他系統,它有很多優點。在安裝好系統后,學習了linux的分區命名、linux的常用命令、文本編輯器vi、shell的使用、源代碼的編譯和調試、多模塊的編譯和鏈接以及管理工具。通過這些學習,我基本能夠在linux系統下通過vi編輯器編寫c語言程序,通過一些常用命令來調試、查看程序。
能夠在這么短的時間內初步掌握linux,與在學校學習一門課程意義完全不同,通過老師的講解,自己的練習,同學之間的交流,能夠加深印象,熟練操作。
學習linux基礎只是我嵌入式學習歷程的一個開始,雖然有好多命令還不太熟悉,有好多命令都還沒有去嘗試過,但我相信隨著后期的學習,我將逐漸熟練掌握。