版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)復(fù)習(xí) 考試說明 時(shí)間:16周周四(12月19日)14:0016:00 地點(diǎn):東教南202,203 閉卷 題型及分值 填空30% 選擇10% 判斷 10% 術(shù)語解釋 10% 簡(jiǎn)答+設(shè)計(jì)40% 嵌入式系統(tǒng)的定義 “以應(yīng)用為中心,計(jì)算機(jī)技 術(shù)為基礎(chǔ),軟硬件可裁剪,以適應(yīng) 應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、 體積、功耗有嚴(yán)格要求的專用計(jì) 算機(jī)系統(tǒng)?!?嵌入式微處理器分類 嵌入式操作系統(tǒng)的發(fā)展階段 1、無操作系統(tǒng)的嵌入算法階段 2、專用嵌入式實(shí)時(shí)操作系統(tǒng) 3、通用嵌入式實(shí)時(shí)操作系統(tǒng) 4、基于internet的嵌入式系統(tǒng) 嵌入式開發(fā)環(huán)境(交叉開發(fā)環(huán)境) 嵌入式系統(tǒng)通常是一個(gè)資源受限的系統(tǒng),其開發(fā)需
2、要交叉編譯和在線調(diào)試的開發(fā)環(huán)境,主要包括: 宿主機(jī) 目標(biāo)機(jī)(評(píng)估電路板) 基于JTAG的ICD仿真器、或調(diào)試監(jiān)控軟件、或在 線仿真器ICE 運(yùn)行于宿主機(jī)的交叉編譯器和鏈接器、以及開發(fā) 工具鏈或軟件開發(fā)環(huán)境 嵌入式操作系統(tǒng) 交叉開發(fā)環(huán)境交叉開發(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) ARM7處理器 ARM7TDMI的含義: T:支持16位壓縮指令集Thumb; D:支持片上Debug; M:內(nèi)嵌硬件乘法器(Multiplier) I:嵌入
3、式ICE,支持片上斷點(diǎn)和調(diào)試點(diǎn); Samsung公司的S3C44B0X即屬于該系列的處理器。 三級(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-endi
4、an): 字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存 放在高地址中。 小端格式小端格式(little-endian): 低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù) 據(jù)的高字節(jié)。 ARM7TDMI核的bigend引腳,s3c44b0 x cpu的endian引腳的 狀態(tài)將決定大端格式或小端格式。 地 址 增 加 24 24 1A 3C 78 1A 3C 78 小端模式大端模式 字?jǐn)?shù)據(jù)0 x783C1A24 的存儲(chǔ)格式如下 : ARM7TDMI 處理器有兩種工作狀態(tài)(對(duì)應(yīng)于 2種指令集): uARM 狀態(tài) uThumb狀態(tài) ARM7TDMI 核的操作狀態(tài)可以通過BX指令在 ARM狀
5、態(tài)和Thumb狀態(tài)之間切換 ARMThumb LDR r0,=label+1 BX r0 ThumbARM LDR r0,=label BX r0 ARM 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é)處理器的軟件仿真 除了
6、用戶模式外,其他模式均可視為特權(quán)模式; Usr/Sys mode不是異常模式,沒有SPSR。在這2種模式中 使用讀寫SPSR的指令時(shí),結(jié)果不可預(yù)知。 ARM狀態(tài)下的寄存器組織 n R0 R0 到到 R15 R15 可以直接訪問可以直接訪問 n R0 R0 到到 R14 R14 是通用寄存器是通用寄存器 n R13: R13: 堆棧指針堆棧指針 (sp) (sp) (通常通常) ) u每種處理器模式都有單獨(dú)的堆棧每種處理器模式都有單獨(dú)的堆棧 n R14: R14: 鏈接寄存器鏈接寄存器 ( (lrlr) ) n R15 R15 程序計(jì)數(shù)器程序計(jì)數(shù)器 (PC)(PC) n CPSR CPSR 當(dāng)前
7、程序狀態(tài)寄存器當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模,包括代碼標(biāo)志狀態(tài)和當(dāng)前模 式位式位 n 5 5個(gè)個(gè)SPSRsSPSRs-(-(程序狀態(tài)保存寄存器程序狀態(tài)保存寄存器) ) 當(dāng)異常發(fā)生時(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 : oVerflow I and F 位是中斷禁止位,T位反映處理器的運(yùn)行狀態(tài) M0, M1, M2, M3 and M4 位是模式
8、位 N, Z, C and V 條件碼標(biāo)志 可以在處理器中作為數(shù)學(xué)和邏輯操作改變 可以被所有的指令測(cè)試,以決定指令是否被執(zhí) 行 N : Negative. Z : Zero. C : Carry. V : 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)系 ARM體系的異常 異常:由內(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未定義指令未定義IF 0 x00000008軟件中斷異常管理禁止F 0 x0000000C中止(預(yù)?。┲兄笽F 0 x00000010中止(數(shù)據(jù))中止IF 0 x00000014保留保留 0 x00000018IRQ中斷禁止F 0 x0000001CFIQ快速中斷禁止禁止 注:表中的I和F表示不對(duì)該位有影響,保留原來的值。 ARM指令集和尋址方式 理解: 幾乎所有指令都可條件執(zhí)行 指令寫法上的變化
10、可以控制是否影響標(biāo)志位 無 條 件 執(zhí) 行 ( 指 令 默 認(rèn) 條 件 ) 操 作 碼 條 件 碼 助 記 符 標(biāo) 志含 義操 作 碼 條 件 碼 助 記 符 標(biāo) 志含 義 0000 0001 0010 0011 0100 0101 0110 0111 EQ N E C S/H S C C /LO M I PL V S V C Z=1 Z=0 C =1 C =0 負(fù) 數(shù) 正 數(shù) 或 零 溢 出 沒 有 溢 出 N =1 N =0 V =1 V =0 1000 1001 1010 1011 1100 1101 1110 1111 C =1,Z=0H I LS G E LT G T LE A L
11、N V C =0,Z=1 N =V N !=V Z=0,N =V Z=1,N !=V 任 意 任 意 相 等 不 相 等 無 符 號(hào) 數(shù) 大 于 或 等 于 無 符 號(hào) 數(shù) 小 于 無 符 號(hào) 數(shù) 大 于 無 符 號(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
12、+1 ADDLS R1,R1,#1 ;若若R0R1,則,則R1=R1+1 示例:示例: 條件碼 SWP指令操作圖解 C語言代碼為:語言代碼為: 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,R
13、1,R0 ;if(ba) b=b-a BNE gcd ;if(a!=b)跳轉(zhuǎn)到跳轉(zhuǎn)到gcd繼續(xù)執(zhí)行繼續(xù)執(zhí)行 MOV PC,LR ;子程序結(jié)束,返回子程序結(jié)束,返回 實(shí)現(xiàn)類似于實(shí)現(xiàn)類似于C語言中的語言中的if-else功能的代碼段。下例的功能的代碼段。下例的 功能為求最大公約數(shù)。功能為求最大公約數(shù)。 例:編寫一具有完整匯編格式的程序,實(shí)現(xiàn)冒泡法排序功能。 設(shè)無符號(hào)字?jǐn)?shù)據(jù)存放在從0 x400004開始的區(qū)域,字?jǐn)?shù)據(jù)的數(shù) 目字存放在0 x400000中。 AREA SORT,CODE,READONLY ENTRY START MOV R0,#0 x400000 ldr r1,r0 ;counter
14、LP SUBS R1,R1,#1 BEQ EXIT MOV R7,R1 LDR R0,=0 x400004 LP1 LDR R2,R0,#4 LDR R3,R0 CMP R2,R3 STRLO R3,R0, # -4 STRLO R2,R0 SUBS R7,R7,#1 BNE LP1 B LP EXIT END S3C44B0X構(gòu)成最小系統(tǒng) nS3C44B0X + 電源電路電源電路 + 晶振電路晶振電路 + 復(fù)位電路復(fù)位電路 + JTAG接口電路可構(gòu)成真正意義上的最小系統(tǒng)接口電路可構(gòu)成真正意義上的最小系統(tǒng) n程序可運(yùn)行于程序可運(yùn)行于S3C44B0X內(nèi)部的內(nèi)部的8KB RAM中,可運(yùn)行中,可運(yùn)行
15、 的程序大小有限,且掉電后無法保存,只能通過的程序大小有限,且掉電后無法保存,只能通過JTAG接接 口調(diào)試程序口調(diào)試程序 S3C44B0X擴(kuò)展系統(tǒng) nS3C44B0X最小系統(tǒng)(最小系統(tǒng)( S3C44B0X + 電源電路電源電路 + 晶振電路晶振電路 + 復(fù)復(fù) 位電路位電路 + JTAG接口電路接口電路) + SDRAM + FLASH電路可構(gòu)成一電路可構(gòu)成一 個(gè)完全的嵌入式系統(tǒng)個(gè)完全的嵌入式系統(tǒng) n可運(yùn)行于可運(yùn)行于SDRAM中的程序,也可以運(yùn)行中的程序,也可以運(yùn)行NOR FLASH 中的程序,可運(yùn)行較大的程序,如果將程序保存到中的程序,可運(yùn)行較大的程序,如果將程序保存到FLASH 中,掉電后不
16、會(huì)丟失,因此,既可以通過中,掉電后不會(huì)丟失,因此,既可以通過JTAG接口調(diào)試程接口調(diào)試程 序,也可以將程序燒寫到序,也可以將程序燒寫到FLASH,然后運(yùn)行,然后運(yùn)行FLASH中的程中的程 序序 n在此基礎(chǔ)上加入必要的接口及其他電路,就構(gòu)成了具在此基礎(chǔ)上加入必要的接口及其他電路,就構(gòu)成了具 體的體的S3C44B0X應(yīng)用系統(tǒng)應(yīng)用系統(tǒng) 27 S3C44B0 x的存儲(chǔ)分配的存儲(chǔ)分配 nS3C44B0X內(nèi)置存儲(chǔ)器控制器內(nèi)置存儲(chǔ)器控制器 n支持最多支持最多8個(gè)存儲(chǔ)器個(gè)存儲(chǔ)器Bank,每個(gè),每個(gè)Bank最多最多 支持支持32MB n啟動(dòng)代碼必須安排在啟動(dòng)代碼必須安排在Bank0 nBank0處處0 x01c
17、000000 x02000000地址區(qū)間地址區(qū)間 為特殊功能寄存器(為特殊功能寄存器(SFR)。事實(shí)上,這)。事實(shí)上,這 就是就是I/O空間。空間。ARM架構(gòu)中,架構(gòu)中,I/O和存儲(chǔ)器和存儲(chǔ)器 統(tǒng)一編址(或稱統(tǒng)一編址(或稱I/O是存儲(chǔ)器映射式的)是存儲(chǔ)器映射式的) 通過C語言訪問內(nèi)存或I/O的典型寫法 通過指針定義用宏簡(jiǎn)化 #define rBANKSIZE(*(volatile unsigned *)0 x1c80028) 讀存儲(chǔ)器或IO aa=rBANKSIZE; 寫存儲(chǔ)器或IO rBANKSIZE=32; NOR Flash vs. NAND Flash 項(xiàng)目 NOR flash NAN
18、D 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ù),實(shí)驗(yàn)平 臺(tái)up-netARM3000中有2M NOR FLASH+16M NANDFLASH Bootloader的作用 Boot Loader是在嵌入式系統(tǒng)復(fù)位啟動(dòng)時(shí), 操作系統(tǒng)內(nèi)核運(yùn)行前,執(zhí)行的第一段程序。 通過Boot Loader,初始化硬件設(shè)備,建立 內(nèi)存和I/O空間映射圖,為最終加載操作系 統(tǒng)內(nèi)核調(diào)整好適當(dāng)?shù)?/p>
19、系統(tǒng)軟硬件環(huán)境。 Bootloader中的異常向量表 ENTRY b ResetHandler ;for debug b HandlerUndef ;handlerUndef b HandlerSWI ;SWI interrupt handler b HandlerPabort ;handlerPAbort b HandlerDabort ;handlerDAbort b . ;handlerReserved ;* b HandlerIRQ b HandlerFIQ Bootloader中指向用戶程序的鏈接 IMPORT _main :LNOT:THUMBCODE BL_main ;Dont
20、use main() because . B . 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) (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)。非占先
21、式調(diào)度法也稱作合作型多任務(wù),各個(gè)任務(wù) 彼此合作共享一個(gè)CPU。異步事件還是由中斷服務(wù)來 處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀 態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原 來被中斷了的那個(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) (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í)間很
22、重要時(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)就被剝奪了,或 者說被掛起了,那個(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ù)開始運(yùn)行。 占先式內(nèi)核 任務(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ì)來展開。 任務(wù)設(shè)計(jì) 應(yīng)用程序 設(shè)計(jì)“任務(wù) 函數(shù)”和相 關(guān)的數(shù)據(jù)
23、結(jié) 構(gòu) 其他軟件工作 任務(wù)的分類任務(wù)的分類 按照?qǐng)?zhí)行方式分類 任務(wù)(任務(wù)(tasktask) 典型的任務(wù)(除了單次執(zhí)行的任務(wù)以典型的任務(wù)(除了單次執(zhí)行的任務(wù)以 外):一個(gè)無限循環(huán),無返回值外):一個(gè)無限循環(huán),無返回值 void mytask(void *pdata) for (;) do something; waiting; do something; 任務(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)行
24、了,即使任務(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)一定是 以下五種狀態(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
25、) 等待狀態(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),還沒有),還沒有 交給系統(tǒng)來管理的狀態(tài)交給系統(tǒng)來管理的狀態(tài) 任務(wù)交給系統(tǒng)通過調(diào)用以下函數(shù)之一來實(shí)現(xiàn):任務(wù)交給系統(tǒng)通過調(diào)用以下函數(shù)之一來實(shí)現(xiàn): OSTaskCreateOSTaskCreate()() OSTaskCreateExtOSTaskCreateExt()() 告知系統(tǒng):告知系統(tǒng): 任務(wù)的起始地址
26、任務(wù)的起始地址 任務(wù)建立時(shí),用戶給任務(wù)賦予的優(yōu)先級(jí)任務(wù)建立時(shí),用戶給任務(wù)賦予的優(yōu)先級(jí) 任務(wù)要使用的棧空間大小等任務(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ù)開始之前,也可以任務(wù)的創(chuàng)建可以是在多任務(wù)開始之前,也可以 動(dòng)態(tài)地由一個(gè)運(yùn)行著的任務(wù)創(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ù)可通過任務(wù)可通過OSTaskDelOSTa
27、skDel()返回睡眠態(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)任何時(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)建立
28、的、進(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ù)可以通過下面的調(diào)用進(jìn)入等待狀態(tài)。延遲時(shí)間到,正在運(yùn)行的任務(wù)可以通過下面的調(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í)最高、并進(jìn)入就緒態(tài)的任 務(wù)執(zhí)行。務(wù)執(zhí)行。 OSTimeDlyOSTimeDly()() OSTimeDlyHMSMOSTimeDlyHMSM()() 等待時(shí)間過去后,系統(tǒng)服務(wù)(內(nèi)部)函數(shù)等待時(shí)間過去后,系統(tǒng)服務(wù)(內(nèi)部
29、)函數(shù)OSTimeTickOSTimeTick()使延遲了()使延遲了 的任務(wù)進(jìn)入就緒態(tài)的任務(wù)進(jìn)入就緒態(tài) 用戶無需在應(yīng)用程序代碼中調(diào)用這個(gè)函數(shù)用戶無需在應(yīng)用程序代碼中調(diào)用這個(gè)函數(shù) 等待狀態(tài)(續(xù))等待狀態(tài)(續(xù)) 正在運(yùn)行的任務(wù)可能需要通過調(diào)用函數(shù)等待某正在運(yùn)行的任務(wù)可能需要通過調(diào)用函數(shù)等待某 一事件(標(biāo)志、信號(hào)量、互斥信號(hào)量、消息郵一事件(標(biāo)志、信號(hào)量、互斥信號(hào)量、消息郵 箱)發(fā)生。如果該事件并未發(fā)生,任務(wù)就進(jìn)入箱)發(fā)生。如果該事件并未發(fā)生,任務(wù)就進(jìn)入 等待狀態(tài)等待狀態(tài) OSFlagPendOSFlagPend();();OSMutexPendOSMutexPend()() OSSemPendO
30、SSemPend();();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ù)被掛起,中響應(yīng)中斷后,正在運(yùn)行的任務(wù)被掛起,中 斷服務(wù)子程序控制了斷服務(wù)子程序控制了CPUCPU的使用權(quán)的使用權(quán) 中斷服
31、務(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ù)子程序使另一個(gè)優(yōu)先級(jí)更高的任務(wù)進(jìn)入了 就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得就緒態(tài),則新進(jìn)入就緒
32、態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得 以運(yùn)行;否則,原來被中斷了的任務(wù)將繼續(xù)運(yùn)行。以運(yùn)行;否則,原來被中斷了的任務(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ù) 關(guān)于C/OS的移植 要使C/OS-能正常運(yùn)行,處理器必須具備的條件 是: 1、處理器的C編譯器能產(chǎn)生可重入代碼 2、處理器支持中斷,并且能產(chǎn)生定時(shí)中斷 3、用C語言就可以打開或者關(guān)閉中斷 4、處理器支持能夠容納一定量數(shù)據(jù)的
33、硬件堆棧 5、處理器有將堆棧指針和其他CPU寄存器讀出, 并保存到堆?;騼?nèi)存中去的指令 對(duì)于實(shí)驗(yàn)平臺(tái)up-netARM3000而言,S3C44B0X CPU可以滿足第2、4、5點(diǎn)要求,使用ADS1.2的 C編譯器可以滿足第1、3點(diǎn)要求 什么是可重入代碼什么是可重入代碼 可重入的代碼指的是一段可以被多個(gè)任 務(wù)同時(shí)調(diào)用,而不必?fù)?dān)心會(huì)破壞數(shù)據(jù)的 代碼(比如:一個(gè)函數(shù)) 即:可重入型函數(shù)在任何時(shí)候都可以被 中斷執(zhí)行,過一段時(shí)間以后又可以繼續(xù) 運(yùn)行,而不會(huì)因?yàn)樵诤瘮?shù)中斷的時(shí)候被 其他的任務(wù)重新調(diào)用,而影響函數(shù)中的 數(shù)據(jù) 可重入代碼舉例可重入代碼舉例 程序1:可重入型函數(shù) void swap(int *x
34、, 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ù)被中斷破壞不可重入函數(shù)被中斷破壞 如何使函數(shù)具有可重入性如何使函數(shù)具有可重入性 使Swap()函數(shù)具有可重入性的條件: 把Temp定義為局部變量 調(diào)用Swap()函數(shù)之前關(guān)中斷,調(diào)用 后再開中斷 用信號(hào)量禁止該函數(shù)在使用過程中 被再次調(diào)用 任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì) 在基于實(shí)時(shí)操作系統(tǒng)的應(yīng)用程序設(shè)計(jì)中,任務(wù)設(shè)計(jì) 是整個(gè)應(yīng)用程序
35、的基礎(chǔ),其它軟件設(shè)計(jì)工作都是圍繞任 務(wù)設(shè)計(jì)來展開。 任務(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ù)的劃分 對(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)鍵”功功 能能 “緊迫緊迫”功能功能 消耗機(jī)時(shí)消耗機(jī)時(shí)關(guān)系密切關(guān)系密切 相同事件觸發(fā)相同事件觸發(fā) 運(yùn)行周期相同運(yùn)行周期相同 任務(wù)劃分 固定順序執(zhí)行固定順序執(zhí)行 任務(wù)劃分原則如下: 首先,以CPU為中心,將與各種輸入/輸出設(shè)備(或端口
36、)相關(guān)的功能分別劃 分為獨(dú)立的任務(wù) 發(fā)現(xiàn)“關(guān)鍵”功能,將其最“關(guān)鍵”部分“剝離”出來,用一個(gè)獨(dú)立任務(wù) (或ISR)完成,剩余部分用另外一個(gè)任務(wù)實(shí)現(xiàn),兩者之間通過通信機(jī)制溝通 發(fā)現(xiàn)“緊迫”功能,將其最“緊迫”部分“剝離”出來,用一個(gè)獨(dú)立的高優(yōu) 先級(jí)任務(wù)(或ISR)完成,剩余部分用另外一個(gè)任務(wù)實(shí)現(xiàn),兩者之間通過通信 機(jī)制溝通 將消耗機(jī)時(shí)較多的數(shù)據(jù)處理功能劃分出來,封裝為低優(yōu)先級(jí)任務(wù) 對(duì)于既“關(guān)鍵”又“緊迫”的功能,按“緊迫”功能處理 將關(guān)系密切的若干功能組合成為一個(gè)任務(wù),達(dá)到功能聚合的效果將由相同事件觸發(fā)的若干功能組合成為一個(gè)任務(wù),從而免除事件分發(fā)機(jī)制將運(yùn)行周期相同的功能組合成為一個(gè)任務(wù),從而免除
37、時(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功能,RTC掉電后 仍可使用電池繼續(xù)運(yùn)行,從而保證了系統(tǒng)掉電后時(shí) 鐘的準(zhǔn)確性。ZLG7290是一款鍵盤和LED驅(qū)動(dòng)芯片, 最多支持64個(gè)按鍵和8個(gè)共陰極數(shù)碼管。 系統(tǒng)框圖
38、: 任務(wù)的劃分任務(wù)的劃分 電腦自動(dòng)打鈴器任務(wù)劃分如下: RTC中斷中斷 顯示任務(wù)顯示任務(wù)鍵盤任務(wù)鍵盤任務(wù) 輸出控制任務(wù)輸出控制任務(wù) 電腦打鈴器電腦打鈴器 電腦自動(dòng)打鈴器具有鍵盤輸入功能,用于設(shè)置時(shí)鐘和鬧鐘,因此 需要一個(gè)鍵盤任務(wù)。 電腦自動(dòng)打鈴器需要有顯示功能,用來顯示時(shí)鐘和鬧鐘,因此需 要一個(gè)顯示任務(wù)。 電腦自動(dòng)打鈴器需要一個(gè)輸出控制任務(wù),用來控制鬧鐘時(shí)間到后 各路的輸出。 電腦自動(dòng)打鈴器具有實(shí)時(shí)時(shí)鐘功能,需要一個(gè)RTC中斷。 任務(wù)設(shè)計(jì)任務(wù)設(shè)計(jì)| 電腦自動(dòng)打鈴器設(shè)計(jì)與實(shí)現(xiàn)電腦自動(dòng)打鈴器設(shè)計(jì)與實(shí)現(xiàn) 任務(wù)的優(yōu)先級(jí)設(shè)計(jì)任務(wù)的優(yōu)先級(jí)設(shè)計(jì) 人機(jī)接口,實(shí)時(shí)性低 鍵盤任務(wù)鍵盤任務(wù)1 輸出控制任務(wù)輸出控制任
39、務(wù)3 顯示任務(wù)顯示任務(wù)2 RTC中斷中斷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ù)2 RTC中斷中斷4 電電 腦腦 自自 動(dòng)動(dòng) 打打 鈴鈴 器器 優(yōu)先級(jí):6 優(yōu)先級(jí):12 優(yōu)先級(jí):13 多任務(wù)之間的同步與互斥多任務(wù)之間的同步與互斥 資源互斥 在電腦自動(dòng)打鈴器的設(shè)計(jì)中,ZLG7290是通過I2C總線與cpu連接的, I2C總線是鍵盤任務(wù)和顯示任務(wù)的共享資源,必須遵循資源互斥的原則 進(jìn)行訪問,二者之間使用信號(hào)量進(jìn)行資源互斥。 鍵盤任務(wù) 顯示任務(wù) 信號(hào)量 申請(qǐng)I2C資源釋放I2C資源 申請(qǐng)I2C資源釋放I2C資源 多任務(wù)之間的信息傳遞多任務(wù)之間的信息傳遞 1.全局變量 在任務(wù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中,我們?cè)O(shè)計(jì)了時(shí)鐘和鬧鐘兩個(gè)數(shù)據(jù)結(jié)構(gòu), 并定義了時(shí)鐘和鬧鐘兩個(gè)全局變量。鍵盤任務(wù),顯示任務(wù)和RTC中斷通 過它們傳遞信息。 全局變量(時(shí)鐘和鬧鐘) 鍵盤任務(wù) 顯示任務(wù) RTC中斷 更新時(shí)鐘 檢測(cè)鬧鐘 設(shè)置時(shí)鐘和鬧鐘 顯示時(shí)鐘和鬧鐘 任
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)藥經(jīng)營(yíng)雇傭合同(2篇)
- 上海市閔行區(qū)24校聯(lián)考2025屆中考猜題生物試卷含解析
- 2025購車合同的缺陷條款有些
- 2024年度四川省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師基礎(chǔ)試題庫和答案要點(diǎn)
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師通關(guān)試題庫(有答案)
- 2025借款合同范文條例
- 2025銀行抵押借款合同模板合同范本
- 2025年P(guān)TC陶瓷片項(xiàng)目可行性研究報(bào)告
- 2024-2027年中國(guó)財(cái)富管理行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 企業(yè)文化建設(shè)的可行性研究報(bào)告項(xiàng)目進(jìn)度與時(shí)間計(jì)劃
- (完整版)病例演講比賽PPT模板
- 國(guó)開大學(xué)2020年09月1317《社會(huì)工作行政(本)》期末考試參考答案
- 通達(dá)信公式編寫學(xué)習(xí)資料
- 社會(huì)責(zé)任管理體系培訓(xùn)課件
- 房屋結(jié)構(gòu)安全隱患自查排查記錄表
- 統(tǒng)編版四年級(jí)上冊(cè)語文期末總復(fù)習(xí)知識(shí)PPT
- 《有限元分析及應(yīng)用》(曾攀清華大學(xué)出版社)第四章課后習(xí)題答案
- GB/T 9797-2005金屬覆蓋層鎳+鉻和銅+鎳+鉻電鍍層
- 醫(yī)療機(jī)構(gòu)合理用藥的指標(biāo)
- 《網(wǎng)絡(luò)文件提交系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)【論文】12000字》
- 公司倉庫檢查表
評(píng)論
0/150
提交評(píng)論