嵌入式系統(tǒng)原理及應(yīng)用:第四章 ucos-II嵌入式實時操作系統(tǒng)內(nèi)核分析1_第1頁
嵌入式系統(tǒng)原理及應(yīng)用:第四章 ucos-II嵌入式實時操作系統(tǒng)內(nèi)核分析1_第2頁
嵌入式系統(tǒng)原理及應(yīng)用:第四章 ucos-II嵌入式實時操作系統(tǒng)內(nèi)核分析1_第3頁
嵌入式系統(tǒng)原理及應(yīng)用:第四章 ucos-II嵌入式實時操作系統(tǒng)內(nèi)核分析1_第4頁
嵌入式系統(tǒng)原理及應(yīng)用:第四章 ucos-II嵌入式實時操作系統(tǒng)內(nèi)核分析1_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、4C H A P T E Rc/os-II嵌入式實時操作系統(tǒng)內(nèi)核分析1為什么要學(xué)習(xí)C/OS-II凡從事嵌入式系統(tǒng)開發(fā)工作的人,必須對嵌入式操作系統(tǒng)有足夠的了解。對于初學(xué)者,從C/OS-II開始是個明智的選擇。C/OS-II麻雀雖小,卻五臟基本全(它是個微內(nèi)核)??梢詫W(xué)習(xí)實時系統(tǒng)的一些編程技巧??梢园言趯W(xué)校中學(xué)到的操作系統(tǒng)抽象概念具體化。具有很強的實用性。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)應(yīng)用的好例子。2如何學(xué)習(xí)C/OS-IIC/OS-II大部分源代碼用c語言所寫,少部分和具體硬件相關(guān)的,用匯編語言所寫。必須熟悉c語言語法。數(shù)組函數(shù)結(jié)構(gòu)指針預(yù)處理實踐,實踐,再實踐!必須結(jié)合理論,閱讀源代碼并調(diào)試相關(guān)代碼。3數(shù)據(jù)類型與

2、運算符(選講-C語言復(fù)習(xí))宏定義:用一個指定的標(biāo)識符來代表一個字符串。 #define 標(biāo)識符 字符串宏定義的基本思想:一次定義,多次使用。優(yōu)點可以用簡短的標(biāo)識符來代替長的數(shù)據(jù),減少需要輸入的字符數(shù);用易于理解的標(biāo)識符來代替那些不太好記的具體的數(shù)據(jù),便于程序的理解和維護;有利于程序的修改和升級,當(dāng)這個數(shù)據(jù)需要修改時,只需改動宏定義之處即可。例如:#define PI 3.1415926 指定用標(biāo)識符PI來代替“3.1415926”這個字符串,在編譯預(yù)處理時,將程序中出現(xiàn)的所有PI都用“3.1415926”代替。4if ( myMoney 80.0 ) myShoes +; myMoney =

3、myMoney 80.0;#define COST_OF_SHOES 80.0if(myMoney COST_OF_SHOES) myShoes +; myMoney = myMoney COST_OF_SHOES;不用此法一次定義多次使用數(shù)據(jù)類型與運算符(選講- C語言復(fù)習(xí))5數(shù)據(jù)類型與運算符(選講- C語言復(fù)習(xí))將變量聲明為常量有時希望在運行過程中,某些變量的值保存不變。以變量的形式來定義的一個量,且使用修飾符const來聲明變量。例如:const int x = 1。算術(shù)運算整數(shù)的算術(shù)運算 最快帶有硬件支持的浮點運算 較慢用軟件來實現(xiàn)的浮點運算 非常慢, sin, log, sqrt,

