




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、嵌入式技術學習總結報告目錄一、嵌入式系統(tǒng)簡介21.1 嵌入式系統(tǒng)的定義和特點21.2 嵌入式系統(tǒng)的構成31.3 嵌入式系統(tǒng)的應用51.4 嵌入式系統(tǒng)的工具鏈61.5 嵌入式系統(tǒng)的發(fā)展趨勢7二、嵌入式系統(tǒng)的學習實踐8三、實驗內(nèi)容93.1 ZedBoard-Zynq7000介紹93.2 軟件的安裝設置103.3 main函數(shù)分析103.4 任務管理123.4.1 任務優(yōu)先級133.4.2 任務的堆棧143.4.3 任務的狀態(tài)143.5 就緒任務的管理153.6 任務調(diào)度173.6.1 任務搶占173.6.2 輪轉(zhuǎn)調(diào)度183.6.3 調(diào)度時機193.6.4 調(diào)度實現(xiàn)193.7 上下文切換20四、工作
2、總結22一、嵌入式系統(tǒng)簡介1.1 嵌入式系統(tǒng)的定義和特點嵌入式操作系統(tǒng)(Embedded Operation System,EOS)是一種“嵌入機械或電氣系統(tǒng)內(nèi)部、具有專屬功能的計算機系統(tǒng)”,通常要求實時計算性能。被嵌入的系統(tǒng)通常是包含硬件和機械部件的完整設備。相反,通用計算機如個人計算機則設計靈活,以滿足廣大終端用戶的需求?,F(xiàn)在常見的很多設備都采用嵌入式系統(tǒng)控制。EOS負責嵌入系統(tǒng)的全部軟、硬件資源的分配、任務調(diào)度,控制、協(xié)調(diào)并發(fā)活動。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能。嵌入式系統(tǒng)與對象系統(tǒng)密切相關,其主要技術發(fā)展方向是滿足嵌入式應用要求,不斷擴展對象系統(tǒng)
3、要求的外圍電路(如ADC、DAC、PWM、日歷時鐘、電源監(jiān)測、程序運行監(jiān)測電路等),形成滿足對象系統(tǒng)要求的應用系統(tǒng)。因此,嵌入式系統(tǒng)作為一個專用計算機系統(tǒng),要不斷向計算機應用系統(tǒng)發(fā)展。因此,可以把定義中的專用計算機系統(tǒng)引伸成,滿足對象系統(tǒng)要求的計算機應用系統(tǒng)?!扒度胄浴?、“專用性”與“計算機系統(tǒng)”是嵌入式系統(tǒng)的三個基本要素。對象系統(tǒng)則是指嵌入式系統(tǒng)所嵌入的宿主系統(tǒng)。另外,在理解嵌入式系統(tǒng)定義時,不要與嵌入式設備相混淆。嵌入式設備是指內(nèi)部有嵌入式系統(tǒng)的產(chǎn)品、設備,例如,內(nèi)含單片機的家用電器、儀器儀表、工控單元、機器人、手機、PDA等。嵌入式系統(tǒng)的特點與定義不同,它是由定義中的三個基本要素衍生出來
4、的。不同的嵌入式系統(tǒng)其特點會有所差異。與“嵌入性”的相關特點:由于是嵌入到對象系統(tǒng)中,必須滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣/氣氛環(huán)境(可靠)、成本(價廉)等要求的特點。與“專用性”的相關特點:軟、硬件的裁剪性。滿足對象要求的最小軟、硬件配置等。與“計算機系統(tǒng)”的相關特點:嵌入式系統(tǒng)必須是能滿足對象系統(tǒng)控制要求的計算機系統(tǒng)。與上兩個特點相呼應,這樣的計算機必須配置有與對象系統(tǒng)相適應的接口電路。目前,已推出一些應用比較成功的EOS產(chǎn)品系列。隨著Internet技術的發(fā)展、信息家電的普及應用及EOS的微型化和專業(yè)化,EOS開始從單一的弱功能向高專業(yè)化的強功能方向發(fā)展。嵌入式操作系統(tǒng)在
5、系統(tǒng)實時高效性、硬件的相關依賴性、軟件固化以及應用的專用性等方面具有較為突出的特點。EOS是相對于一般操作系統(tǒng)而言的,它除具備了一般操作系統(tǒng)最基本的功能,如任務調(diào)度、同步機制、中斷處理、文件功能等外,還有以下特點:(1)可裝卸性。開放性、可伸縮性的體系結構。(2)強實時性。EOS實時性一般較強,可用于各種設備控制當中。(3)統(tǒng)一的接口。提供各種設備驅(qū)動接口。(4)操作方便、簡單、提供友好的圖形GUI,圖形界面,追求易學易用。(5)提供強大的網(wǎng)絡功能,支持TCP/IP協(xié)議及其它協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問層接口,為各種移動計算設備預留接口. (6)強穩(wěn)定性,弱
6、交互性。嵌入式系統(tǒng)一旦開始運行就不需要用戶過多的干預,這就要負責系統(tǒng)管理的EOS具有較強的穩(wěn)定性。嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過系統(tǒng)調(diào)用命令向用戶程序提供服務。(7)固化代碼。在嵌入系統(tǒng)中,嵌入式操作系統(tǒng)和應用軟件被固化在嵌入式系統(tǒng)計算機的ROM中。輔助存儲器在嵌入式系統(tǒng)中很少使用,因此,嵌入式操作系統(tǒng)的文件管理功能應該能夠很容易地拆卸,而用各種內(nèi)存文件系統(tǒng).(8)更好的硬件適應性,也就是良好的移植性.1.2 嵌入式系統(tǒng)的構成嵌入式系統(tǒng)按形態(tài)可分為設備級(工控機)、板級(單板、模塊)、芯片級(MCU、SoC)。嵌入式系通常由嵌入式處理器、外圍設備、嵌入式操作系統(tǒng)和應用軟件等
7、幾大部分組成。嵌入式系統(tǒng)與對象系統(tǒng)密切相關,其主要技術發(fā)展方向是滿足嵌入式應用要求,不斷擴展對象系統(tǒng)要求的外圍電路(如ADC、DAC、PWM、日歷時鐘、電源監(jiān)測、程序運行監(jiān)測電路等),形成滿足對象系統(tǒng)要求的應用系統(tǒng)。因此,嵌入式系統(tǒng)作為一個專用計算機系統(tǒng),要不斷向計算機應用系統(tǒng)發(fā)展。(1)嵌入式處理器嵌入式處理器是嵌入式系統(tǒng)的核心部件。嵌入式處理器與通用處理器的最大不同點在于其大多工作在為特定用戶群設計的系統(tǒng)中。它通常把通用計算機中許多由板卡完成的任務集成在芯片內(nèi)部,從而有有利于嵌入式系統(tǒng)設計趨于小型化,并具有高效率、高可靠性等特征。嵌入式處理器大概可分為兩類。一類是普通微處理器:使用獨立的集
8、成電路存儲器和外設。另一類是單片機:具有片上外設,降低了功耗、尺寸和成本。嵌入式系統(tǒng)的軟件是為某種應用定制的,而不是像個人計算機那樣的由終端用戶安裝的商品,因此可以使用各種不同的基本CPU架構:既有范紐曼型架構也有不同程度的哈佛結構;既有RISC也有非精簡指令集處理器;字長從4位到64位甚至更高,當然最典型的仍然是8/16位。多數(shù)架構由幾家不同的公司生產(chǎn),使用了大量不同的變量和類型。嵌入式系統(tǒng)也會使用通用型微處理器,但比單片機需要更多外圍電路。大的硬件廠商會推出自己的嵌入式處理器,因而現(xiàn)今市面上有1000多種嵌入式處理器芯片,其中使用最為廣泛的有ARM 、MIPS、PowerPC、MC6800
9、等。SoC是一種常見的為超大批量嵌入式系統(tǒng)設計的可配置陣列。它在單個芯片內(nèi)包含了多處理器、乘法器、緩存和接口,形成一個完整的系統(tǒng);通過特定用途集成電路或現(xiàn)場可編程門陣列來實現(xiàn)。(2)嵌入式主板嵌入式主板一般理解為嵌入在設備里面做控制、數(shù)據(jù)處理使用的CPU板,也就是設備的“大腦”。嵌入式到設備里面,當然就會對主板的體積以及功耗(嵌入式主板的散熱問題)有比較嚴格的要求。所以一般來講嵌入式主板會具備尺寸小、高集成度、低功耗等特性。目前嵌入式主板比較常見的一般有兩大類:基于X86的嵌入式主板(一般使用INTEL、威盛、AMD或其他產(chǎn)家的X86芯片如:臺灣RDC、臺灣ICOP等等);基于RISC的ARM
10、 嵌入式主板(由ARM公司授權生產(chǎn),每個芯片產(chǎn)家各有自己特殊的功能)。嵌入式的ARM板一般都是板載CPU,而基于x86 CPU的主板則不一定。基于RISC 的ARM板一般都是根據(jù)產(chǎn)品的要求做具體設計,所以主板在尺寸外觀上面通常沒有做定義。PC/104和PC/104+是小型、小批量嵌入式強固系統(tǒng)的標準之一,大多基于x86架構;通常比標準PC要小,而比多數(shù)簡單的8/16位嵌入式系統(tǒng)要大;使用MSDOS、Linux、NetBSD,或?qū)崟r嵌入式操作系統(tǒng)如MicroC/OS-II、QNX、VxWorks。有時這些主板也會使用非x86處理器。在某些應用中,小巧、高效并非主要關注點,因而可以使用與x86型P
11、C主板兼容的部件。VIA EPIA系列板卡則可以彌補這個空缺,它兼容PC但是高度集成、體積較小,或提供其他對嵌入式工程師很有吸引力的特性。這種方法的好處是低成本商品也可以使用通用的軟件開發(fā)工具。用這種方法構建的系統(tǒng)仍然是嵌入式系統(tǒng),因為它嵌入在較大的設備中、用于滿足單一用途。例如ATM和電子游戲機,它們都包含了針對各自應用的代碼。多數(shù)嵌入式主板都不是圍繞PC設計的,也不使用ISA或PCI總線。如果采用SoC處理器,用標準總線連接分立組件就不是上策,此外軟硬件開發(fā)環(huán)境都可能會很不一樣。一種常用的設計模式是采用小型系統(tǒng)模塊也許只有商務卡片大小,容納高密度的BGA芯片如ARM處理器和外設、用于存儲的
12、外部閃存、作為內(nèi)存的DRAM。模塊廠商通常會提供引導軟件和操作系統(tǒng)選項,一般包括Linux和一些實時操作系統(tǒng)。這些模塊由熟悉專業(yè)測試方法的組織大批量生產(chǎn),配合較小批量的、帶特殊應用外設的定制主板使用。(3)外圍設備外圍設備是指在一個嵌入式系統(tǒng)中,除了嵌入式處理器以外用于完成存儲、通信、調(diào)試、顯示等輔助功能的其它部件。根據(jù)外圍設備的功能可以分為存儲器、接口和人機交互。嵌入式系統(tǒng)通過外設與外部通信串行,包括通信接口:RS-232、RS-422、RS-485等;同步串行通信接口:I2C、SPI、ESSI等;USB;多媒體卡:SD卡、CF卡等;網(wǎng)絡:以太網(wǎng)、LonWorks等;現(xiàn)場總線:CAN總線、L
13、IN總線、PROFIBUS等;定時器:PLL、捕獲比較模塊和時間處理單元;分立IO:GPIO;模擬-數(shù)字/數(shù)字-模擬轉(zhuǎn)換(ADC/DAC);調(diào)試接口:JTAG、ISP、ICSP、BDM端口、BITP、DP9端口等。(4)嵌入式操作系統(tǒng)在大型嵌入式應用系統(tǒng)中,為了使嵌入式開發(fā)更方便、快捷,需要具備一種穩(wěn)定、安全的軟件模塊集合,用以管理存儲器分配、中斷處理、任務間通信和定時器響應,以及提供多任務處理等,即嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)的引入大大的提高了嵌入式系統(tǒng)的功能,方便了應用軟件的設計,但同時占用了寶貴的嵌入式系統(tǒng)資源。一般在比較大型或需要多任務的應用場合才考慮使用嵌入式系統(tǒng)。嵌入式系統(tǒng)常常需
14、要有實時要求,所以嵌入式操作系統(tǒng)往往又是“實時操作系統(tǒng) ”。早期的嵌入式系統(tǒng)幾乎都用于控制目的,從而或多或少都有些實時要求,所以從前“嵌入式操作系統(tǒng)”實際上是“實時操作系統(tǒng)”的代名詞。今年來由于手持式計算機和掌上電腦等設備的出現(xiàn),也有了不帶實時要求的嵌入式系統(tǒng)。另外一方面,由于CPU速度的提高,一些原先認為是“實時”的反應速度現(xiàn)在已經(jīng)很普遍了。這樣,一些原先需要在“實時”操作系統(tǒng)上才能實現(xiàn)的應用,現(xiàn)在已不難在常的操作系統(tǒng)上實現(xiàn)。在這樣的背景下,“嵌入式操作系統(tǒng)”和“實時操作系統(tǒng)”就成了不同的概念名詞。常見的嵌入式操作系統(tǒng)有: Android、Firefox OS、iPhone OS、uC/OS
15、 、uCLinux、VxWorks、pSOS、Nucleus、PalmOS、Windows CE、Windows XP Embedded、Windows Vista Embedded、嵌入式Linux、ECOS、QNX、Lynx、Symbian、Arm-Linux等。(5)應用軟件嵌入式系統(tǒng)的應用軟件是針對特定的實際專業(yè)領域,基于相應的嵌入式硬件平臺,并能完成用戶的預期任務的計算機軟件。用戶的任務可能有時間和精度的要求。有些應用軟件需要嵌入操作系統(tǒng)的支持,但在簡單的場合下不需要專門的操作系統(tǒng)。由于嵌入式應用軟件對成本十分敏感,因此,為減少系統(tǒng)成本,除了精簡每個硬件單元的成本外,應盡可能的減少應
16、用軟件的資源消耗,盡可能的優(yōu)化。1.3 嵌入式系統(tǒng)的應用嵌入式計算機在應用數(shù)量上遠遠超過了各種通用計算機,一臺通用計算機的外部設備中就包含了5-10個嵌入式微處理器。嵌入式系統(tǒng)技術具有非常廣闊的應用前景,其應用領域可以包括:工業(yè)控制:業(yè)過程控制、數(shù)字機床、電力系統(tǒng)、電網(wǎng)安全、電網(wǎng)設備監(jiān)測、石油化工系統(tǒng);交通管理:在車輛導航、流量控制、信息監(jiān)測與汽車服務方面,嵌入式系統(tǒng)技術已經(jīng)獲得了廣泛的應用,內(nèi)嵌GPS模塊,GSM模塊的移動定位終端已經(jīng)在各種運輸行業(yè)獲得了成功的使用;信息家電:這將稱為嵌入式系統(tǒng)最大的應用領域,冰箱、空調(diào)等的網(wǎng)絡化、智能化將引領人們的生活步入一個嶄新的空間。即使你不在家里,也可
17、以通過電話線、網(wǎng)絡進行遠程控制。在這些設備中,嵌入式系統(tǒng)將大有用武之地。家庭智能管理系統(tǒng):水、電、煤氣表的遠程自動抄表,安全防火、防盜系統(tǒng),其中嵌有的專用控制芯片將代替?zhèn)鹘y(tǒng)的人工檢查,并實現(xiàn)更高,更準確和更安全的性能;POS網(wǎng)絡及電子商務:公共交通無接觸智能卡(Contactless Smartcard, CSC)發(fā)行系統(tǒng),公共電話卡發(fā)行系統(tǒng),自動售貨機,各種智能ATM終端將全面走入人們的生活,到時手持一卡就可以行遍天下。環(huán)境工程與自然:水文資料實時監(jiān)測,防洪體系及水土質(zhì)量監(jiān)測、堤壩安全,地震監(jiān)測網(wǎng),實時氣象信息網(wǎng),水源和空氣污染監(jiān)測。在很多環(huán)境惡劣,地況復雜的地區(qū),嵌入式系統(tǒng)將實現(xiàn)無人監(jiān)測。
18、軍事領域:戰(zhàn)機、火控系統(tǒng)、導彈、火箭。1.4 嵌入式系統(tǒng)的工具鏈工具對工程師設計開發(fā)的成功所起的決定性因素也在提高。應用越來越復雜,工具的選擇也越來越重要?,F(xiàn)在市場上有些工具是免費的,也有很多商業(yè)工具。無論是免費的還是商業(yè)的,工具的好壞往往會影響整個工程的最終結果?,F(xiàn)在的嵌入式系統(tǒng)開發(fā)工具非常多樣化,市場分散。目前據(jù)不完全統(tǒng)計,全世界嵌入式處理器的品種數(shù)已經(jīng)超過1000多種,流行體系結構有30多個系列,在其上運行的操作系統(tǒng)環(huán)境也非常多樣化,包括VxWorks、QNX、Linux、 Nuclears、WinCE等等。不僅各種操作系統(tǒng)有各自的開發(fā)工具,在同一系統(tǒng)下不同的開發(fā)階段也有不同的開發(fā)工具。
19、如在用戶的目標板開發(fā)初期,需要硬件仿真器來調(diào)試硬件系統(tǒng)和基本的驅(qū)動程序,在調(diào)試應用程序階段使用交互式的開發(fā)環(huán)境進行軟件調(diào)試,在測試階段需要專門的測試軟件進行功能和性能的測試等等。對于設計人員來說,要掌握、駕馭這樣龐大的開發(fā)體系是一件非常困難的事情,而且編程的復雜度相當大。在選擇工具時,主要需要注意以下幾個方面:編譯器的性能和穩(wěn)定性、代碼覆蓋、仿真(不僅是對CPU的仿真,還有對其他硬件和設備的仿真)。工具鏈,一般由編譯器、連接器、解釋器和調(diào)試器組成,在嵌入式開發(fā)中一般指交叉工具鏈。在嵌入式開發(fā)中,往往在機器A中使用工具鏈生成可執(zhí)行程序,而在機器B中執(zhí)行程序。而機器A和機器B的指令系統(tǒng)往往不同,常
20、見的是利用x86機器上的工具鏈開發(fā)基于ARM或MIPS的嵌入式系統(tǒng)。工具鏈的構成往往與目標對象和使用工具鏈的操作系統(tǒng)平臺有關。通常構建交叉工具鏈有如下三種方法:(1)分步編譯和安裝交叉編譯工具鏈所需要的庫和源代碼,最終生成交叉編譯工具鏈。該方法相對比較困難,適合想深入學習構建交叉工具鏈的讀者。如果只是想使用交叉工具鏈,建議使用下列的方法二構建交叉工具鏈。(2)通過諸如Crosstool等腳本工具來實現(xiàn)一次編譯,生成交叉編譯工具鏈。該方法相對要簡單許多,并且出錯的機會也非常少,建議大多數(shù)情況下使用該方法構建交叉編譯工具鏈。(3)直接通過網(wǎng)上下載已經(jīng)制作好的交叉編譯工具鏈。該方法的優(yōu)點不用多說,當
21、然是簡單省事,但該方法有一定的弊端就是局限性太大,因為畢竟是別人構建好的,也就是固定的,沒有靈活性,所以構建所用的庫以及編譯器的版本也許并不適合你要編譯的程序,同時也許會在使用時出現(xiàn)許多莫名其妙的錯誤,建議慎用此方法。對于新手而言,直接下載一些廠商提供的集成開發(fā)環(huán)境(IDE),能夠快速入手嵌入式開發(fā)。常用的IDE有Keil MDK、Xilinx ISE、Xilinx EDK、TKStudio IDE、Atmel的AVR Studio(for AVR以及AVR32)、Microchip的MPLab(for PIC、PIC18與dsPIC等)、Aiji的EDS(for ARM),南京萬利的MedW
22、in(for 8051)、IAR Embedded Workbench等?!罢w解決方案是毒藥”,我們使用IDE但是不要迷信整體解決方案。嵌入式系統(tǒng)開發(fā)工具的發(fā)展已經(jīng)有二十多年的歷史,目前開放性和開放源碼成為一股強大的潮流,推動嵌入式系統(tǒng)設計技術向前發(fā)展,傳統(tǒng)的嵌入式系統(tǒng)開發(fā)工具已不能適應這一潮流。最新的發(fā)展趨勢是,使用Eclipse開放源碼集成化開發(fā)環(huán)境(IDE)平臺,采用插件技術,在這樣的平臺基礎上擴展許多開發(fā)工具套件。越來越多的嵌入式系統(tǒng)軟件供應商將Eclipse平臺作為自身工具的基礎,推出個性化的開發(fā)工具套件,除提供標準的編譯器、編輯器、調(diào)試器,還提供增強的操作系統(tǒng)內(nèi)核級調(diào)試手段和高級
23、的系統(tǒng)分析工具,如內(nèi)存泄漏檢測、系統(tǒng)性能監(jiān)控等??傊度胧介_發(fā)工具將向高度集成、編譯優(yōu)化、具有系統(tǒng)設計、可視化建模、仿真和驗證功能方向發(fā)展。1.5 嵌入式系統(tǒng)的發(fā)展趨勢在嵌入式系統(tǒng)開發(fā)領域,技術發(fā)展的最新趨勢可以從企業(yè)層面、平臺層面和部件層面分別觀察,其核心是以盡可能快的速度、盡可能低的成本來滿足迅速變化的市場需求。(1)以往,嵌入式軟件開發(fā)的技術問題主要是在工程師和開發(fā)團隊的層面來解決。不同的工程師和開發(fā)項目之間可以共享的資源并沒有得到足夠的重視和利用,這是業(yè)界經(jīng)常說的一個問題制造每輛汽車都必須從輪子開始。共享資源、提高軟件部件的可重用性,這是整個軟件業(yè)界幾十年來的普遍趨勢,只是這個趨勢在
24、嵌入式軟件領域的步伐比企業(yè)軟件慢了不少。隨著DSO(Device Software Optimization,設備軟件優(yōu)化)概念的提出,嵌入式軟件的可重用性將會得到快速提高。這就是嵌入式軟件在企業(yè)層面的主流趨勢。(2)從開發(fā)平臺層面來看,開放已經(jīng)成為一種主流思想,對于開放系統(tǒng)首先會讓人想到的就是Linux。不過,開放本身不是一種技術,而是一種包容先進技術的思路和方法。新技術往往是從封閉開始,通過走向開放而發(fā)揮更大的價值。(3)從部件層面來看,最主流的趨勢是多核技術的興起。這個趨勢從處理器芯片巨頭的動向可以一目了然。對于嵌入式軟件工程師來講,采用開放、高效并且能夠讓自己不斷積累開發(fā)成果的開發(fā)平臺
25、與工具,讓自己能夠?qū)W⒂诋a(chǎn)品功能特性的開發(fā),而不是花費太多精力去做維護工具和基礎性、重復性的功能開發(fā)。二、嵌入式系統(tǒng)的學習實踐目前從事嵌入式開發(fā)的主要有兩類人。一類是學電子工程、通信工程等偏硬件專業(yè)出身的人,他們主要是搞硬件設計,需要開發(fā)一些與硬件關系最密切的最底層軟件:BootLoader、Board SupportPackage(像PC的BIOS一樣,往下驅(qū)動硬件,往上支持操作系統(tǒng)),最初級的硬件驅(qū)動程序等。他們的優(yōu)勢是對硬件原理非常清楚,不足是他們更擅長定義各種硬件接口,但對復雜軟件系統(tǒng)往往力不從心(例如嵌入式操作系統(tǒng)原理和復雜應用軟件等)。另一類是學軟件、計算機專業(yè)出身的人,主要從事嵌
26、入式操作系統(tǒng)和應用軟件的開發(fā)。如果我們學軟件的人對硬件原理和接口有較好的掌握,我們完全也可寫B(tài)SP和硬件驅(qū)動程序。嵌入式硬件設計完后,各種功能就全靠軟件來實現(xiàn)了,嵌入式設備的增值很大程度上取決于嵌入式軟件,這占了嵌入式系統(tǒng)的最主要工作。目前有很多公司將硬件設計包給了專門的硬件公司,稍復雜的硬件都交給臺灣或國外公司設計,國內(nèi)的硬件設計力量很弱,很多嵌入式公司自己只負責開發(fā)軟件,因為公司都知道,嵌入式產(chǎn)品的差異很大程度在軟件上,在軟件方面是最有“花頭”可做的,所以搞軟件的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能設備越是復雜系統(tǒng),軟件越起關鍵作用,而且這是目前的趨勢。中國的學生能夠在大學
27、相關課程中充分對MCU基礎知識進行學習,這已經(jīng)走在了很多國家(甚至包括日本)的前面。但中國新一代工程師面對的主要問題是如何去積累經(jīng)驗。嵌入式系統(tǒng)的開發(fā)通常是硬件和軟件同時進行的,其在開發(fā)過程中出現(xiàn)不良狀況的原因有可能是硬件或是軟件,有時甚至可能是兩者同時發(fā)生故障。在這樣的狀況下,就要求從事硬件的技術人員要相當程度的懂得軟件,從事軟件的技術開發(fā)人員也要在一定程度上懂得硬件。另外,目前該行業(yè)存在最終產(chǎn)品的壽命較短的情況,這就意味著每年都有必要開發(fā)新的產(chǎn)品。但是從初級階段進行開發(fā),需要花費大量的開發(fā)成本及開發(fā)時間。因此,有效地歸納總結現(xiàn)有的開發(fā)成果,并有效地投入新開發(fā)中加以利用是十分重要的。很多工程
28、師在設計嵌入式系統(tǒng)的時候往往選擇最底層的工具,把絕大部分的時間都花在了底層的細節(jié),而往往忽視了創(chuàng)新性和系統(tǒng)級的把握。工程師無論是為了自身的發(fā)展還是為了所設計產(chǎn)品的競爭力,這兩點其實都是至關重要的。首先是“工欲善其事,必先利其器”,若有條件要盡可能采用更快更強的工具進行開發(fā)。其次是“磨刀不誤砍柴工”,要盡可能挖掘集成開發(fā)軟件中的資源,如花些時間去了解許多實用輔助軟件,如DMA、Cache和片內(nèi)帶寬分析工具等。同時,在至少一個領域中具有深入的技術知識。工程師能夠分析問題或是編寫程序是遠遠不夠的,他們還要能夠利用自己的知識完成獨特創(chuàng)新的設計。所以,工程師要體現(xiàn)自身價值,必須有系統(tǒng)性的眼光,能夠進行有
29、創(chuàng)新性的設計。在這種情況下,工程師們更多的應該從底層的編程細節(jié)中脫身,讓工具去處理那些“常規(guī)”事務,而工程師本身就可以專注于自己的設計或研究領域,從更高的角度來看待自己在設計的系統(tǒng),而不是只見樹木,不見森林。三、實驗內(nèi)容我所在的小組的實驗任務,基于ZedBoard-Zynq7000的C/OS-III代碼的分析和調(diào)試,重點分析C/OS-III操作系統(tǒng)的任務調(diào)度機制。3.1 ZedBoard-Zynq7000介紹ZedBoard是一款基于賽靈思Zynq-7000可擴展處理平臺(EPP)的低成本開發(fā)板,也是行業(yè)首款面向廣大開源小區(qū)的Zynq -7000 EP可擴展處理平臺開發(fā)工具包。開發(fā)板為基于Li
30、nux、安卓、Windows或其它操作系統(tǒng)/實時操作系統(tǒng)的設計開發(fā)提供了所需的一切。另外,該平臺提供數(shù)款擴展連接器,便于用戶訪問處理系統(tǒng)和可編程邏輯。Zynq-7000 EPP緊密集成了ARM®處理系統(tǒng)和7系列可編程邏輯,充分利用它們的優(yōu)勢,并結合ZedBoard可以開發(fā)出獨樹一幟且功能強大的設計。圖一:ZedBoard-Zynq7000Zynq7000系列是基于Xilinx的可編程SOC架構,集成了一個雙核的ARM® Cortex-A9 處理器,一個Xilinx可編程邏輯(PL)。Zynq7000集成有仿真芯片,提供了板載USB-JTAG編程、USB-UART,方便開發(fā)者
31、進行調(diào)試。圖二:Zynq-7000 AP SoC系統(tǒng)框架3.2 軟件的安裝設置(1)安裝UART驅(qū)動。目前只有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.3 main函數(shù)分析結合Micrium-uCOS-III-UserMan
32、ual對代碼進行靜態(tài)分析,最好的方法是找到程序入口函數(shù)main(ZC702_uCOSIIIApplicationapp.c),然后在main函數(shù)內(nèi)逐行代碼分析從而對程序的流程有一個大體的了解。在分析過程中碰到關鍵或感興趣的函數(shù)或結構可以進一步跟入分析。int main (void) OS_ERR os_err; Xil_DCacheDisable();/關數(shù)據(jù)cache Xil_ICacheDisable();/關 instruction cache Reset_Handler(); /* Scatter loading is complete. */ /* Now the caches ca
33、n 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
34、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 *)&AppTaskStartStk0, (CPU_STK_SIZE) APP_CFG_TASK_START_STK_SIZE / 10u, (CPU
35、_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(;) 對main函數(shù)內(nèi)調(diào)用的一些函數(shù)和結構做進一步分析,可知OS_TCB(ZC702_uCOSIIIuC
36、OS-IIISourceos.h)是系統(tǒng)用于表示一個任務的結構,是系統(tǒng)的核心數(shù)據(jù)結構之一。OSInit(ZC702_uCOSIIIuCOS-IIISourceos_core.c)函數(shù)是值得重點看的函數(shù)。main->OSInit->OS_IdleTaskInit,通過調(diào)用OS_IdleTaskInit的調(diào)用創(chuàng)建了系統(tǒng)的一個名叫“uC/OS-III Idle Task”的任務,其優(yōu)先級值為31。這個任務相應執(zhí)行的函數(shù),基本沒有做任何操作,簡單對OSIdleTaskCtr、OSStatTaskCtr兩個系統(tǒng)計數(shù)進行增加。OSIdleTaskHook()是用戶可以自定義的函數(shù),uCOS-I
37、II代碼中有大量這種Hook函數(shù),方便用戶進行功能擴展。當然用戶也可直接對任意代碼進行修改,但是對系統(tǒng)Hook函數(shù)進行重寫能夠很好地保持原有uCOS-III系統(tǒng)的完整性。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->
38、;OSInit->OS_TickTaskInit創(chuàng)建了一個名叫"uC/OS-III Tick Task"的任務(優(yōu)先級為10),任務的創(chuàng)建都得通過OSTaskCreate來創(chuàng)建,main函數(shù)中又創(chuàng)建"Startup Task"任務。這三個任務對應的運行函數(shù)內(nèi)都包含了while死循環(huán),因此系統(tǒng)運行起來后至少有三個任務,分別是Idle任務、Tick任務、Startup任務。3.4 任務管理C/OS-III支持多任務,理論上可以支持任意多個任務,但實際通常受限于系統(tǒng)內(nèi)存的多少。所有任務管理都是基于OS_TCB結構來進行的,接下來我們詳細分析OS_TCB的
39、定義(uCOS-IIISourceos.h),可知一個任務有優(yōu)先級、狀態(tài)、堆棧,下面分別予以介紹。3.4.1 任務優(yōu)先級C/OS-III的優(yōu)先級共有32個(0-31),數(shù)值越小優(yōu)先級越高,一般地優(yōu)先級0和31保留給系統(tǒng)使用。中斷處理任務的優(yōu)先級最高,空閑任務的優(yōu)先級最低。圖三:C/OS-III任務優(yōu)先級3.4.2 任務的堆棧在利用OSTaskCreate創(chuàng)建新任務前,必須先創(chuàng)建好任務堆棧,如Startup任務就用如下代碼來分配堆棧:static CPU_STK AppTaskStartStkAPP_CFG_TASK_START_STK_SIZE;堆棧主要的大小是可以由用戶自己定義(需考慮任務里
40、函數(shù)的嵌套層數(shù)和局部變量占用空間多少。另外在嵌入式開發(fā)中,應盡可能避免遞歸的調(diào)用),堆棧是向下增長的。堆棧溢出(這里的溢出是指堆??臻g不夠用)是操作系統(tǒng)必須考慮的問題,C/OS-III有三種解決方法:(1)利用內(nèi)存管理單元(MMU)或內(nèi)存保護單位(MPU);(2)利用某些CPU提供的堆棧溢出檢測功能;(3)基于軟件實現(xiàn)的堆棧溢出檢測。前兩者都依賴于硬件提供該功能。圖四:C/OS-III堆棧結構3.4.3 任務的狀態(tài)OS_TCB結構中的TaskState表示任務的狀態(tài)。在C/OS-III中,從用戶的角度來看任務有五個狀態(tài):靜止(Dormant)、就緒(Ready)、運行(Running)、掛起(
41、Pending)、中斷(Inrerrupted)。任務的狀態(tài)是動態(tài)轉(zhuǎn)換的,構造好OS_TCB結構后,此時任務處于靜止狀態(tài),OSTaskCreate函數(shù)中調(diào)用OS_TaskInitTCB函數(shù)將任務狀態(tài)設為OS_TASK_STATE_RDY并調(diào)用OS_RdyListInsertTail將任務插入相應優(yōu)先級的就緒隊列中。圖五:任務狀態(tài)的轉(zhuǎn)換3.5 就緒任務的管理任務在運行前都處于就緒狀態(tài)或中斷狀態(tài),CPU的調(diào)度基本上就是以某種策略從所有就緒任務中挑選一個任務運行。C/OS-III利用一個就緒優(yōu)先級位圖和一個就緒隊列表來管理就緒任務。OSInit->OS_PrioInit()中對任務優(yōu)先級位圖表
42、進行了初始化。C/OS-III 有OS_CFG_PRIO_MAX優(yōu)先級(見os_cfg.h),優(yōu)先級值越小表示優(yōu)先級越高。優(yōu)先級0表示最高級別,優(yōu)先級OS_CFG_PRIO_MAX-1最低(在本實驗中OS_CFG_PRIO_MAX=32). 如果某個優(yōu)先級上存在就緒的任務,那么就在位圖表中相應的位設置為1,否則設置為0.位圖寬度可以是8bit、16bit、32bit,這樣依賴于CPU_DATA的值即依賴所用CPU的特性(本實驗中是32bit,優(yōu)先級總數(shù)為32,因此位圖大小為32*1)。查找最高就緒的優(yōu)先級,只需在優(yōu)先級位圖中找第一不為0的bit。OS_PRIO OS_PrioGetHighes
43、t (void)CPU_DATA *p_tbl;OS_PRIO prio;prio = (OS_PRIO)0;p_tbl = &OSPrioTbl0;while (*p_tbl = (CPU_DATA)0) prio += DEF_INT_CPU_NBR_BITS;)p_tbl+;prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl); return (prio);圖六:就緒優(yōu)先級位圖就緒列表實際上是一包含OS_CFG_PRIO_MAX個OS_RDY_LIST(見os.h)類型實體的數(shù)組(OSRdyList)。OS_RDY_LIST實體包含三個成員:Entr
44、ies、TailPtr、HeadPtr。Entries表示該優(yōu)先級別上任務個數(shù),TailPtr和HeadPt用于創(chuàng)建包含該所有優(yōu)先級別上的就緒任務的雙向鏈表。代碼中包含了OS_RdyListInit()、OS_RdyListInsert() 、OS_RdyListInsertHead()、OS_RdyListInsertTail()、 OS_RdyListMoveHeadToTail()、OS_RdyListRemove()等函數(shù)用于操作就緒列表。圖七:任務創(chuàng)建后加入就緒列表3.6 任務調(diào)度3.6.1 任務搶占在C/OS-III中,任務調(diào)度器(scheduler)即分發(fā)器(dispatcher
45、)負責任務的調(diào)度。C/OS-III使用基于優(yōu)先級、搶占式的調(diào)度策略。搶占是指當由于某種原因使更高優(yōu)先級任務變成就緒狀態(tài)(較當前任務),那么調(diào)度器立即將CPU分別給該更高優(yōu)先級任務,而當前任務變成掛起狀態(tài)。類似地,當中斷服務程序(ISR)將一個處于掛起狀態(tài)的更高優(yōu)先級任務喚醒時,當前被中斷的任務保持掛起狀態(tài),被喚醒的那個更高優(yōu)先級任務得到執(zhí)行。如圖八,是一種直接的搶占方式,C/OS-III還支持一種較Post Defferd即延時的搶占方式(圖九)。延時搶占方式,多一步ISR Handler(在操作系統(tǒng)中被稱為中斷軟處理,主要目的是減少關中斷的時間) 用于處理在ISR(中斷硬處理)中來不及處理事
46、情。圖八:任務搶占圖九:帶延遲處理的任務搶占3.6.2 輪轉(zhuǎn)調(diào)度如果未開啟輪轉(zhuǎn)策略,正在執(zhí)行的任務除非主動放棄執(zhí)行(包括等待某些時間、或者調(diào)用睡眠函數(shù))或者被搶占,那么同級別的任務得等到該任務執(zhí)行完采用機會執(zhí)行。當同一個優(yōu)先級上有兩個以上就緒任務時,C/OS-III 采用時間片策略使得該優(yōu)先級上所有任務得到依次輪轉(zhuǎn)執(zhí)行。當然如果一個任務的時間片未用完,也可主動放棄CPU使得下個任務得到執(zhí)行。輪轉(zhuǎn)調(diào)度策略不是必須的,C/OS-III允許用戶開啟或關閉該策略。圖九:時間片調(diào)度3.6.3 調(diào)度時機調(diào)度可能發(fā)生時機包括:(1)一個任務給其他任務發(fā)送(send)消息或信號時;(2)任務 OSTimeDl
47、y() 或者 OSTimeDlyHMSM();(3)任務調(diào)用等待函數(shù)OS?Pend()等待尚未發(fā)生的任務;(4)任務放棄掛起:其它任務調(diào)用OS?PendAbort()改變該任務狀態(tài);(5)任務創(chuàng)建時:創(chuàng)建的任務可能擁有比當前任務較高優(yōu)先級;(6)任務被刪除時:如果該任務就是當前任務;(7)內(nèi)核對象被刪除時;(7)任務優(yōu)先級發(fā)生改變時;(8)任務調(diào)用OSTaskSuspend()掛起自己;(9)任務調(diào)用OSTaskResume()喚醒了其它任務;(10)所有嵌套的ISR退出時:調(diào)度由OSIntExit()發(fā)起而不是 OSSched();(11)調(diào)度器被解鎖;(12)任務調(diào)用OSSchedRoundRobinYield()主動放棄時間片;(12)用戶調(diào)用了OSSched();(13)任務時間片用完了。3.6.4 調(diào)度實現(xiàn)調(diào)度器的實現(xiàn)在函數(shù)OSSched() 和 OSIntExit()中。其中,OSSched()由任務級別代碼發(fā)起而OSIntExit()是有中斷服務程序發(fā)起。任務的調(diào)度是基于前面提及的就緒任務
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 池塘噴泉修繕施工方案
- 桁架施工方案
- 特殊施工方案
- 昆明石方爆破施工方案
- 二零二五年度文化旅游地產(chǎn)項目房屋及土地所有權轉(zhuǎn)讓協(xié)議
- 二零二五年度高校畢業(yè)生就業(yè)安置與就業(yè)服務保障合同
- 二零二五年度車庫購置與車位共享運營協(xié)議
- 二零二五年度玉米種植補貼收購合同
- 二零二五年度廉潔合作協(xié)議:公共資源交易項目監(jiān)管合同
- 二零二五年度飼料行業(yè)風險評估與保險合同
- 道路工程規(guī)劃選址論證報告(共85頁)
- h型鋼力學性能計算表
- 自明排課使用說明
- 醫(yī)院安全巡查制度醫(yī)院安全巡查制度
- 骨化膿性骨髓炎的影像學診斷
- 臺灣姓氏拼音對照
- 轎車驅(qū)動橋設計課程設計,過程以及計算
- 套管柱及其強度設計ppt課件
- 三年級語文家長會(課堂PPT)
- 新老加油加氣站設計與施工規(guī)范要點對比解讀
- 醫(yī)藥企業(yè)價格和營銷行為信用承諾書
評論
0/150
提交評論