版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)復(fù)習(xí)考試說(shuō)明 時(shí)間:2015-12-31 地點(diǎn):計(jì)算機(jī) 教三301,軟件 教三302 閉卷 題型 填空:約40% 選擇:約20% 判斷:約10% 簡(jiǎn)答:約30%嵌入式系統(tǒng)的定義 “以應(yīng)用為中心,計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,以適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)?!鼻度胧轿⑻幚砥鞣诸惽度胧讲僮飨到y(tǒng)的發(fā)展階段1、無(wú)操作系統(tǒng)的嵌入算法階段2、專用嵌入式實(shí)時(shí)操作系統(tǒng)3、通用嵌入式實(shí)時(shí)操作系統(tǒng)4、基于internet的嵌入式系統(tǒng)嵌入式開(kāi)發(fā)環(huán)境(交叉開(kāi)發(fā)環(huán)境)嵌入式系統(tǒng)通常是一個(gè)資源受限的系統(tǒng),其開(kāi)發(fā)需要交叉編譯和在線調(diào)試的開(kāi)發(fā)環(huán)境,主要包括: 宿主機(jī) 目標(biāo)
2、機(jī)(評(píng)估電路板) 基于JTAG的ICD仿真器、或調(diào)試監(jiān)控軟件、或在線仿真器ICE 運(yùn)行于宿主機(jī)的交叉編譯器和鏈接器、以及開(kāi)發(fā)工具鏈或軟件開(kāi)發(fā)環(huán)境 嵌入式操作系統(tǒng)交叉開(kāi)發(fā)環(huán)境交叉開(kāi)發(fā)環(huán)境ARM公司提供的ADS和AXD ADS:Arm Developer Suite AXD:Arm eXtended Debugger仿真驅(qū)動(dòng)有兩種:ADP硬件仿真驅(qū)動(dòng)ARMUL軟件仿真驅(qū)動(dòng)H-JTAG第三方硬件仿真驅(qū)動(dòng)(周立功公司)ARM9處理器 ARM9TDMI的含義:T:支持16位壓縮指令集Thumb;D:支持片上Debug;M:內(nèi)嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn);Sa
3、msung公司的S3C2410即屬于該系列的處理器。 五級(jí)流水線(取指-譯碼-執(zhí)行-訪存-回寫),由此導(dǎo)致:ARM狀態(tài)下指令讀出的pc值是指令地址值加8個(gè)字節(jié);Thumb狀態(tài)下指令讀出的pc值是指令地址值加4個(gè)字節(jié)ARM 處理器支持的數(shù)據(jù)類型 字節(jié)(8位)-char,unsigned char 半字(16位)-short,unsigned short 字(32位)-int,unsigned int其中,字需要4字節(jié)對(duì)齊(地址的低兩位為0)、半字需要2字節(jié)對(duì)齊(地址的最低位為0)。 ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù):大端格式大端格式(big-endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而
4、字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。小端格式小端格式(little-endian):低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。s3c2410 cpu可通過(guò)軟件選擇大端或小端格式。地址增加24241A3C781A3C78小端模式大端模式字?jǐn)?shù)據(jù)0 x783C1A24的存儲(chǔ)格式如下 : ARM9TDMI 處理器有兩種工作狀態(tài)(對(duì)應(yīng)于2種指令集):uARM 狀態(tài)uThumb狀態(tài) ARM9TDMI 核的操作狀態(tài)可以通過(guò)BX指令在ARM狀態(tài)和Thumb狀態(tài)之間切換 ARMThumb LDR r0,=label+1 BX r0 ThumbARM LDR r0,=label BX r0 ARM
5、 ARM 處理器有處理器有7 7種工作模式種工作模式: :l用戶模式(usr)- 正常的程序執(zhí)行模式l快速中斷模式(fiq) - 支持高速數(shù)據(jù)傳輸或通道處理l中斷模式(irq) - 用于通用中斷處理l管理員模式(svc) - 操作系統(tǒng)的保護(hù)模式.l中止模式(abt) - 支持虛擬內(nèi)存和/或內(nèi)存保護(hù)l系統(tǒng)模式(sys) - 支持操作系統(tǒng)的特殊用戶模式(運(yùn)行操作系統(tǒng)任務(wù))l未定義模式(und) - 支持硬件協(xié)處理器的軟件仿真 除了用戶模式外,其他模式均可視為特權(quán)模式; Usr/Sys mode不是異常模式,沒(méi)有SPSR。在這2種模式中使用讀寫SPSR的指令時(shí),結(jié)果不可預(yù)知。 ARM狀態(tài)下的寄存器組
6、織n R0 R0 到到 R15 R15 可以直接訪問(wèn)可以直接訪問(wèn)n R0 R0 到到 R14 R14 是通用寄存器是通用寄存器n R13: R13: 堆棧指針堆棧指針 (sp) (sp) (通常通常) )u每種處理器模式都有單獨(dú)的堆棧每種處理器模式都有單獨(dú)的堆棧n R14: R14: 鏈接寄存器鏈接寄存器 (lr) (lr)n R15 R15 程序計(jì)數(shù)器程序計(jì)數(shù)器 (PC)(PC)n CPSR CPSR 當(dāng)前程序狀態(tài)寄存器當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模,包括代碼標(biāo)志狀態(tài)和當(dāng)前模式位式位n 5 5個(gè)個(gè)SPSRs-SPSRs-( (程序狀態(tài)保存寄存器程序狀態(tài)保存寄存器) ) 當(dāng)異常發(fā)
7、生時(shí)保存當(dāng)異常發(fā)生時(shí)保存CPSRCPSR狀態(tài)狀態(tài)程序狀態(tài)寄存器程序狀態(tài)寄存器N, Z, C and V 條件碼標(biāo)志 可以在處理器中作為數(shù)學(xué)和邏輯操作改變 可以被所有的指令測(cè)試,以決定指令是否被執(zhí)行 N : Negative. Z : Zero. C : Carry. V : oVerflowI and F 位是中斷禁止位,T位反映處理器的運(yùn)行狀態(tài)M0, M1, M2, M3 and M4 位是模式位 N, Z, C and V 條件碼標(biāo)志 可以在處理器中作為數(shù)學(xué)和邏輯操作改變 可以被所有的指令測(cè)試,以決定指令是否被執(zhí)行 N : Negative. Z : Zero. C : Carry. V
8、: oVerflow 注意借位的設(shè)置: 減法運(yùn)算發(fā)生借位時(shí)c=0,否則c=1 指令SBC,RSC的操作能感受到此種設(shè)置的影響 I and F 位是中斷禁止位 I=1禁止IRQ,I=0允許IRQ T位反映處理器的運(yùn)行狀態(tài) T=1指示Thumb狀態(tài),T=0指示ARM狀態(tài) 與BX指令有聯(lián)系禁止中斷:MRS R0,CPSR ;讀出ORR R0,R0,#0 xC0 ;修改MSR CPSR_c,R0 ;寫回開(kāi)放中斷:MRS R0,CPSRBIC R0,R0,#0 xC0MSR CPSR_c,R0ARM體系的異常 異常:由內(nèi)部或外部源產(chǎn)生并引起處理器處理的一個(gè)事件 異常向量表占據(jù)內(nèi)存最低端的32個(gè)字節(jié)(00
9、 x1F) 注意異常類型和處理器模式的關(guān)系地址地址異常異常進(jìn)入時(shí)的模式進(jìn)入時(shí)的模式進(jìn)入時(shí)進(jìn)入時(shí)I的狀態(tài)的狀態(tài)進(jìn)入時(shí)進(jìn)入時(shí)F的狀態(tài)的狀態(tài)0 x00000000復(fù)位管理禁止禁止0 x00000004未定義指令未定義IF0 x00000008軟件中斷異常管理禁止F0 x0000000C中止(預(yù)?。┲兄笽F0 x00000010中止(數(shù)據(jù))中止IF0 x00000014保留保留0 x00000018IRQ中斷禁止F0 x0000001CFIQ快速中斷禁止禁止注:表中的I和F表示不對(duì)該位有影響,保留原來(lái)的值。 ARM指令集和尋址方式理解: 幾乎所有指令都可條件執(zhí)行 指令寫法上的變化可以控制是否影響標(biāo)志位
10、 任何數(shù)據(jù)都要通過(guò)load/store指令(LDR,STR,LDM,STM)加載到寄存器中,方可進(jìn)行運(yùn)算處理無(wú) 條 件 執(zhí) 行 ( 指 令 默 認(rèn) 條 件 )操 作 碼條 件 碼助 記 符標(biāo) 志含 義操 作 碼條 件 碼助 記 符標(biāo) 志含 義00000001001000110100010101100111EQN EC S/H SC C /LOM IPLV SV CZ=1Z=0C =1C =0負(fù) 數(shù)正 數(shù) 或 零溢 出沒(méi) 有 溢 出N =1N =0V =1V =010001001101010111100110111101111C =1,Z=0H ILSG ELTG TLEA LN VC =0,Z
11、=1N =VN !=VZ=0,N =VZ=1,N !=V任 意任 意相 等不 相 等無(wú) 符 號(hào) 數(shù) 大 于 或 等 于無(wú) 符 號(hào) 數(shù) 小 于無(wú) 符 號(hào) 數(shù) 大 于無(wú) 符 號(hào) 數(shù) 小 于 或 等 于有 符 號(hào) 數(shù) 大 于 或 等 于有 符 號(hào) 數(shù) 小 于有 符 號(hào) 數(shù) 大 于有 符 號(hào) 數(shù) 小 于 或 等 于從 不 執(zhí) 行 ( 不 要 使 用 )C代碼:代碼:if(a b) a+;else b+;對(duì)應(yīng)的匯編代碼:對(duì)應(yīng)的匯編代碼:CMP R0,R1;R0與與R1比較比較ADDHI R0,R0,#1;若若R0R1,則,則R0=R0+1ADDLS R1,R1,#1;若若R0R1,則,則R1=R1+1示
12、例:示例:條件碼SWP指令操作圖解C語(yǔ)言代碼為:語(yǔ)言代碼為:int gcd (int a,int b) while (a!=b) if (ab) a=a-b; else b=b-a; return a; 對(duì)應(yīng)的對(duì)應(yīng)的ARM匯編代碼段。(代碼執(zhí)行匯編代碼段。(代碼執(zhí)行前前R0中存放中存放a,R1中存放中存放b;代碼執(zhí)行;代碼執(zhí)行后后R0中存放最大公約數(shù)。中存放最大公約數(shù)。gcd CMP R0,R1 ;比較比較a和和b的大小的大小 SUBGT R0,R0,R1 ;if(ab) a=a-b SUBLT R1,R1,R0 ;if(ba) b=b-a BNE gcd ;if(a!=b)跳轉(zhuǎn)到跳轉(zhuǎn)到gcd
13、繼續(xù)執(zhí)行繼續(xù)執(zhí)行 MOV PC,LR ;子程序結(jié)束,返回子程序結(jié)束,返回實(shí)現(xiàn)類似于實(shí)現(xiàn)類似于C語(yǔ)言中的語(yǔ)言中的if-else功能的代碼段。下例的功能的代碼段。下例的功能為求最大公約數(shù)。功能為求最大公約數(shù)。例:編寫一具有完整匯編格式的程序,實(shí)現(xiàn)冒泡法排序功能。設(shè)無(wú)符號(hào)字?jǐn)?shù)據(jù)存放在從0 x400004開(kāi)始的區(qū)域,字?jǐn)?shù)據(jù)的數(shù)目字存放在0 x400000中。AREA SORT,CODE,READONLYENTRYSTART MOV R0,#0 x400000 ldr r1,r0 ;counterLPSUBS R1,R1,#1BEQ EXITMOV R7,R1LDR R0,=0 x400004LP1LD
14、R R2,R0,#4LDR R3,R0CMP R2,R3 STRLO R3,R0, # -4STRLO R2,R0SUBS R7,R7,#1BNE LP1B LPEXITENDARMARM最小系統(tǒng)最小系統(tǒng) 嵌入式微處理器芯片自己是不能獨(dú)立工作的,需要嵌入式微處理器芯片自己是不能獨(dú)立工作的,需要一些必要的外圍元器件給它提供基本的工作條件。一些必要的外圍元器件給它提供基本的工作條件。最小系統(tǒng)結(jié)構(gòu)框圖最小系統(tǒng)結(jié)構(gòu)框圖S3C2410晶振系統(tǒng)擴(kuò)展接口電源復(fù)位電路串行接口JTAG接口Flash存儲(chǔ)器SDRAM 微處理器:S3C2410是系統(tǒng)工作和控制中心; 電源電路:為S3C2410核心部分提供所需的1.
15、80V工作電壓,為部分外圍芯片提供3.3V的工作電壓; 晶振電路:為微處理器及其他電路提供工作時(shí)鐘,及系統(tǒng)中S3C2410芯片使用12MHZ及32.768KHz無(wú)源晶振;Flash存儲(chǔ)器:存放嵌入式操作系統(tǒng)、用戶應(yīng)用程序或者其他在系統(tǒng)掉電后需要保存的用戶數(shù)據(jù)等;SDRAM:作為系統(tǒng)運(yùn)行時(shí)的主要區(qū)域,系統(tǒng)及用戶數(shù)據(jù)、堆棧均位于該存儲(chǔ)器中;串行接口:用于系統(tǒng)與其他應(yīng)用系統(tǒng)的短距離雙向串行通信和構(gòu)建交叉編譯環(huán)境; JTAG接口:對(duì)芯片內(nèi)部所有部件進(jìn)行訪問(wèn),通過(guò)該接口對(duì)系統(tǒng)進(jìn)行調(diào)試、編程等;系統(tǒng)總線擴(kuò)展:引出地址總線、數(shù)據(jù)總線和必須的控制總線,便于用戶根據(jù)自身的特定需求,擴(kuò)展外圍電路。2022-4-1
16、329S3C2410的存儲(chǔ)分配的存儲(chǔ)分配nS3C2410內(nèi)置存儲(chǔ)器控制器內(nèi)置存儲(chǔ)器控制器n支持最多支持最多8個(gè)存儲(chǔ)器個(gè)存儲(chǔ)器Bank,每個(gè),每個(gè)Bank最多最多支持支持128MBn啟動(dòng)代碼必須安排在啟動(dòng)代碼必須安排在Bank0n0 x480000000 x60000000地址區(qū)間為特殊功地址區(qū)間為特殊功能寄存器(能寄存器(SFR)。事實(shí)上,這就是)。事實(shí)上,這就是I/O空空間。間。ARM架構(gòu)中,架構(gòu)中,I/O和存儲(chǔ)器統(tǒng)一編址和存儲(chǔ)器統(tǒng)一編址(或稱(或稱I/O是存儲(chǔ)器映射式的)是存儲(chǔ)器映射式的)S3C2410存儲(chǔ)空間分配圖 S3C2410復(fù)位后的存儲(chǔ)器圖示特殊功能寄存器占用的地址空間,IO與存儲(chǔ)
17、器統(tǒng)一編址通過(guò)C語(yǔ)言訪問(wèn)內(nèi)存或I/O的典型寫法通過(guò)指針定義用宏簡(jiǎn)化#define rBANKSIZE(*(volatile unsigned *)0 x48000028)讀存儲(chǔ)器或IOaa=rBANKSIZE;寫存儲(chǔ)器或IOrBANKSIZE=0 x02;NOR Flash vs. NAND Flash項(xiàng)目 NOR flash NAND flash特點(diǎn) 芯片內(nèi)執(zhí)行 代碼拷至系統(tǒng)RAM中傳輸效率 高 中寫入/擦除操作 的典型時(shí)間 5s 4ms擦除器件時(shí)塊大小 64128KB 832KB接口 SRAM接口 I/O口存儲(chǔ)密度 低 高 NOR FLASH適合存儲(chǔ)程序,NAND FLASH適合存儲(chǔ)數(shù)據(jù),
18、實(shí)驗(yàn)平臺(tái)MagicARM2410中有2M NOR FLASH+64M NANDFLASHNOR Flash啟動(dòng) NOR flash支持代碼直接在NOR Flash上執(zhí)行,無(wú)需復(fù)制到內(nèi)存中。這是由于NORFlash的接口與RAM完全相同,可隨機(jī)訪問(wèn)任意地址數(shù)據(jù),讀的速度快,數(shù)據(jù)不易失,可作為存儲(chǔ)并執(zhí)行啟動(dòng)代碼和應(yīng)用程序的存儲(chǔ)器,一般先在代碼的開(kāi)始部分使用匯編指令初始化外接的的內(nèi)存部件(外存SDRAM),最后跳到外存中繼續(xù)執(zhí)行。 nor flash被映到0 x00000000地址(就是nGCS0,這里就不需要片內(nèi)SRAM來(lái)輔助,所以片內(nèi)SRAM的起始地址還是0 x40000000). 然后cpu從
19、0 x00000000開(kāi)始執(zhí)行(也就是在Nor falsh中執(zhí)行)。Nand flash啟動(dòng) NAND Flash控制器自動(dòng)把nand flash存儲(chǔ)器的前4K加載到Steppingstone(內(nèi)部SRAM緩沖器,俗稱墊腳石),同時(shí)把這段片內(nèi)SRAM映射到nGCS0片選的空間(即0 x00000000)。cpu是從0 x00000000開(kāi)始執(zhí)行,也就是NAND flash里的前4KB內(nèi)容。因?yàn)镹AND FLASH連地址線都沒(méi)有,不能直接把NAND映射到0 x00000000,只好使用片內(nèi)SRAM做一個(gè)載體。通過(guò)這個(gè)載體把nandflash中剩余代碼復(fù)制到RAM(一般是SDRAM)中,然后跳到R
20、AM去執(zhí)行。 Bootloader的作用 Boot Loader是在嵌入式系統(tǒng)復(fù)位啟動(dòng)時(shí),操作系統(tǒng)內(nèi)核運(yùn)行前,執(zhí)行的第一段程序。通過(guò)Boot Loader,初始化硬件設(shè)備,建立內(nèi)存和I/O空間映射圖,為最終加載操作系統(tǒng)內(nèi)核調(diào)整好適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境。 Bootloader中的異常向量表 ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabort ;handlerPAbort b HandlerDabort ;handlerDAbo
21、rt b . ;handlerReserved;* b HandlerIRQ b HandlerFIQBootloader中指向用戶程序的鏈接IMPORT _main :LNOT:THUMBCODEBL_main ;Dont use main() because .B . 看門狗WatchDog WatchDog屬于一種定時(shí)器,計(jì)時(shí)時(shí)間到時(shí)除了產(chǎn)生系統(tǒng)中斷之外,還可以發(fā)出系統(tǒng)重啟的信號(hào)。 嵌入式系統(tǒng)運(yùn)行時(shí)受到外部干擾或者系統(tǒng)錯(cuò)誤,程序有時(shí)會(huì)出現(xiàn)“跑飛”,導(dǎo)致整個(gè)系統(tǒng)癱瘓。看門狗的作用就是當(dāng)系統(tǒng)”跑飛“而進(jìn)入死循環(huán)時(shí),恢復(fù)系統(tǒng)的運(yùn)行。看門狗的工作原理 設(shè)系統(tǒng)程序完整運(yùn)行一個(gè)周期的時(shí)間是Tp,看門
22、狗的定時(shí)周期為Ti(Ti Tp),在程序正常運(yùn)行周期內(nèi)修改定時(shí)器的計(jì)數(shù)值(“喂狗”),只要程序正常運(yùn)行,WD定時(shí)器就不會(huì)溢出(“狗不叫”);若由于干擾等原因使系統(tǒng)不能在Tp時(shí)刻修改定時(shí)器的計(jì)數(shù)值,定時(shí)器將在Ti時(shí)刻溢出(“狗叫”),引發(fā)系統(tǒng)復(fù)位,使系統(tǒng)得以重新運(yùn)行,從而起到監(jiān)控作用。c/OS-II 實(shí)時(shí)操作系統(tǒng) 基于優(yōu)先級(jí)的搶先式調(diào)度,不支持時(shí)間片輪轉(zhuǎn)調(diào)度,總是讓處在就緒狀態(tài)的優(yōu)先級(jí)最高的任務(wù)先運(yùn)行 最多64個(gè)任務(wù),任務(wù)編號(hào)063,0號(hào)優(yōu)先級(jí)最高,63號(hào)優(yōu)先級(jí)最低不可剝奪型內(nèi)核(非占先式 Non-Preemptive)低優(yōu)先級(jí)任務(wù)低優(yōu)先級(jí)任務(wù)ISR高優(yōu)先級(jí)任務(wù)高優(yōu)先級(jí)任務(wù)(1)(2)(3)(4
23、)(5)(6)(7)中斷服務(wù)程序使中斷服務(wù)程序使高優(yōu)先級(jí)任務(wù)就緒高優(yōu)先級(jí)任務(wù)就緒低優(yōu)先級(jí)任務(wù)釋放低優(yōu)先級(jí)任務(wù)釋放CPU使用權(quán)使用權(quán)TIME非占先式內(nèi)核要求每個(gè)任務(wù)自我放棄CPU 的所有權(quán)。非占先式調(diào)度法也稱作合作型多任務(wù),各個(gè)任務(wù)彼此合作共享一個(gè)CPU。異步事件還是由中斷服務(wù)來(lái)處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來(lái)被中斷了的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)先級(jí)的任務(wù)才能獲得CPU的使用權(quán)。非占先式內(nèi)核可剝奪型內(nèi)核(占先式 Preemptive)低優(yōu)先級(jí)任務(wù)低優(yōu)先級(jí)任務(wù)ISR高優(yōu)先級(jí)任務(wù)高優(yōu)先級(jí)任務(wù)(1)(2)(3)(
24、4)(5)(6)中斷服務(wù)程序使中斷服務(wù)程序使高優(yōu)先級(jí)任務(wù)就緒高優(yōu)先級(jí)任務(wù)就緒高優(yōu)先級(jí)任務(wù)得到高優(yōu)先級(jí)任務(wù)得到CPU使用權(quán)使用權(quán)TIME當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用占先式內(nèi)核。因此絕大多數(shù)商業(yè)上銷售的實(shí)時(shí)內(nèi)核都是占先式內(nèi)核。最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒狀態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了,或者說(shuō)被掛起了,那個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到了CPU的控制權(quán)。如果是中斷服務(wù)子程序使一個(gè)高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級(jí)高的那個(gè)任務(wù)開(kāi)始運(yùn)行。占先式內(nèi)核任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)
25、計(jì)基礎(chǔ)任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì) 在基于實(shí)時(shí)操作系統(tǒng)的應(yīng)用程序設(shè)計(jì)中,任務(wù)設(shè)計(jì)是整個(gè)應(yīng)用程序的基礎(chǔ),其它軟件設(shè)計(jì)工作都是圍繞任務(wù)設(shè)計(jì)來(lái)展開(kāi)。任務(wù)設(shè)計(jì)應(yīng)用程序設(shè)計(jì)“任務(wù)函數(shù)”和相關(guān)的數(shù)據(jù)結(jié)構(gòu)其他軟件工作任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| 電腦自動(dòng)打鈴器設(shè)計(jì)與實(shí)現(xiàn)電腦自動(dòng)打鈴器設(shè)計(jì)與實(shí)現(xiàn)任務(wù)的劃分任務(wù)的劃分舉例舉例 電腦自動(dòng)打鈴器任務(wù)劃分如下:RTC中斷中斷顯示任務(wù)顯示任務(wù)鍵盤任務(wù)鍵盤任務(wù)輸出控制任務(wù)輸出控制任務(wù)電腦打鈴器電腦打鈴器 電腦自動(dòng)打鈴器具有鍵盤輸入功能,用于設(shè)置時(shí)鐘和鬧鐘,因此需要一個(gè)鍵盤任務(wù)。 電腦自動(dòng)打鈴器需要有顯示功能,用來(lái)顯示時(shí)鐘和鬧鐘,因此需要一個(gè)顯示任務(wù)。 電腦自動(dòng)打鈴器需要一個(gè)輸出控制任務(wù),用來(lái)控
26、制鬧鐘時(shí)間到后各路的輸出。 電腦自動(dòng)打鈴器具有實(shí)時(shí)時(shí)鐘功能,需要一個(gè)RTC中斷。傳遞性:傳遞性:信息傳遞的上游任務(wù)的優(yōu)先級(jí)高于下游任務(wù)的優(yōu)先級(jí)。如信號(hào)采集任務(wù)的優(yōu)先級(jí)高于數(shù)據(jù)處理任務(wù)的優(yōu)先級(jí)。緊迫性:緊迫性:因?yàn)榫o迫任務(wù)對(duì)響應(yīng)時(shí)間有嚴(yán)格要求,在所有緊迫任務(wù)中,按響應(yīng)時(shí)間要求排序,越緊迫的任務(wù)安排的優(yōu)先級(jí)越高。緊迫任務(wù)通常與ISR關(guān)聯(lián);關(guān)鍵性:關(guān)鍵性:任務(wù)越關(guān)鍵安排的優(yōu)先級(jí)越高,以保障其執(zhí)行機(jī)會(huì);中斷關(guān)聯(lián)性中斷關(guān)聯(lián)性:與中斷服務(wù)程序(ISR)有關(guān)聯(lián)的任務(wù)應(yīng)該安排盡可能高的優(yōu)先級(jí),以便及時(shí)處理異步事件,提高系統(tǒng)的實(shí)時(shí)性。如果優(yōu)先級(jí)安排得比較低,CPU有可能被優(yōu)先級(jí)比較高的任務(wù)長(zhǎng)期占用,以致于在第二
27、次中斷發(fā)生時(shí)連第一次中斷還沒(méi)有處理,產(chǎn)生信號(hào)丟失現(xiàn)象;頻繁性:頻繁性:對(duì)于周期性任務(wù),執(zhí)行越頻繁,則周期越短,允許耽誤的時(shí)間也越短,故應(yīng)該安排的優(yōu)先級(jí)也越高,以保障及時(shí)得到執(zhí)行;快捷性:快捷性:在前面各項(xiàng)條件相近時(shí),越快捷(耗時(shí)短)的任務(wù)安排的優(yōu)先級(jí)越高,以使其它就緒任務(wù)的延時(shí)縮短;任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)任務(wù)的優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí) 任務(wù)的優(yōu)先級(jí)安排原則如下: 緊迫性緊迫性任務(wù)優(yōu)先級(jí) 關(guān)鍵性關(guān)鍵性中斷關(guān)聯(lián)性中斷關(guān)聯(lián)性快捷性快捷性頻繁性頻繁性傳遞性傳遞性任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)任務(wù)的分類任務(wù)的分類按照?qǐng)?zhí)行方式分類任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)|
28、 C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)任務(wù)的分類任務(wù)的分類1.單次執(zhí)行類任務(wù)void MyTask (void *pdata) 進(jìn)行準(zhǔn)備工作的代碼; 任務(wù)實(shí)體代碼; 調(diào)用任務(wù)刪除函數(shù);運(yùn)行運(yùn)行創(chuàng)建刪除刪除單次執(zhí)行類任務(wù)定義和初始化變量及硬件設(shè)備 完成該任務(wù)的具體功能 將自己刪除,操作系統(tǒng)將不再管理它 任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)任務(wù)的分類任務(wù)的分類執(zhí)行狀態(tài)等待狀態(tài)就緒狀態(tài)void MyTask (void *pdata) 進(jìn)行準(zhǔn)備工作的代碼; while (1) 任務(wù)實(shí)體代碼; 調(diào)用系統(tǒng)延時(shí)函數(shù); 延時(shí)時(shí)間到延時(shí)時(shí)間到2.周期執(zhí)行類任務(wù)任務(wù)優(yōu)先級(jí)足夠高任務(wù)優(yōu)先級(jí)
29、足夠高任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)任務(wù)的分類任務(wù)的分類3.事件觸發(fā)執(zhí)行類任務(wù)void MyTask (void *pdata) 進(jìn)行準(zhǔn)備工作的代碼; while (1) 調(diào)用獲取事件的函數(shù); 任務(wù)實(shí)體代碼; 等待信號(hào)量或消息運(yùn)行狀態(tài)運(yùn)行狀態(tài)等待狀態(tài)等待狀態(tài)運(yùn)行狀態(tài)運(yùn)行狀態(tài)就緒狀態(tài)就緒狀態(tài) 任務(wù)優(yōu)先級(jí)足夠高消息完成具體功能除了單次執(zhí)行類的任務(wù)以外,典型除了單次執(zhí)行類的任務(wù)以外,典型的任務(wù)表現(xiàn)為一個(gè)無(wú)限循環(huán)的任務(wù)表現(xiàn)為一個(gè)無(wú)限循環(huán)void mytask(void *pdata) for (;) do something; waiting; do something;
30、任務(wù)完成后的自我刪除任務(wù)完成后的自我刪除 當(dāng)任務(wù)完成后,任務(wù)可以自我刪除當(dāng)任務(wù)完成后,任務(wù)可以自我刪除 任務(wù)代碼并非真的刪除了,系統(tǒng)只是簡(jiǎn)單地不再理會(huì)任務(wù)代碼并非真的刪除了,系統(tǒng)只是簡(jiǎn)單地不再理會(huì)這個(gè)任務(wù)這個(gè)任務(wù) 這個(gè)任務(wù)的代碼也不會(huì)再運(yùn)行了,即使任務(wù)調(diào)用了這個(gè)任務(wù)的代碼也不會(huì)再運(yùn)行了,即使任務(wù)調(diào)用了OSTaskDelOSTaskDel(),這個(gè)任務(wù)也絕不會(huì)返回(),這個(gè)任務(wù)也絕不會(huì)返回 void YourTask (void *pdata) /* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF); 任務(wù)狀態(tài)任務(wù)狀態(tài) 在任一給定的時(shí)刻,任務(wù)的狀態(tài)一定是在任一給定的時(shí)刻,任務(wù)的狀態(tài)
31、一定是以下五種狀態(tài)之一:以下五種狀態(tài)之一: 睡眠態(tài)(睡眠態(tài)(task dormanttask dormant) 就緒態(tài)(就緒態(tài)(task readytask ready) 運(yùn)行態(tài)(運(yùn)行態(tài)(task runningtask running) 等待狀態(tài)(等待狀態(tài)(task waitingtask waiting) 中斷服務(wù)態(tài)(中斷服務(wù)態(tài)(ISR running)ISR running)睡眠態(tài)(睡眠態(tài)(task dormanttask dormant) 指任務(wù)駐留在程序空間(指任務(wù)駐留在程序空間(ROMROM或或RAMRAM),還沒(méi)有),還沒(méi)有交給系統(tǒng)來(lái)管理的狀態(tài)交給系統(tǒng)來(lái)管理的狀態(tài) 任務(wù)交給系統(tǒng)通
32、過(guò)調(diào)用以下函數(shù)之一來(lái)實(shí)現(xiàn):任務(wù)交給系統(tǒng)通過(guò)調(diào)用以下函數(shù)之一來(lái)實(shí)現(xiàn): OSTaskCreateOSTaskCreate()() OSTaskCreateExtOSTaskCreateExt()() 告知系統(tǒng):告知系統(tǒng): 任務(wù)的起始地址任務(wù)的起始地址 任務(wù)建立時(shí),用戶給任務(wù)賦予的優(yōu)先級(jí)任務(wù)建立時(shí),用戶給任務(wù)賦予的優(yōu)先級(jí) 任務(wù)要使用的??臻g大小等任務(wù)要使用的??臻g大小等就緒態(tài)(就緒態(tài)(task readytask ready) 任務(wù)一旦創(chuàng)建就進(jìn)入就緒態(tài),準(zhǔn)備運(yùn)行任務(wù)一旦創(chuàng)建就進(jìn)入就緒態(tài),準(zhǔn)備運(yùn)行 任務(wù)的創(chuàng)建可以是在多任務(wù)開(kāi)始之前,也可以任務(wù)的創(chuàng)建可以是在多任務(wù)開(kāi)始之前,也可以動(dòng)態(tài)地由一個(gè)運(yùn)行著的任務(wù)
33、創(chuàng)建動(dòng)態(tài)地由一個(gè)運(yùn)行著的任務(wù)創(chuàng)建 若剛創(chuàng)建任務(wù)的優(yōu)先級(jí)高于創(chuàng)建它的任務(wù)的優(yōu)若剛創(chuàng)建任務(wù)的優(yōu)先級(jí)高于創(chuàng)建它的任務(wù)的優(yōu)先級(jí),它將立即獲得先級(jí),它將立即獲得cpucpu的使用權(quán)的使用權(quán) 任務(wù)可通過(guò)任務(wù)可通過(guò)OSTaskDelOSTaskDel()返回睡眠態(tài);或調(diào)()返回睡眠態(tài);或調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)運(yùn)行態(tài)(運(yùn)行態(tài)(task runningtask running) 就緒的任務(wù)只有當(dāng)所有優(yōu)先級(jí)高于它的任務(wù)都轉(zhuǎn)為等就緒的任務(wù)只有當(dāng)所有優(yōu)先級(jí)高于它的任務(wù)都轉(zhuǎn)為等待狀態(tài),或被刪除后,才能進(jìn)入運(yùn)行態(tài)待狀態(tài),或被刪除后,才能進(jìn)入運(yùn)行態(tài) 任何時(shí)刻只有一個(gè)任務(wù)處于運(yùn)行態(tài)任何
34、時(shí)刻只有一個(gè)任務(wù)處于運(yùn)行態(tài) 調(diào)用調(diào)用OSStartOSStart()可以啟動(dòng)多任務(wù)。該函數(shù)只能在啟動(dòng)()可以啟動(dòng)多任務(wù)。該函數(shù)只能在啟動(dòng)時(shí)調(diào)用一次時(shí)調(diào)用一次 OSStartOSStart()運(yùn)行用戶初始化代碼中已經(jīng)建立的、進(jìn)入()運(yùn)行用戶初始化代碼中已經(jīng)建立的、進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)等待狀態(tài)(等待狀態(tài)(task waitingtask waiting)正在運(yùn)行的任務(wù)可以通過(guò)下面的調(diào)用進(jìn)入等待狀態(tài)。延遲時(shí)間到,正在運(yùn)行的任務(wù)可以通過(guò)下面的調(diào)用進(jìn)入等待狀態(tài)。延遲時(shí)間到,立即強(qiáng)制執(zhí)行任務(wù)切換,讓下一個(gè)優(yōu)先級(jí)最高、并進(jìn)入就緒態(tài)的任立即強(qiáng)制執(zhí)行任務(wù)切換,讓下一個(gè)優(yōu)先級(jí)最高、
35、并進(jìn)入就緒態(tài)的任務(wù)執(zhí)行。務(wù)執(zhí)行。 OSTimeDlyOSTimeDly()() OSTimeDlyHMSMOSTimeDlyHMSM()()等待時(shí)間過(guò)去后,系統(tǒng)服務(wù)(內(nèi)部)函數(shù)等待時(shí)間過(guò)去后,系統(tǒng)服務(wù)(內(nèi)部)函數(shù)OSTimeTickOSTimeTick()使延遲了()使延遲了的任務(wù)進(jìn)入就緒態(tài)的任務(wù)進(jìn)入就緒態(tài)用戶無(wú)需在應(yīng)用程序代碼中調(diào)用這個(gè)函數(shù)用戶無(wú)需在應(yīng)用程序代碼中調(diào)用這個(gè)函數(shù)等待狀態(tài)(續(xù))等待狀態(tài)(續(xù)) 正在運(yùn)行的任務(wù)可能需要通過(guò)調(diào)用函數(shù)等待某正在運(yùn)行的任務(wù)可能需要通過(guò)調(diào)用函數(shù)等待某一事件發(fā)生。如果該事件并未發(fā)生,任務(wù)就進(jìn)一事件發(fā)生。如果該事件并未發(fā)生,任務(wù)就進(jìn)入等待狀態(tài)入等待狀態(tài) OSFl
36、agPendOSFlagPend();();OSMutexPendOSMutexPend()() OSSemPendOSSemPend();();OSMboxPendOSMboxPend()() 當(dāng)事件發(fā)生或等待超時(shí),被掛起的任務(wù)就進(jìn)入當(dāng)事件發(fā)生或等待超時(shí),被掛起的任務(wù)就進(jìn)入就緒態(tài)就緒態(tài)中斷服務(wù)態(tài)(中斷服務(wù)態(tài)(ISR running)ISR running) 正在執(zhí)行的任務(wù)是可以被中斷的正在執(zhí)行的任務(wù)是可以被中斷的,除非該,除非該任務(wù)將中斷關(guān)閉,或系統(tǒng)將中斷關(guān)閉。被任務(wù)將中斷關(guān)閉,或系統(tǒng)將中斷關(guān)閉。被中斷的任務(wù)便進(jìn)入了中斷服務(wù)態(tài)中斷的任務(wù)便進(jìn)入了中斷服務(wù)態(tài) 響應(yīng)中斷后,正在運(yùn)行的任務(wù)被掛起,中
37、響應(yīng)中斷后,正在運(yùn)行的任務(wù)被掛起,中斷服務(wù)子程序控制了斷服務(wù)子程序控制了CPUCPU的使用權(quán)的使用權(quán)中斷服務(wù)態(tài)(中斷服務(wù)態(tài)(ISR running)ISR running) 中斷服務(wù)子程序可能會(huì)報(bào)告一個(gè)或多個(gè)事件的發(fā)生中斷服務(wù)子程序可能會(huì)報(bào)告一個(gè)或多個(gè)事件的發(fā)生,而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài),而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài) 上述情況下,從中斷服務(wù)子程序返回之前,上述情況下,從中斷服務(wù)子程序返回之前, C/OSC/OS IIII 要判定:要判定: 被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的 如果中斷服務(wù)子程序使另一個(gè)優(yōu)先級(jí)更高的任務(wù)進(jìn)入了如果中斷服務(wù)子
38、程序使另一個(gè)優(yōu)先級(jí)更高的任務(wù)進(jìn)入了就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得以運(yùn)行;否則,原來(lái)被中斷了的任務(wù)將繼續(xù)運(yùn)行。以運(yùn)行;否則,原來(lái)被中斷了的任務(wù)將繼續(xù)運(yùn)行。任務(wù)狀態(tài)任務(wù)狀態(tài) 當(dāng)所有的任務(wù)都在等待時(shí)間發(fā)生或等待延遲時(shí)間結(jié)束時(shí),C/OS II 執(zhí)行被稱為空閑任務(wù)(Idle Task)的內(nèi)部函數(shù),即:OSTaskIdle()任務(wù)狀態(tài)任務(wù)的任務(wù)的CPU使用權(quán)使用權(quán)被剝奪被剝奪中斷中斷恢復(fù)恢復(fù)任務(wù)任務(wù)一般的操作系統(tǒng)都提供時(shí)間管理的函數(shù),最基本的就是延時(shí)函數(shù),C/OS-II也不例外,C/OS-II所具有的時(shí)間管理函數(shù)見(jiàn)下表。C/OS-II具有簡(jiǎn)
39、單的動(dòng)態(tài)內(nèi)存管理能力。C/OS-II的動(dòng)態(tài)內(nèi)存管理函數(shù)見(jiàn)下表。任務(wù)管理函數(shù)是操作與任務(wù)相關(guān)功能的函數(shù),詳見(jiàn)下表。系統(tǒng)管理函數(shù)是一些與C/OS-II內(nèi)核或功能相關(guān)的一些函數(shù),詳見(jiàn)下表。C/OS-II的初始化函數(shù)有2個(gè):OSInit()和OSStart(),它們不能在任何任務(wù)和中斷服務(wù)程序中使用,僅在main()函數(shù)中按照一定的規(guī)范被調(diào)用,其中OSInit()函數(shù)初始化C/OS-II內(nèi)部變量,OSStart()函數(shù)啟動(dòng)多任務(wù)環(huán)境。 C/OS-II把信號(hào)量等都稱為事件,管理它們的就是事件管理函數(shù)。C/OS-II V2.52具有的事件有普通信號(hào)量、互斥信號(hào)量、事件標(biāo)志組、消息郵箱和消息隊(duì)列,這些都是C
40、/OS-II用于同步與通訊的工具,本章后述的內(nèi)容將會(huì)詳細(xì)介紹。系統(tǒng)函數(shù)概述系統(tǒng)函數(shù)概述| C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)系統(tǒng)函數(shù)的分類系統(tǒng)函數(shù)的分類初始化初始化任務(wù)管理任務(wù)管理時(shí)間管理時(shí)間管理內(nèi)存管理內(nèi)存管理根據(jù)功能分類事件管理事件管理函數(shù)名功能備注OSStatInit()使能任務(wù)統(tǒng)計(jì)功能復(fù)位一次只能調(diào)用一次,并且必須在任務(wù)中調(diào)用,在調(diào)用時(shí)其它用戶任務(wù)不能處于就緒狀態(tài)OSIntEnter()進(jìn)入中斷處理必須由中斷服務(wù)程序按照規(guī)范調(diào)用,使用本公司的模版就不需要調(diào)用它們OSIntExit()退出中斷處理OSSchedLock()鎖調(diào)度器必須配對(duì)使用,一般情況不需要使用。事實(shí)上,C/OS-I
41、I不推薦使用它們OSSchedUnlock()解鎖調(diào)度器OS_ENTER_CRITICAL()進(jìn)入臨界區(qū)必須配對(duì)使用,一般通過(guò)禁止中斷和允許中斷來(lái)實(shí)現(xiàn)的。對(duì)于一些移植代碼來(lái)說(shuō),不能嵌套調(diào)用OS_EXIT_CRITICAL()退出臨界區(qū)函數(shù)名功能函數(shù)名功能OSTaskChangePrio()改變?nèi)蝿?wù)優(yōu)先級(jí)OSTaskSuspend()掛起任務(wù)OSTaskCreate()建立任務(wù)OSTaskResume()恢復(fù)任務(wù)OSTaskCreateExt()建立任務(wù),比OSTaskCreate()控制任務(wù)屬性更多OSTaskStkChk()檢查堆棧OSTaskDel()刪除任務(wù)OSTaskQuery()獲得
42、任務(wù)信息OSTaskDelReq()請(qǐng)求刪除任務(wù),有特殊用途系統(tǒng)管理系統(tǒng)管理函數(shù)名功能備注OSTimeDly()以時(shí)鐘節(jié)拍為單位延時(shí)OSTimeDlyHMSM()以鐘時(shí)分秒毫秒為單位延時(shí)OSTimeDlyResume()恢復(fù)延時(shí)的任務(wù)OSTimeDlyHMSM()可能需要多次才能恢復(fù)OSTimeGet()獲得系統(tǒng)時(shí)間以時(shí)鐘節(jié)拍為單位OSTimeSet()設(shè)置系統(tǒng)時(shí)間以時(shí)鐘節(jié)拍為單位OSTimeTick()時(shí)鐘節(jié)拍處理函數(shù)由時(shí)鐘節(jié)拍中斷處理程序調(diào)用,用戶很少使用函數(shù)名功能OSMemCreate()初始化一個(gè)堆OSMemGet()從指定堆中獲得一個(gè)內(nèi)存塊OSMemPut()從指定堆中釋放一個(gè)內(nèi)存塊
43、OSMemQuery()查詢指定堆的狀態(tài)事件的一般使用規(guī)則事件的一般使用規(guī)則 | C/OS-II程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)相似性相似性 事件管理函數(shù)是C/OS-II中最多的系統(tǒng)函數(shù),在C/OS-II V2.52中總共有34個(gè),而且每種事件具有的管理函數(shù)數(shù)目不同。但是所有的事件都有類似的6個(gè)函數(shù),它們是所有事件的基本功能,其函數(shù)名類似,使用方法也類似,詳細(xì)函數(shù)見(jiàn)下表。功能功能信號(hào)量信號(hào)量互斥信號(hào)量互斥信號(hào)量事件標(biāo)志組事件標(biāo)志組消息郵箱消息郵箱消息隊(duì)列消息隊(duì)列建立事件建立事件OSSemCreateOSMutexCreateOSFlagCreateOSMboxCreateOSQCreate刪除事件刪除
44、事件OSSemDelOSMutexDelOSFlagDelOSMboxDelOSQDel等待事件等待事件OSSemPendOSMutexPendOSFlagPendOSMboxPendOSQPend發(fā)送事件發(fā)送事件OSSemPostOSMutexPostOSFlagPostOSMboxPostOSQPost無(wú)等待獲得事件無(wú)等待獲得事件OSSemAcceptOSMutexAcceptOSFlagAcceptOSMboxAcceptOSQAccept查詢事件狀態(tài)查詢事件狀態(tài)OSSemQueryOSMutexQueryOSFlagQueryOSMboxQueryOSQQuery另外還有4個(gè)事件管理函
45、數(shù)為OSMboxPostOpt()、OSQPostFront()、 OSQPostOpt()、 OSQFlush(),各函數(shù)詳見(jiàn)后面章節(jié)。關(guān)于C/OS的移植要使C/OS-能正常運(yùn)行,處理器必須具備的條件是:1、處理器的C編譯器能產(chǎn)生可重入代碼 2、處理器支持中斷,并且能產(chǎn)生定時(shí)中斷3、用C語(yǔ)言就可以打開(kāi)或者關(guān)閉中斷 4、處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧5、處理器有將堆棧指針和其他CPU寄存器讀出,并保存到堆?;騼?nèi)存中去的指令對(duì)于實(shí)驗(yàn)平臺(tái)MagicARM2410而言,S3C2410 CPU可以滿足第2、4、5點(diǎn)要求,使用ADS1.2的C編譯器可以滿足第1、3點(diǎn)要求什么是可重入代碼什么是可重
46、入代碼 可重入的代碼指的是一段可以被多個(gè)任務(wù)同時(shí)調(diào)用,而不必?fù)?dān)心會(huì)破壞數(shù)據(jù)的代碼(比如:一個(gè)函數(shù)) 即:可重入型函數(shù)在任何時(shí)候都可以被中斷執(zhí)行,過(guò)一段時(shí)間以后又可以繼續(xù)運(yùn)行,而不會(huì)因?yàn)樵诤瘮?shù)中斷的時(shí)候被其他的任務(wù)重新調(diào)用,而影響函數(shù)中的數(shù)據(jù) 可重入代碼舉例可重入代碼舉例程序1:可重入型函數(shù)void swap(int *x, int *y)int temp;temp=*x;*x=*y;*y=temp;非可重入代碼舉例非可重入代碼舉例程序2:非可重入型函數(shù)int temp;void swap(int *x, int *y)temp=*x;*x=*y;*y=temp;不可重入函數(shù)被中斷破壞不可重入函
47、數(shù)被中斷破壞如何使函數(shù)具有可重入性如何使函數(shù)具有可重入性 使Swap()函數(shù)具有可重入性的條件:把Temp定義為局部變量調(diào)用Swap()函數(shù)之前關(guān)中斷,調(diào)用 后再開(kāi)中斷用信號(hào)量禁止該函數(shù)在使用過(guò)程中 被再次調(diào)用任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì) 在基于實(shí)時(shí)操作系統(tǒng)的應(yīng)用程序設(shè)計(jì)中,任務(wù)設(shè)計(jì)是整個(gè)應(yīng)用程序的基礎(chǔ),其它軟件設(shè)計(jì)工作都是圍繞任務(wù)設(shè)計(jì)來(lái)展開(kāi)。任務(wù)設(shè)計(jì)應(yīng)用程序設(shè)計(jì)“任務(wù)函數(shù)”和相關(guān)的數(shù)據(jù)結(jié)構(gòu)其他軟件工作任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù)的劃分任務(wù)的劃分 對(duì)一個(gè)嵌入式應(yīng)用系統(tǒng)進(jìn)行“任務(wù)劃分”,是實(shí)時(shí)操作系統(tǒng)應(yīng)用軟件設(shè)計(jì)的關(guān)鍵,任務(wù)劃分是否合理將直接影響軟件設(shè)計(jì)的質(zhì)量。以以CPU為中心為中心“關(guān)鍵關(guān)鍵”功功能能“緊迫緊迫”
48、功能功能消耗機(jī)時(shí)消耗機(jī)時(shí)關(guān)系密切關(guān)系密切相同事件觸發(fā)相同事件觸發(fā)運(yùn)行周期相同運(yùn)行周期相同任務(wù)劃分固定順序執(zhí)行固定順序執(zhí)行 任務(wù)劃分原則如下:首先,以CPU為中心,將與各種輸入/輸出設(shè)備(或端口)相關(guān)的功能分別劃分為獨(dú)立的任務(wù)發(fā)現(xiàn)“關(guān)鍵”功能,將其最“關(guān)鍵”部分“剝離”出來(lái),用一個(gè)獨(dú)立任務(wù)(或ISR)完成,剩余部分用另外一個(gè)任務(wù)實(shí)現(xiàn),兩者之間通過(guò)通信機(jī)制溝通發(fā)現(xiàn)“緊迫”功能,將其最“緊迫”部分“剝離”出來(lái),用一個(gè)獨(dú)立的高優(yōu)先級(jí)任務(wù)(或ISR)完成,剩余部分用另外一個(gè)任務(wù)實(shí)現(xiàn),兩者之間通過(guò)通信機(jī)制溝通將消耗機(jī)時(shí)較多的數(shù)據(jù)處理功能劃分出來(lái),封裝為低優(yōu)先級(jí)任務(wù)對(duì)于既“關(guān)鍵”又“緊迫”的功能,按“緊迫”
49、功能處理將關(guān)系密切的若干功能組合成為一個(gè)任務(wù),達(dá)到功能聚合的效果將由相同事件觸發(fā)的若干功能組合成為一個(gè)任務(wù),從而免除事件分發(fā)機(jī)制將運(yùn)行周期相同的功能組合成為一個(gè)任務(wù),從而免除時(shí)間事件分發(fā)機(jī)制將若干按固定順序執(zhí)行的功能組合成為一個(gè)任務(wù),從而免除同步接力通信的麻煩舉例:電腦自動(dòng)打鈴器舉例:電腦自動(dòng)打鈴器功能需求:l 具有實(shí)時(shí)時(shí)鐘功能,能顯示時(shí)分秒,年月日星期(采用8位數(shù)碼管顯示)l 具有 鍵盤 輸入功能 l 可以設(shè)置若干個(gè)鬧鐘,以及鬧鐘的禁止與使能l 可設(shè)置每個(gè)鬧鐘發(fā)生時(shí)的輸出動(dòng)作(一共四路輸出,可獨(dú)立設(shè)置每路輸出的時(shí)間和電平狀態(tài))電腦自動(dòng)打鈴器電腦自動(dòng)打鈴器 LPC2000系列ARM具有RTC功
50、能,RTC掉電后仍可使用電池繼續(xù)運(yùn)行,從而保證了系統(tǒng)掉電后時(shí)鐘的準(zhǔn)確性。ZLG7290是一款鍵盤和LED驅(qū)動(dòng)芯片,最多支持64個(gè)按鍵和8個(gè)共陰極數(shù)碼管。系統(tǒng)框圖:s3c2410任務(wù)的劃分任務(wù)的劃分 電腦自動(dòng)打鈴器任務(wù)劃分如下:RTC中斷中斷顯示任務(wù)顯示任務(wù)鍵盤任務(wù)鍵盤任務(wù)輸出控制任務(wù)輸出控制任務(wù)電腦打鈴器電腦打鈴器 電腦自動(dòng)打鈴器具有鍵盤輸入功能,用于設(shè)置時(shí)鐘和鬧鐘,因此需要一個(gè)鍵盤任務(wù)。 電腦自動(dòng)打鈴器需要有顯示功能,用來(lái)顯示時(shí)鐘和鬧鐘,因此需要一個(gè)顯示任務(wù)。 電腦自動(dòng)打鈴器需要一個(gè)輸出控制任務(wù),用來(lái)控制鬧鐘時(shí)間到后各路的輸出。 電腦自動(dòng)打鈴器具有實(shí)時(shí)時(shí)鐘功能,需要一個(gè)RTC中斷。任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù)的優(yōu)先級(jí)設(shè)計(jì)任務(wù)的優(yōu)先級(jí)設(shè)計(jì)人機(jī)接口,實(shí)時(shí)性低鍵盤任務(wù)鍵盤任務(wù)1輸出控制任務(wù)輸出控制任務(wù)3顯示任務(wù)顯示任務(wù)2RTC中斷中斷4電電腦腦自自動(dòng)動(dòng)打打鈴鈴器器控制接口,實(shí)時(shí)性高任務(wù)的優(yōu)先級(jí)設(shè)計(jì)任務(wù)的優(yōu)先級(jí)設(shè)計(jì)鍵盤任務(wù)鍵盤任務(wù)1輸出控制任務(wù)輸出控制任務(wù)3顯示任務(wù)顯示任務(wù)2RTC中斷中斷4電電腦腦自自動(dòng)動(dòng)打打鈴鈴器器優(yōu)先級(jí):6優(yōu)先級(jí):12優(yōu)先級(jí):13多任務(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年版鋁合金散熱器研發(fā)與生產(chǎn)合同樣本2篇
- 引進(jìn)創(chuàng)新創(chuàng)業(yè)團(tuán)隊(duì)2025年度協(xié)議3篇
- 2025年度個(gè)人商鋪?zhàn)赓U合同裝修工程監(jiān)督合同4篇
- 二零二五年度地質(zhì)災(zāi)害風(fēng)險(xiǎn)評(píng)估與防治合同3篇
- 2025年度個(gè)人閑置土地承包權(quán)置換合同范本4篇
- 2025年度大型活動(dòng)策劃與執(zhí)行服務(wù)合同模板4篇
- 二零二五年度建筑廢棄物處理項(xiàng)目擔(dān)保合同范本3篇
- 二婚家庭專用2024離婚協(xié)議范本樣本版B版
- 2025年度趕工環(huán)保設(shè)備趕工銷售合作協(xié)議書
- 二零二五年度土地租賃權(quán)租賃與轉(zhuǎn)租合同
- 高考語(yǔ)文復(fù)習(xí)【知識(shí)精研】《千里江山圖》高考真題說(shuō)題課件
- 河北省承德市2023-2024學(xué)年高一上學(xué)期期末物理試卷(含答案)
- 高中物理斜面模型大全(80個(gè))
- 012主要研究者(PI)職責(zé)藥物臨床試驗(yàn)機(jī)構(gòu)GCP SOP
- 農(nóng)耕研學(xué)活動(dòng)方案種小麥
- 2024年佛山市勞動(dòng)合同條例
- 污水管網(wǎng)規(guī)劃建設(shè)方案
- 城鎮(zhèn)智慧排水系統(tǒng)技術(shù)標(biāo)準(zhǔn)
- 采購(gòu)管理制度及流程采購(gòu)管理制度及流程
- 五年級(jí)美術(shù)下冊(cè)第9課《寫意蔬果》-優(yōu)秀課件4人教版
- 節(jié)能降耗課件
評(píng)論
0/150
提交評(píng)論