4、etc快慢6數(shù)據(jù)類型與運算符(選講- C語言復(fù)習(xí))算術(shù)運算的結(jié)論:盡量使用整數(shù)(char、short、int和long)的加法和減法;如果沒有硬件支持,盡量避免使用乘法;盡量避免使用除法;如果沒有硬件支持,盡量避免使用浮點數(shù);數(shù)學(xué)庫函數(shù)使用得越少越好。7數(shù)據(jù)類型與運算符(選講- C語言復(fù)習(xí))位運算與操作: &或操作: |異或操作: 取反操作: 右移操作: 左移操作: 舉例:a |= 0 x4b &= 0 x4 c &= (1 3)d = (1 = 2 / 把第2位設(shè)置為1 / 把第2位設(shè)置為0 / 把第3位設(shè)置為0 / 把第5位反轉(zhuǎn)/ 把 e 除以48數(shù)據(jù)類型與運算符(選講- C語言復(fù)習(xí))in

5、t x, num = 99, count = 0;x = num;while(x) count +; x = x & (x 1);printf(result: %d, count);result: 4程序舉例:9函數(shù)原型main ( ) 函數(shù)調(diào)用 函數(shù)定義函數(shù)的使用模式聲明該函數(shù)定義一個函數(shù)使用該函數(shù)函數(shù)(選講- C語言復(fù)習(xí))10操作系統(tǒng)代碼棧幀2棧幀1全局變量內(nèi)存分布狀況全局變量區(qū)域靜態(tài)分配棧自動分配堆動態(tài)分配函數(shù)(選講- C語言復(fù)習(xí))11int z;void main( ) int x, y; x = 1; y = 2; z = x + y;main( ) z = 0全局變量區(qū)域棧幀(ma

6、in)x = y =程序123主函數(shù)的執(zhí)行過程(選講- C語言復(fù)習(xí))程序代碼在內(nèi)存中的分布12函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))控制流 程序當(dāng)前執(zhí)行位置的流向;數(shù)據(jù)流 函數(shù)調(diào)用發(fā)生及結(jié)束時,數(shù)據(jù)在函數(shù)之間流轉(zhuǎn)的過程。當(dāng)一個函數(shù)被調(diào)用時:在內(nèi)存的棧空間當(dāng)中為其分配一個棧幀,用來存放該函數(shù)的形參和局部變量;把實參變量的值復(fù)制到相應(yīng)的形參變量;控制轉(zhuǎn)移到該函數(shù)的起始位置;該函數(shù)開始執(zhí)行;控制流和返回值返回到函數(shù)調(diào)用點。13void main( ) double x, y, z; y = 6.0; x = Area( y / 3.0 ); . z = 3.4 * Area(7.88); ./* 給定半

7、徑,計算一個圓的面積 */double Area(double r) return(3.14 * r * r);控制流的變化函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))14int Times2(int value);main ( ) int number; printf(“請輸入一個整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))棧幀的分配15int Times2(int value)

8、;main ( ) int number; printf(“請輸入一個整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3Times2valueTimes2也得到一個棧幀,它的參數(shù)看成局部變量函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))棧幀的分配16int Times2(int value);main ( ) int number; printf(“請輸入一個整數(shù):”); scanf(“%d”, &number); pri

9、ntf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3Times2value函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))棧幀的分配3“值傳遞”, 把實參的值傳給形參。17int Times2(int value);main ( ) int number; printf(“請輸入一個整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);m

10、ain的棧幀number3函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))棧幀的分配Times2value3把Times2的棧幀疊在主函數(shù)的棧幀之上,表示在執(zhí)行Times2函數(shù)時,主函數(shù)中的變量是不可見的。18int Times2(int value);main ( ) int number; printf(“請輸入一個整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3函數(shù)調(diào)用過程(選講- C語言復(fù)習(xí))棧幀的分配Times2

11、value36Times2函數(shù)的返回值被放在函數(shù)的調(diào)用位置上,然后,分配給Times2函數(shù)的堆棧區(qū)域被釋放。19/* 全局變量,固定地址,其他源文件可見 */int global_static;/* 靜態(tài)全局變量,固定地址,但只在本文件中可見 */static int file_static;/* 函數(shù)參數(shù):位于棧幀當(dāng)中,動態(tài)創(chuàng)建,動態(tài)釋放 */int foo ( int auto_param ) /*靜態(tài)局部變量,固定地址,只在本函數(shù)中可見 */ static int func_static; /* 普通局部變量,位于棧幀當(dāng)中,只在本函數(shù)可見 */ int auto_i, auto_a10;

12、 /* 動態(tài)申請的內(nèi)存空間,位于堆當(dāng)中 */ double *auto_d = malloc(sizeof(double)*5); return auto_i;變量的存儲與作用域(選講- C語言復(fù)習(xí))20可重入函數(shù)(選講- C語言復(fù)習(xí))可以被一個以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞可重入型函數(shù)任何時候都可被中斷,一段時間以后又可以運行,而相應(yīng)數(shù)據(jù)不會丟失??芍厝胄秃瘮?shù)只使用局部變量,即變量保存在CPU寄存器或棧中。可重入函數(shù)舉例:void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; 21不可重入函數(shù)(選講- C語言

13、復(fù)習(xí))不可重入函數(shù)舉例:int temp;void swap ( int *x, int *y ) temp = *x; *x = *y; *y = temp; 22本章提要1324任務(wù)的要素計算機操作系統(tǒng)的基本概念操作系統(tǒng)中常用的數(shù)據(jù)結(jié)構(gòu)并發(fā)操作系統(tǒng)的概念235C/OS-II的任務(wù)管理(任務(wù)調(diào)度)6C/OS-II的中斷和時鐘7C/OS-II的任務(wù)的同步與通信8C/OS-II的移值1計算機操作系統(tǒng)的基本概念24操作系統(tǒng)是一種為應(yīng)用程序提供服務(wù)的系統(tǒng)軟件,是一個完整計算機系統(tǒng)的有機組成部分。從層次來看,操作系統(tǒng)位于計算機硬件之上,應(yīng)用軟件之下。所以也把它叫做應(yīng)用軟件的運行平臺。什么是計算機操作系

