




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、4C H A P T E Rc/os-II嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核分析1為什么要學(xué)習(xí)C/OS-II凡從事嵌入式系統(tǒng)開(kāi)發(fā)工作的人,必須對(duì)嵌入式操作系統(tǒng)有足夠的了解。對(duì)于初學(xué)者,從C/OS-II開(kāi)始是個(gè)明智的選擇。C/OS-II麻雀雖小,卻五臟基本全(它是個(gè)微內(nèi)核)??梢詫W(xué)習(xí)實(shí)時(shí)系統(tǒng)的一些編程技巧??梢园言趯W(xué)校中學(xué)到的操作系統(tǒng)抽象概念具體化。具有很強(qiáng)的實(shí)用性。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)應(yīng)用的好例子。2如何學(xué)習(xí)C/OS-IIC/OS-II大部分源代碼用c語(yǔ)言所寫(xiě),少部分和具體硬件相關(guān)的,用匯編語(yǔ)言所寫(xiě)。必須熟悉c語(yǔ)言語(yǔ)法。數(shù)組函數(shù)結(jié)構(gòu)指針預(yù)處理實(shí)踐,實(shí)踐,再實(shí)踐!必須結(jié)合理論,閱讀源代碼并調(diào)試相關(guān)代碼。3數(shù)據(jù)類型與
2、運(yùn)算符(選講-C語(yǔ)言復(fù)習(xí))宏定義:用一個(gè)指定的標(biāo)識(shí)符來(lái)代表一個(gè)字符串。 #define 標(biāo)識(shí)符 字符串宏定義的基本思想:一次定義,多次使用。優(yōu)點(diǎn)可以用簡(jiǎn)短的標(biāo)識(shí)符來(lái)代替長(zhǎng)的數(shù)據(jù),減少需要輸入的字符數(shù);用易于理解的標(biāo)識(shí)符來(lái)代替那些不太好記的具體的數(shù)據(jù),便于程序的理解和維護(hù);有利于程序的修改和升級(jí),當(dāng)這個(gè)數(shù)據(jù)需要修改時(shí),只需改動(dòng)宏定義之處即可。例如:#define PI 3.1415926 指定用標(biāo)識(shí)符PI來(lái)代替“3.1415926”這個(gè)字符串,在編譯預(yù)處理時(shí),將程序中出現(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ù)類型與運(yùn)算符(選講- C語(yǔ)言復(fù)習(xí))5數(shù)據(jù)類型與運(yùn)算符(選講- C語(yǔ)言復(fù)習(xí))將變量聲明為常量有時(shí)希望在運(yùn)行過(guò)程中,某些變量的值保存不變。以變量的形式來(lái)定義的一個(gè)量,且使用修飾符const來(lái)聲明變量。例如:const int x = 1。算術(shù)運(yùn)算整數(shù)的算術(shù)運(yùn)算 最快帶有硬件支持的浮點(diǎn)運(yùn)算 較慢用軟件來(lái)實(shí)現(xiàn)的浮點(diǎn)運(yùn)算 非常慢, sin, log, sqrt,
4、etc快慢6數(shù)據(jù)類型與運(yùn)算符(選講- C語(yǔ)言復(fù)習(xí))算術(shù)運(yùn)算的結(jié)論:盡量使用整數(shù)(char、short、int和long)的加法和減法;如果沒(méi)有硬件支持,盡量避免使用乘法;盡量避免使用除法;如果沒(méi)有硬件支持,盡量避免使用浮點(diǎn)數(shù);數(shù)學(xué)庫(kù)函數(shù)使用得越少越好。7數(shù)據(jù)類型與運(yùn)算符(選講- C語(yǔ)言復(fù)習(xí))位運(yùn)算與操作: &或操作: |異或操作: 取反操作: 右移操作: 左移操作: 舉例: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ù)類型與運(yùn)算符(選講- C語(yǔ)言復(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ù)定義一個(gè)函數(shù)使用該函數(shù)函數(shù)(選講- C語(yǔ)言復(fù)習(xí))10操作系統(tǒng)代碼棧幀2棧幀1全局變量?jī)?nèi)存分布狀況全局變量區(qū)域靜態(tài)分配棧自動(dòng)分配堆動(dòng)態(tài)分配函數(shù)(選講- C語(yǔ)言復(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í)行過(guò)程(選講- C語(yǔ)言復(fù)習(xí))程序代碼在內(nèi)存中的分布12函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))控制流 程序當(dāng)前執(zhí)行位置的流向;數(shù)據(jù)流 函數(shù)調(diào)用發(fā)生及結(jié)束時(shí),數(shù)據(jù)在函數(shù)之間流轉(zhuǎn)的過(guò)程。當(dāng)一個(gè)函數(shù)被調(diào)用時(shí):在內(nèi)存的??臻g當(dāng)中為其分配一個(gè)棧幀,用來(lái)存放該函數(shù)的形參和局部變量;把實(shí)參變量的值復(fù)制到相應(yīng)的形參變量;控制轉(zhuǎn)移到該函數(shù)的起始位置;該函數(shù)開(kāi)始執(zhí)行;控制流和返回值返回到函數(shù)調(diào)用點(diǎn)。13void main( ) double x, y, z; y = 6.0; x = Area( y / 3.0 ); . z = 3.4 * Area(7.88); ./* 給定半
7、徑,計(jì)算一個(gè)圓的面積 */double Area(double r) return(3.14 * r * r);控制流的變化函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))14int Times2(int value);main ( ) int number; printf(“請(qǐng)輸入一個(gè)整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))棧幀的分配15int Times2(int value)
8、;main ( ) int number; printf(“請(qǐng)輸入一個(gè)整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3Times2valueTimes2也得到一個(gè)棧幀,它的參數(shù)看成局部變量函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))棧幀的分配16int Times2(int value);main ( ) int number; printf(“請(qǐng)輸入一個(gè)整數(shù):”); scanf(“%d”, &number); pri
9、ntf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3Times2value函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))棧幀的分配3“值傳遞”, 把實(shí)參的值傳給形參。17int Times2(int value);main ( ) int number; printf(“請(qǐng)輸入一個(gè)整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);m
10、ain的棧幀number3函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))棧幀的分配Times2value3把Times2的棧幀疊在主函數(shù)的棧幀之上,表示在執(zhí)行Times2函數(shù)時(shí),主函數(shù)中的變量是不可見(jiàn)的。18int Times2(int value);main ( ) int number; printf(“請(qǐng)輸入一個(gè)整數(shù):”); scanf(“%d”, &number); printf(“該數(shù)的兩倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的棧幀number3函數(shù)調(diào)用過(guò)程(選講- C語(yǔ)言復(fù)習(xí))棧幀的分配Times2
11、value36Times2函數(shù)的返回值被放在函數(shù)的調(diào)用位置上,然后,分配給Times2函數(shù)的堆棧區(qū)域被釋放。19/* 全局變量,固定地址,其他源文件可見(jiàn) */int global_static;/* 靜態(tài)全局變量,固定地址,但只在本文件中可見(jiàn) */static int file_static;/* 函數(shù)參數(shù):位于棧幀當(dāng)中,動(dòng)態(tài)創(chuàng)建,動(dòng)態(tài)釋放 */int foo ( int auto_param ) /*靜態(tài)局部變量,固定地址,只在本函數(shù)中可見(jiàn) */ static int func_static; /* 普通局部變量,位于棧幀當(dāng)中,只在本函數(shù)可見(jiàn) */ int auto_i, auto_a10;
12、 /* 動(dòng)態(tài)申請(qǐng)的內(nèi)存空間,位于堆當(dāng)中 */ double *auto_d = malloc(sizeof(double)*5); return auto_i;變量的存儲(chǔ)與作用域(選講- C語(yǔ)言復(fù)習(xí))20可重入函數(shù)(選講- C語(yǔ)言復(fù)習(xí))可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞可重入型函數(shù)任何時(shí)候都可被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會(huì)丟失??芍厝胄秃瘮?shù)只使用局部變量,即變量保存在CPU寄存器或棧中??芍厝牒瘮?shù)舉例:void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; 21不可重入函數(shù)(選講- C語(yǔ)言
13、復(fù)習(xí))不可重入函數(shù)舉例:int temp;void swap ( int *x, int *y ) temp = *x; *x = *y; *y = temp; 22本章提要1324任務(wù)的要素計(jì)算機(jī)操作系統(tǒng)的基本概念操作系統(tǒng)中常用的數(shù)據(jù)結(jié)構(gòu)并發(fā)操作系統(tǒng)的概念235C/OS-II的任務(wù)管理(任務(wù)調(diào)度)6C/OS-II的中斷和時(shí)鐘7C/OS-II的任務(wù)的同步與通信8C/OS-II的移值1計(jì)算機(jī)操作系統(tǒng)的基本概念24操作系統(tǒng)是一種為應(yīng)用程序提供服務(wù)的系統(tǒng)軟件,是一個(gè)完整計(jì)算機(jī)系統(tǒng)的有機(jī)組成部分。從層次來(lái)看,操作系統(tǒng)位于計(jì)算機(jī)硬件之上,應(yīng)用軟件之下。所以也把它叫做應(yīng)用軟件的運(yùn)行平臺(tái)。什么是計(jì)算機(jī)操作系
14、統(tǒng)(Operating System,OS)25它在計(jì)算機(jī)應(yīng)用程序與計(jì)算機(jī)硬件系統(tǒng)之間,屏蔽了計(jì)算機(jī)硬件工作的一些細(xì)節(jié),并對(duì)系統(tǒng)中的資源進(jìn)行有效的管理。通過(guò)提供函數(shù)(應(yīng)用程序接口(API),從而使應(yīng)用程序的設(shè)計(jì)人員得以在一個(gè)友好的平臺(tái)上進(jìn)行應(yīng)用程序的設(shè)計(jì)和開(kāi)發(fā),大大地提高了應(yīng)用程序的開(kāi)發(fā)效率。 計(jì)算機(jī)操作系統(tǒng)的作用從用戶的角度來(lái)看,它就是一大堆函數(shù)(API和系統(tǒng)函數(shù)),用戶可以調(diào)用(普通調(diào)用或系統(tǒng)調(diào)用)它們來(lái)對(duì)系統(tǒng)資源進(jìn)行操作。 API(Application Programming Intereface)計(jì)算機(jī)硬件用匯編語(yǔ)言編寫(xiě)的硬件抽象層高級(jí)語(yǔ)言的接口應(yīng)用軟件操作系統(tǒng)26操作系統(tǒng)計(jì)算機(jī)操作
15、系統(tǒng)的功能處理器的管理存儲(chǔ)管理網(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)存空間;其中的所有元素名稱都相同,但每個(gè)元素都有一個(gè)編號(hào);元素名去掉編號(hào)(下標(biāo)),得到的是數(shù)組名,數(shù)組名是個(gè)指針。int a10a0a1a2a3a9aa+1使用上的特點(diǎn):分類存放。檢索速度快且恒定;缺點(diǎn):占用連續(xù)空間大。a+2a+3a+9應(yīng)用:記錄同類事物的表29OS中常用的數(shù)據(jù)結(jié)構(gòu)(位圖)位圖是數(shù)組的一種特殊應(yīng)用a10 (可以記錄80個(gè)事物的狀態(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;使用上的特點(diǎn):不分類存放,但用來(lái)描述同一事物;檢索速度快且恒定;應(yīng)用:通訊錄中的一條記錄、工具箱等等OS中常用的數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu))31next next 兩個(gè)元素的鏈表struct Student Student *next int age; char*name; char sex;同數(shù)據(jù)類型數(shù)據(jù)的集合。不占用連續(xù)內(nèi)存空間。使用上的特點(diǎn):分類存放,但空間上不連續(xù)(不需要大量的連續(xù)存儲(chǔ)空間);檢索速
17、度慢,且耗費(fèi)的時(shí)間不固定;應(yīng)用:存放大量的較大的表,類似檔案柜OS中常用的數(shù)據(jù)結(jié)構(gòu)(鏈表)32按照先進(jìn)先出的規(guī)則組織的數(shù)據(jù)結(jié)構(gòu),可以用數(shù)組,也可以用鏈表來(lái)實(shí)現(xiàn)。主要用于對(duì)象的排隊(duì)OS中常用的數(shù)據(jù)結(jié)構(gòu)(隊(duì)列)33按照先進(jìn)后出的規(guī)則組織的數(shù)據(jù)結(jié)構(gòu),主要用數(shù)組來(lái)實(shí)現(xiàn)。主要用于程序模塊的嵌套運(yùn)行。OS中常用的數(shù)據(jù)結(jié)構(gòu)(堆棧)34本章提要3并發(fā)操作系統(tǒng)的概念35什么是多任務(wù)系統(tǒng)簡(jiǎn)單地說(shuō),就是能用一個(gè)處理器并發(fā)(注意,不是同時(shí)! )地運(yùn)行多個(gè)程序的計(jì)算機(jī)管理系統(tǒng)。并發(fā):由同一個(gè)處理器輪換地運(yùn)行多個(gè)程序。或者說(shuō)是由多個(gè)程序輪流占用處理器這個(gè)資源。且在占用這個(gè)資源期間,并不一定能夠把程序運(yùn)行完畢。并發(fā)過(guò)程示意
18、圖處理器如何進(jìn)行程序的切換?36程序的切換(兩句話)處理器對(duì)PC最忠誠(chéng),PC讓它干啥,它就干啥。PC是個(gè)指路器,它指向哪兒,處理器就去哪兒。由此,哪個(gè)程序占有了PC,哪個(gè)程序就占有了處理器。 = PC深刻地理解PC是理解系統(tǒng)進(jìn)行程序切換動(dòng)作的關(guān)鍵。37所謂切換就是:PC 目標(biāo)地址如何操作PC指令:不同的計(jì)算機(jī)類型的指令是不同的。數(shù)據(jù)傳送指令子程序返回指令(由堆棧彈出)中斷服務(wù)程序返回指令(由堆棧彈出)38小結(jié)系統(tǒng)是通過(guò)把待運(yùn)行程序的地址賦予程序計(jì)數(shù)器PC來(lái)實(shí)現(xiàn)程序的切換的。39任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP任務(wù)運(yùn)行時(shí)與處理器之間的關(guān)系處理器通過(guò)兩個(gè)指針寄存器(PC和SP)來(lái)與任務(wù)代碼和任務(wù)
19、堆棧建立聯(lián)系并運(yùn)行它寄存器組程序運(yùn)行環(huán)境運(yùn)行環(huán)境包括了兩部分:處理器中的運(yùn)行環(huán)境和內(nèi)存中的運(yùn)行環(huán)境40任務(wù)代碼任務(wù)堆棧內(nèi)存處理器PCSP多任務(wù)時(shí)的問(wèn)題任務(wù)代碼任務(wù)堆棧內(nèi)存任務(wù)代碼任務(wù)堆棧內(nèi)存?當(dāng)有多個(gè)任務(wù)時(shí),處理器中的運(yùn)行環(huán)境應(yīng)該怎么辦?寄存器組程序運(yùn)行環(huán)境41程序 虛擬處理器PCSP 虛擬處理器PCSP 虛擬處理器PCSP 虛擬處理器PCSP多任務(wù)時(shí)任務(wù)與處理器之間關(guān)系的處理程序在內(nèi)存中為每個(gè)任務(wù)創(chuàng)建一個(gè)虛擬的處理器(處理器部分的運(yùn)行環(huán)境由操作系統(tǒng)的調(diào)度器按某種規(guī)則來(lái)進(jìn)行這兩個(gè)復(fù)制工作復(fù)制當(dāng)需要運(yùn)行某個(gè)任務(wù)時(shí)就把該任務(wù)的虛擬處理器復(fù)制到實(shí)際處理器中復(fù)制當(dāng)需要中止當(dāng)前任務(wù)時(shí),則把任務(wù)對(duì)應(yīng)的虛擬處理器復(fù)制到內(nèi)存復(fù)制再把另一個(gè)需要運(yùn)行的任務(wù)的虛擬處理器復(fù)制到實(shí)際處理器中寄存器組寄存器組也就是說(shuō),任務(wù)的切換是任務(wù)運(yùn)行環(huán)境的切換。42虛擬處理器虛擬處理器應(yīng)該存儲(chǔ)的主要信息:1。程序的斷點(diǎn)地址(PC)2。任務(wù)堆棧指針(SP)3。程序狀態(tài)字寄存器(PSW)4。通用寄存器內(nèi)容5。函數(shù)調(diào)用信息(已存在于堆棧)另外再用一個(gè)數(shù)據(jù)結(jié)構(gòu)保存任務(wù)堆棧指針(SP),這個(gè)數(shù)據(jù)結(jié)構(gòu)叫做任務(wù)控制塊,它除了保存任務(wù)堆棧指針之外還要負(fù)責(zé)保存任務(wù)其他信息。這些內(nèi)容通常保存在任務(wù)堆棧中,這些內(nèi)容也常叫做任務(wù)的上下文。任務(wù)控制塊是由
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園心理輔導(dǎo)工作的探索計(jì)劃
- 提升市場(chǎng)競(jìng)爭(zhēng)力的行動(dòng)方案計(jì)劃
- 2025年氣體摻混設(shè)備項(xiàng)目合作計(jì)劃書(shū)
- 2025年太陽(yáng)能電池生產(chǎn)專用設(shè)備合作協(xié)議書(shū)
- 2025年CRO服務(wù)項(xiàng)目發(fā)展計(jì)劃
- 2025年儲(chǔ)冷、蓄熱裝置項(xiàng)目合作計(jì)劃書(shū)
- 2025年奧硝唑藥物項(xiàng)目發(fā)展計(jì)劃
- 2025年轉(zhuǎn)基因抗蟲(chóng)樹(shù)木新品種合作協(xié)議書(shū)
- 智能交通系統(tǒng)建設(shè)運(yùn)營(yíng)合同
- 工程咨詢與設(shè)計(jì)服務(wù)框架協(xié)議
- 液化氣站隱患排查治理全套資料
- 有限空間作業(yè)審批表
- 內(nèi)地居民前往香港或者澳門定居申請(qǐng)表
- 學(xué)前教育大專畢業(yè)論文3000字
- 注塑領(lǐng)班簡(jiǎn)歷樣板
- 骨骼肌-人體解剖學(xué)-運(yùn)動(dòng)系統(tǒng)
- 高中體育與健康-足球踢墻式“二過(guò)一”戰(zhàn)術(shù)教學(xué)課件設(shè)計(jì)
- 兒童財(cái)商養(yǎng)成教育講座PPT
- 前庭性偏頭痛診斷
- 三下《動(dòng)物的一生》教材解讀
- 大學(xué)學(xué)院學(xué)生獎(jiǎng)助資金及相關(guān)經(jīng)費(fèi)發(fā)放管理暫行辦法
評(píng)論
0/150
提交評(píng)論