




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