14、統(tǒng)(Operating System,OS)25它在計算機應(yīng)用程序與計算機硬件系統(tǒng)之間,屏蔽了計算機硬件工作的一些細節(jié),并對系統(tǒng)中的資源進行有效的管理。通過提供函數(shù)(應(yīng)用程序接口(API),從而使應(yīng)用程序的設(shè)計人員得以在一個友好的平臺上進行應(yīng)用程序的設(shè)計和開發(fā),大大地提高了應(yīng)用程序的開發(fā)效率。 計算機操作系統(tǒng)的作用從用戶的角度來看,它就是一大堆函數(shù)(API和系統(tǒng)函數(shù)),用戶可以調(diào)用(普通調(diào)用或系統(tǒng)調(diào)用)它們來對系統(tǒng)資源進行操作。 API(Application Programming Intereface)計算機硬件用匯編語言編寫的硬件抽象層高級語言的接口應(yīng)用軟件操作系統(tǒng)26操作系統(tǒng)計算機操作

15、系統(tǒng)的功能處理器的管理存儲管理網(wǎng)絡(luò)和通信的管理I/O設(shè)備管理文件管理任務(wù)管理 總之,需要一大堆表27本章提要2操作系統(tǒng)中常用的數(shù)據(jù)結(jié)構(gòu)28OS中常用的數(shù)據(jù)結(jié)構(gòu)(數(shù)組)數(shù)組同一數(shù)據(jù)類型數(shù)據(jù)的集合;占用連續(xù)內(nèi)存空間;其中的所有元素名稱都相同,但每個元素都有一個編號;元素名去掉編號(下標(biāo)),得到的是數(shù)組名,數(shù)組名是個指針。int a10a0a1a2a3a9aa+1使用上的特點:分類存放。檢索速度快且恒定;缺點:占用連續(xù)空間大。a+2a+3a+9應(yīng)用:記錄同類事物的表29OS中常用的數(shù)據(jù)結(jié)構(gòu)(位圖)位圖是數(shù)組的一種特殊應(yīng)用a10 (可以記錄80個事物的狀態(tài))a0a1a2a3a9aa+1a+2a+3a+

16、9應(yīng)用:登記表1/0D7 D6 D5 D4 D3 D2 D1 D030不同數(shù)據(jù)類型數(shù)據(jù)的集合;占用連續(xù)內(nèi)存空間;struct Student int age; char *name; char sex;使用上的特點:不分類存放,但用來描述同一事物;檢索速度快且恒定;應(yīng)用:通訊錄中的一條記錄、工具箱等等OS中常用的數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu))31next next 兩個元素的鏈表struct Student Student *next int age; char*name; char sex;同數(shù)據(jù)類型數(shù)據(jù)的集合。不占用連續(xù)內(nèi)存空間。使用上的特點:分類存放,但空間上不連續(xù)(不需要大量的連續(xù)存儲空間);檢索速

17、度慢,且耗費的時間不固定;應(yīng)用:存放大量的較大的表,類似檔案柜OS中常用的數(shù)據(jù)結(jié)構(gòu)(鏈表)32按照先進先出的規(guī)則組織的數(shù)據(jù)結(jié)構(gòu),可以用數(shù)組,也可以用鏈表來實現(xiàn)。主要用于對象的排隊OS中常用的數(shù)據(jù)結(jié)構(gòu)(隊列)33按照先進后出的規(guī)則組織的數(shù)據(jù)結(jié)構(gòu),主要用數(shù)組來實現(xiàn)。主要用于程序模塊的嵌套運行。OS中常用的數(shù)據(jù)結(jié)構(gòu)(堆棧)34本章提要3并發(fā)操作系統(tǒng)的概念35什么是多任務(wù)系統(tǒng)簡單地說,就是能用一個處理器并發(fā)(注意,不是同時! )地運行多個程序的計算機管理系統(tǒng)。并發(fā):由同一個處理器輪換地運行多個程序?;蛘哒f是由多個程序輪流占用處理器這個資源。且在占用這個資源期間,并不一定能夠把程序運行完畢。并發(fā)過程示意

18、圖處理器如何進行程序的切換?36程序的切換(兩句話)處理器對PC最忠誠,PC讓它干啥,它就干啥。PC是個指路器,它指向哪兒,處理器就去哪兒。由此,哪個程序占有了PC,哪個程序就占有了處理器。 = PC深刻地理解PC是理解系統(tǒng)進行程序切換動作的關(guān)鍵。37所謂切換就是:PC 目標(biāo)地址如何操作PC指令:不同的計算機類型的指令是不同的。數(shù)據(jù)傳送指令子程序返回指令(由堆棧彈出)中斷服務(wù)程序返回指令(由堆棧彈出)38小結(jié)系統(tǒng)是通過把待運行程序的地址賦予程序計數(shù)器PC來實現(xiàn)程序的切換的。39任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運行時與處理器之間的關(guān)系處理器通過兩個指針寄存器(PC和SP)來與任務(wù)代碼和任務(wù)

19、堆棧建立聯(lián)系并運行它寄存器組程序運行環(huán)境運行環(huán)境包括了兩部分:處理器中的運行環(huán)境和內(nèi)存中的運行環(huán)境40任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時的問題任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)代碼任務(wù)堆棧內(nèi)存?當(dāng)有多個任務(wù)時,處理器中的運行環(huán)境應(yīng)該怎么辦?寄存器組程序運行環(huán)境41程序 虛擬處理器PCSP 虛擬處理器PCSP 虛擬處理器PCSP 虛擬處理器PCSP多任務(wù)時任務(wù)與處理器之間關(guān)系的處理程序在內(nèi)存中為每個任務(wù)創(chuàng)建一個虛擬的處理器(處理器部分的運行環(huán)境由操作系統(tǒng)的調(diào)度器按某種規(guī)則來進行這兩個復(fù)制工作復(fù)制當(dāng)需要運行某個任務(wù)時就把該任務(wù)的虛擬處理器復(fù)制到實際處理器中復(fù)制當(dāng)需要中止當(dāng)前任務(wù)時,則把任務(wù)對應(yīng)的虛擬處理器復(fù)制到內(nèi)存復(fù)制再把另一個需要運行的任務(wù)的虛擬處理器復(fù)制到實際處理器中寄存器組寄存器組也就是說,任務(wù)的切換是任務(wù)運行環(huán)境的切換。42虛擬處理器虛擬處理器應(yīng)該存儲的主要信息:1。程序的斷點地址(PC)2。任務(wù)堆棧指針(SP)3。程序狀態(tài)字寄存器(PSW)4。通用寄存器內(nèi)容5。函數(shù)調(diào)用信息(已存在于堆棧)另外再用一個數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆棧指針(SP),這個數(shù)據(jù)結(jié)構(gòu)叫做任務(wù)控制塊,它除了保存任務(wù)堆棧指針之外還要負(fù)責(zé)保存任務(wù)其他信息。這些內(nèi)容通常保存在任務(wù)堆棧中,這些內(nèi)容也常叫做任務(wù)的上下文。任務(wù)控制塊是由

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論