久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

嵌入式期末復(fù)習(xí)總結(jié)整理

時(shí)間:2019-05-12 13:50:18下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《嵌入式期末復(fù)習(xí)總結(jié)整理》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《嵌入式期末復(fù)習(xí)總結(jié)整理》。

第一篇:嵌入式期末復(fù)習(xí)總結(jié)整理

《嵌入式整理提綱》——YOYO左轉(zhuǎn)

題型:

1、選擇題:20分

2、填空題:20分

3、判斷題:8分

4、簡答題:16分

5、程序分析題:20分

6、編程題16分

第一章

1、嵌入式系統(tǒng)的定義:

根據(jù)IEEE的定義,嵌入式系統(tǒng)是“控制、監(jiān)視或者輔助設(shè)備、機(jī)器和車間運(yùn)行的裝置”。國內(nèi)定義:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。

2、嵌入式系統(tǒng)的組成:

嵌入式系統(tǒng)裝置由嵌入式計(jì)算機(jī)系統(tǒng)和執(zhí)行裝置組成。嵌入式計(jì)算機(jī)系統(tǒng)由硬件層、中間層、系統(tǒng)軟件層和應(yīng)用軟件層組成。(分層結(jié)構(gòu))

3、立即數(shù)(第二操作數(shù))合法性,選擇題:將一個(gè)32位數(shù)右移偶數(shù)位可以得到小于255的數(shù)為合法,否則為不合法。例如:

0x6a0=0000 0000 0000 0000 0000 0110 1010 0000 右移4位==> 0000 0000 0000 0000 0000 0000 0110 1010 = 0x6a 小于255,所以合法 0x1a600=0000 0000 0000 0001 1010 0110 0000 0000 無論右移多少偶數(shù)位,所得的數(shù)仍然大于255,所以不合法

0x16c00=0000 0000 0000 0001 0110 1100 0000 0000 右移10位==> 0000 0000 0000 0000 0000 0000 0101 1011 =0x5b小于255,所以合法

4、全稱:

AMBA: Advanced Microcontroller Bus Architecture 高級微控制器總線 ARM: Advanced RISC Machine

CISC: Complex Instruction Set Computer復(fù)雜指令集系統(tǒng) RISC: Reduced Instruction Set Computer精簡指令集系統(tǒng) RTOS: Real-time Operation System 實(shí)時(shí)多任務(wù)操作系統(tǒng) FAT: File Allocation Table 文件分配表系統(tǒng)

UCOS: Micro Controller Operation System 微控制器操作系統(tǒng)

片上系統(tǒng):System On Chip,SOC 知識產(chǎn)權(quán)核:Intellectual Property Core,IP Core IP軟核:Soft IP Core IP硬核:Hard IP Core IP固核:Firm IP Core

5、嵌入式微處理器的體系結(jié)構(gòu)可以采用馮*諾依曼體系結(jié)構(gòu)或哈佛體系結(jié)構(gòu);指令系統(tǒng)可以選用精簡指令集系統(tǒng)RISC(Reduced Instruction Set Computer)和復(fù)雜指令集系統(tǒng) 《嵌入式整理提綱》——YOYO左轉(zhuǎn)

CISC(Complex Instruction Set Computer)。

6、Cache是一種容量小、速度快的存儲器陣列,可分為數(shù)據(jù)Cache、指令Cache或混合Cache。

7、硬件層和軟件層之間為中間層,也稱為硬件抽象層(Hardware Abstract Layer,HAL)或板級支持包(Board Support Package,BSP)

8、一般可以將嵌入式處理器分為4類:嵌入式微處理器MPU、嵌入式微控制器MCU、嵌入式DSP處理器和嵌入式片上系統(tǒng)SOC。

9、DSP處理器是專門用于信號處理方面的處理器。在數(shù)字濾波、FFT、頻譜分析等領(lǐng)域獲得了大規(guī)模應(yīng)用。

10、硬實(shí)時(shí)系統(tǒng)和軟實(shí)時(shí)系統(tǒng)的實(shí)現(xiàn)區(qū)別主要是在選擇調(diào)度算法上。選擇基于優(yōu)先級調(diào)度的算法足以滿足軟實(shí)時(shí)系統(tǒng)的需求,而且可以提供高速的響應(yīng)和大的系統(tǒng)吞吐量;而對硬實(shí)時(shí)系統(tǒng)來說,需要使用的算法就應(yīng)該是調(diào)度方式簡單,反應(yīng)速度快的實(shí)時(shí)調(diào)度算法。

第二章

1、馮*諾依曼體系結(jié)構(gòu):程序和數(shù)據(jù)公用一個(gè)存儲空間,程序指令存儲地址和數(shù)據(jù)存儲地址指向同一個(gè)存儲器的不同物理位置。

哈佛體系結(jié)構(gòu):是一種將程序指令存儲和數(shù)據(jù)存儲分開的體系結(jié)構(gòu),兩者都獨(dú)立編址。

2、復(fù)雜指令集計(jì)算機(jī)CISC和精簡指令集計(jì)算機(jī)RISC

3、對于多于一個(gè)字節(jié)類型的數(shù)據(jù),在存儲器中有2種存放方式:

小端字節(jié)順序存儲法:低字節(jié)數(shù)據(jù)存放在內(nèi)存低地址處,高字節(jié)數(shù)據(jù)存放在內(nèi)存高地址處; 大端字節(jié)順序存儲法:高字節(jié)數(shù)據(jù)存放在內(nèi)存低地址處,低字節(jié)數(shù)據(jù)存放在內(nèi)存高地址處。

《嵌入式整理提綱》——YOYO左轉(zhuǎn)

4、無操作系統(tǒng)的嵌入式軟件實(shí)現(xiàn)方式:循環(huán)輪轉(zhuǎn)和前后臺系統(tǒng)。循環(huán)輪轉(zhuǎn)方式:

優(yōu)點(diǎn):簡單、直觀、開銷小、可預(yù)測;

缺點(diǎn):過于簡單,無法處理異步事件,缺乏并發(fā)處理能力。前后臺系統(tǒng):在循環(huán)輪轉(zhuǎn)方式的基礎(chǔ)上,增加了中斷處理功能。

5、嵌入式系統(tǒng)按響應(yīng)時(shí)間的敏感程度可分為實(shí)時(shí)操作系統(tǒng)和非實(shí)時(shí)操作系統(tǒng)。實(shí)時(shí)操作系統(tǒng)可分成硬實(shí)時(shí)系統(tǒng)和軟實(shí)時(shí)系統(tǒng)。

6、嵌入式操作系統(tǒng)的幾個(gè)重要概念(書P42 了解)

7、免費(fèi)型實(shí)時(shí)操作系統(tǒng):嵌入式Linux和uC/OS。

第三章

1、ARM(Advanced RISC Machine)是一種32位微處理器體系結(jié)構(gòu)。

版本ARMv1:ARM1 版本ARMv2:ARM2、ARM3

2、PC的值:當(dāng)前指令地址+8

3、指令集可以是以下任一種

bits 長(ARM狀態(tài))16 bits 長(Thumb 狀態(tài))

4、進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為1時(shí),執(zhí)行BX指令,使微處理器從ARM狀態(tài)切換到Thumb狀態(tài);

進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令,使微處理器從Thumb狀態(tài)切換到ARM狀態(tài);

5、ARM寄存器組織(P76-P80 了解)

6、ARM處理器支持7種運(yùn)行模式

用戶模式(特權(quán)模式)

快速中斷模式 外部中斷模式

管理模式

數(shù)據(jù)訪問終止模式

系統(tǒng)模式(特權(quán)模式)

《嵌入式整理提綱》——YOYO左轉(zhuǎn)

未定義指令中止模式

7、異常發(fā)生時(shí),ARM對異常作出的響應(yīng):

①保存返回地址到 LR_ ②將CPSR復(fù)制到相應(yīng)的SPSR ③根據(jù)異常類型,設(shè)置CPSR相應(yīng)的模式位 ④設(shè)置PC為相應(yīng)的異常向量

8、異常優(yōu)先級:復(fù)位(最高)、未定義指令(最低)

9、掌握ARM指令(課本P86)

10、ARM指令的尋址方式7種(課本P89重點(diǎn)掌握)

11、C語言與匯編語言混合編程(課本P101,PPT重點(diǎn))

12、Bootloader的功能:

Bootloader是操作系統(tǒng)內(nèi)核運(yùn)行之前的一段小程序。通過這段小程序,初始化最基本的硬件設(shè)備并建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader包含兩個(gè)階段,階段一即Boot階段具有引導(dǎo)功能,初始化硬件配置,通常用匯編語言編寫;階段二即Load階段完成加載功能,即將操作系統(tǒng)映像文件從ROM中加載到RAM,并將控制權(quán)交給操作系統(tǒng),通常用C語言編寫。

第四章

1、uC/OS :Micro Controller Operation System 微控制器操作系統(tǒng)

2、uC/OS-II主要特點(diǎn):公開源代碼、可移植性好、可固化、可剪裁、搶占式內(nèi)核、多任務(wù)、可確定性、任務(wù)棧、穩(wěn)定性與可靠性。(了解)

3、uC/OS-II中一個(gè)任務(wù)叫一個(gè)線程;其管理任務(wù)達(dá)64個(gè),用戶可用有56個(gè);ID號越大,等級數(shù)越低;uC/OS-II總是運(yùn)行進(jìn)入就緒態(tài)優(yōu)先級最高的任務(wù)。

4、任務(wù)調(diào)度(課本P120-123重點(diǎn))

5、uC/OS-II的初始化函數(shù)編寫 OSInit()

6、uC/OS-II的任務(wù)通信機(jī)制(P130-P132)

uC/OS-II定義了一個(gè)事件控制塊ECB來進(jìn)行任務(wù)間的信號傳遞; uC/OS-II提供了3種任務(wù)通信機(jī)制:信號量、郵箱、消息隊(duì)列。

7、uCOS-II移植的基本要求:

1)處理器的C編譯器能產(chǎn)生可重入代碼 2)在程序中可以打開或關(guān)閉中斷

3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷 4)處理器支持硬件堆棧

5)處理器有將堆棧指針和入棧、出棧的指令

8、可重入式函數(shù):指一段代碼可用被多個(gè)任務(wù)同時(shí)調(diào)用,而不必?fù)?dān)心會破壞數(shù)據(jù)。

9、堆棧增長方向設(shè)置:

OS_STK_GROWTH為0表示堆棧從下往上增長; OS_STK_GROWTH為1表示堆棧從上往下增長;

《嵌入式整理提綱》——YOYO左轉(zhuǎn)

第五章

1、三星公司推出S3C2410A處理器,基于ARM920T,采用高級微控制器總線新型總線結(jié)構(gòu)。

2、S3C2410A處理器內(nèi)核供電1.8V/2V、外存儲器和外部I/O供電為3.3V;4通道DMA;3通道UART;117個(gè)通用I/O口和24通道外部中斷源。

3、給出晶振,算CPU時(shí)鐘,有公式(書本P146,找例題做)

fclk?fin??MDIV?8??PDIV?2??2SDIV

例如:外部晶振為12MHz MPLLCON=0x62 02 2 其中MDIV=0x62=98,PDIV=0x02=2,SDIV=0x2=2 fclk?12M*(98?8)(2?2)*22?12M*1064*4?79.5MHz

4、S3C2410A處理器啟動2級引導(dǎo)方式(書本P147 了解)

5、存儲器系統(tǒng)的層次,設(shè)備從上而下,異常變得速度更慢,訪問頻率更小,容量更大,并且每個(gè)字節(jié)的造價(jià)也更加便宜。(書本 P148)

6、S3C2410A存儲系統(tǒng)特征(書本P151 了解)

第六章

1、建立文件系統(tǒng)(P197-201)

2、根據(jù)32字節(jié)目錄項(xiàng)結(jié)構(gòu),判斷是目錄還是文件,是文件的話,寫出文件名(包括后綴XXX.XX)

其中從高位數(shù),第12字節(jié)中的bit4是目錄,bit5是文件(相應(yīng)位置1就為什么)

其中前8字節(jié)為文件名,第9到第11字節(jié)為文件后綴,記得后綴前加點(diǎn)。

簡答題

(一)兩種無操作系統(tǒng)的嵌入式軟件體系結(jié)構(gòu)及其特點(diǎn):

第一種是循環(huán)輪轉(zhuǎn)方式,優(yōu)點(diǎn)是簡單,直觀,開銷小,可預(yù)測,缺點(diǎn)是過于簡單,缺乏并行處理異步事件的能力。

第二種是前后臺方式,前臺是中斷服務(wù)程序,負(fù)責(zé)處理異步事件,后臺是無限循環(huán),負(fù)責(zé)軟 《嵌入式整理提綱》——YOYO左轉(zhuǎn)

硬件資源的分配、管理以及任務(wù)的調(diào)度。前后臺通過同步信號或數(shù)據(jù)進(jìn)行交互。

(二)嵌入式應(yīng)用軟件的開發(fā)方式:

在宿主機(jī)上建立開發(fā)環(huán)境,進(jìn)行應(yīng)用程序編碼和交叉編譯,然后在宿主機(jī)和目標(biāo)機(jī)之間建立連接,將應(yīng)用程序下載到目標(biāo)機(jī)上進(jìn)行交叉調(diào)試。經(jīng)過調(diào)試和優(yōu)化,最后將應(yīng)用程序固化到目標(biāo)機(jī)中實(shí)際運(yùn)行。

(三)RISC體系結(jié)構(gòu)的特點(diǎn): ①一個(gè)大而統(tǒng)一的寄存器文件

②Load/Store結(jié)構(gòu),數(shù)據(jù)處理的操作只針對寄存器的內(nèi)容,而不是直接對存儲器進(jìn)行操作。③簡單的尋址模式,所有裝載/保存的地址都只由寄存器內(nèi)容和指令域決定。④統(tǒng)一和固定長度的指令域,簡化了指令的譯碼。⑤使用流水線降低指令尋址周期。

(四)異常發(fā)生時(shí),ARM對異常作出的響應(yīng): ①保存返回地址到 LR_ ②將CPSR復(fù)制到相應(yīng)的SPSR ③根據(jù)異常類型,設(shè)置CPSR相應(yīng)的模式位 ④設(shè)置PC為相應(yīng)的異常向量

(五)Bootloader的功能:

Bootloader是操作系統(tǒng)內(nèi)核運(yùn)行之前的一段小程序。通過這段小程序,初始化最基本的硬件設(shè)備并建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader包含兩個(gè)階段,階段一即Boot階段具有引導(dǎo)功能,初始化硬件配置,通常用匯編語言編寫;階段二即Load階段完成加載功能,即將操作系統(tǒng)映像文件從ROM中加載到RAM,并將控制權(quán)交給操作系統(tǒng),通常用C語言編寫。

(六)Nand Flash和Nor Flash在性能上的區(qū)別: 1)NOR的讀速度比NAND稍快一些 2)NAND的寫入速度比NOR快很多。《嵌入式整理提綱》——YOYO左轉(zhuǎn)

3)NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。4)大多數(shù)寫入操作需要先進(jìn)行擦除操作。

5)NAND的擦除單元更小,相應(yīng)的擦除電路更少。

(七)可剝奪和任務(wù)切換的概念:

任務(wù)切換:當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它將任務(wù)的當(dāng)前狀態(tài),即CPU寄存器中的全部內(nèi)容,保存在任務(wù)的堆棧中。入棧工作完成以后,把將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行。

可剝奪:CPU總是運(yùn)行就緒條件下優(yōu)先級最高的任務(wù)。

(八)uCOS-II移植的基本要求:

1)處理器的C編譯器能產(chǎn)生可重入代碼 2)在程序中可以打開或關(guān)閉中斷

3)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷 4)處理器支持硬件堆棧

5)處理器有堆棧指針和入棧、出棧的指令

編程:

1、流水燈;

2、串口;

3、信號量;

4、Nand Flash 《嵌入式整理提綱》——YOYO左轉(zhuǎn)

#include #define TASK_STK_SIZE

OS_STK

static void App1(void *pdata);static void App2(void *pdata);static void printf_task_info(INT8U i);

void main(int argc, char *argv[]){

}

void App1(void *pdata){

pdata=pdata;{

OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“this is app1, prio=%un”,OSPrioCur);

while(TRUE)OSInit();

/* Initialize “uC/OS-II”*/ OSTaskCreate(App1,NULL,(OS_STK *)&App1Stk[TASK_STK_SIZE-1],(INT8U)10);//任務(wù)1等級為10 NULL,(OS_STK *)&App2Stk[TASK_STK_SIZE-1],(INT8U)5);//任務(wù)2的等級為5,比任務(wù)1高 App1Stk[TASK_STK_SIZE];OS_STK

App2Stk[TASK_STK_SIZE];

OSTaskCreate(App2,OSStart();

/* Start multitasking */

OSTimeDlyHMSM(0, 0, 3, 0);

/* waiting for 3s */

} }

void App2(void *pdata){

INT8U i;INT8U err;INT8U pname[10]=“task one”;pdata=pdata;{ OS_Printf(“at time %d:n”,(INT8U)(OSTime/100));

while(TRUE)

《嵌入式整理提綱》——YOYO左轉(zhuǎn)

}

OS_Printf(“this is app2, prio=%un”,OSPrioCur);OSTimeDlyHMSM(0, 0, 4, 0);

OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“set name then suspend task onen”);OSTaskSuspend(10);OSTimeDlyHMSM(0, 0, 4, 0);

OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“Resume the task onenn”);OSTaskResume(10);OSTimeDlyHMSM(0, 0, 4, 0);OS_Printf(“nat time %d:n”,(INT8U)(OSTime/100));OS_Printf(“Delete the task onenn”);if(i=OSTaskDel(10)!= 0){

} getchar();printf(“OSTaskDel()err, the err NO is %dn”,i);return;

}

第二篇:嵌入式復(fù)習(xí)總結(jié)

一:嵌入式系統(tǒng)概述 1嵌入式定義

2嵌入式與通用計(jì)算機(jī)

A.嵌入式系統(tǒng)具有應(yīng)用針對性

B.嵌入式系統(tǒng)硬件一般對擴(kuò)展能力要求不高

C.嵌入式一般采用專門針對嵌入式應(yīng)用設(shè)計(jì)的處理器 D.嵌入式不一定有操作系統(tǒng) E.嵌入式一般有實(shí)時(shí)性要求

F.嵌入式一般有較高的成本控制要求 G.嵌入式系統(tǒng)軟件一般有固化的要求

H.嵌入式系統(tǒng)軟件一般采用交叉開發(fā)的模式

I.嵌入式在體積,功耗,可靠性和環(huán)境適應(yīng)性上一般有特殊要求 J.嵌入式標(biāo)準(zhǔn)化程度不高 3嵌入式系統(tǒng)的組成

嵌入式系統(tǒng)包括硬件和軟件兩個(gè)組成部分

嵌入式系統(tǒng)硬件部分一嵌入式處理器為核心,擴(kuò)展存儲器和外部設(shè)備控制器 嵌入式系統(tǒng)軟件運(yùn)行在硬件平臺之上,硬件抽象層向下管理硬件資源,向上為操作系統(tǒng)提供一個(gè)虛擬硬件平臺,是操作系統(tǒng)支持多硬件平臺的關(guān)鍵 4嵌入式的分類

A.按處理器位寬分類 B.按有無操作系統(tǒng)

C.按實(shí)時(shí)性(硬實(shí)時(shí):一定,軟實(shí)時(shí):從統(tǒng)計(jì)角度)D.按應(yīng)用分類

二:嵌入式處理器 1嵌入式處理器的原理

A.嵌入式的指令系統(tǒng)(一條完整的指令包括操作碼和操作數(shù))B.嵌入式處理器的類型

根據(jù)結(jié)構(gòu)可分為哈弗結(jié)構(gòu)(數(shù)據(jù)指令分開存儲,使用兩套彼此獨(dú)立的存儲總線,故可以同時(shí)訪問程序和指令)和馮諾依曼結(jié)構(gòu)(程序指令和數(shù)據(jù)采用統(tǒng)一的存儲器,尋址不能同時(shí)進(jìn)行)根據(jù)指令格式的不同可以分為復(fù)雜指令計(jì)算機(jī)處理器(CISC)和精簡指令計(jì)算機(jī)處理器(RISC)RISC的最大特點(diǎn)是指令長度固定,指令種類少,尋址方式種類少,大多數(shù)是簡單指令且都能在一個(gè)時(shí)鐘周期內(nèi)完成,易于設(shè)計(jì)高性能的流水線。

RISC還有特點(diǎn)(1)芯片面積小(2)開發(fā)時(shí)間段(3)性能高 C.嵌入式處理器的結(jié)構(gòu)(1)運(yùn)算器

包括算數(shù)邏輯單元,累加器,暫存器及標(biāo)志寄存器等(2)控制器

指令寄存器,指令譯碼器,邏輯控制電路(3)寄存器陣列及連接各部分的內(nèi)部總線 D.大端方式和小端方式

E.影響嵌入式處理器性能的因素(1)主頻

(2)指令效率與單指令執(zhí)行所需要的時(shí)間(3)處理器的字長(4)內(nèi)存總線速度(5)高緩存設(shè)計(jì)

(6)CPU的系統(tǒng)構(gòu)架 2.嵌入式處理器的分類(1)嵌入式微處理器(2)嵌入式微控制器(3)嵌入式DSP(4)嵌入式片上系統(tǒng) 3.嵌入式處理器的特點(diǎn)

(1)嵌入式處理器種類繁多,功能多樣且性能跨度大(2)嵌入式處理器功耗低

(3)提供靈活的地址空間尋址能力(4)支持靈活的功耗控制

(5)功能密集,提供豐富的外部接口 4.8051單片機(jī)

(1)采用哈弗結(jié)構(gòu),除了一個(gè)8位處理器核心外,還集成了中斷控制器,RAM,ROM,定時(shí)器和通用異步收發(fā)器。(2)主要特征:

5ARM處理器及實(shí)例 A.ARM處理器片內(nèi)總線

6嵌入式X86處理器及實(shí)例 7DSP處理器及實(shí)例

實(shí)際應(yīng)用中有兩種形式:一:一種是作為主處理器的協(xié)處理器,,,8SOC處理器及實(shí)例

9:嵌入式處理器的選擇

10:嵌入式處理器的JTAG調(diào)試接口 它在嵌入式開發(fā)過程中的重要作用 A.硬件基本功能的測試 B.軟件下載 C.軟件調(diào)試 D.Flash燒寫

三:嵌入式系統(tǒng)總線

1:計(jì)算機(jī)總線的基本概念

2嵌入式系統(tǒng)總線的特點(diǎn) A.機(jī)械結(jié)構(gòu)上的差別

B.嵌入式系統(tǒng)對總線標(biāo)準(zhǔn)功能的補(bǔ)充 3:ISA總線原理

ISA總線最初是IMB公司為PC機(jī)制定的總線標(biāo)準(zhǔn),采用8位數(shù)據(jù)寬度,能尋址1MB的地址空間。1984年IBM推出PC/AT系統(tǒng),ISA從8位擴(kuò)充到16位,地址線從20擴(kuò)充到24條,可尋址空間達(dá)到16MB,16位ISA總線時(shí)鐘頻率為8MHz,峰值數(shù)據(jù)傳輸速率為8MB/S。A:ISA總線信號(1)地址信號(2)數(shù)據(jù)信號(3)總線命令信號(4)時(shí)序控制信號(5)DMA相關(guān)信號(6)中斷相關(guān)信號

(7)總線數(shù)據(jù)寬度控制信號(8)其他信號 4:PCI總線原理

在嵌入式中以PC/104,CompactPCI,miniPCI等形式出現(xiàn) A:pci總線的特點(diǎn)(1)高性能

(2)資源豐富且成本低(3)易于使用(4)可擴(kuò)展性好(5)支持不同的平臺 B:PCI總線信號(1)系統(tǒng)信號

(2)地址與數(shù)據(jù)信號(3)接口控制信號(4)總線仲裁信號(5)錯(cuò)誤告信號(6)中斷信號(7)附加信號

(8)64位總線擴(kuò)展信號(9)JTAG邊界掃描信號 C:PCI設(shè)備的配置空間

PCI配置空間是PCI設(shè)備上一組256字節(jié)的特殊功能寄存器,用于存儲與設(shè)備相關(guān)的信息,計(jì)算機(jī)系統(tǒng)根據(jù)配置空間實(shí)現(xiàn)對PCI總線設(shè)備的管理。(1)配置空間的功能與組織(2)設(shè)備標(biāo)識

(3)設(shè)備控制寄存器(4)設(shè)備狀態(tài)寄存器(5)基址地址寄存器 5:PC/104系列總線標(biāo)準(zhǔn)

6:CompactPCI總線

CompactPCI是PCI總線的另一種工業(yè)版本,采用Eurocard結(jié)構(gòu)標(biāo)準(zhǔn),主要應(yīng)用在工業(yè),軍事,電信等行業(yè)。除了兼容桌面PCI總線所有的硬件和軟件資源外,還有一個(gè)重要特點(diǎn)——支持熱插拔,該技術(shù)對實(shí)現(xiàn)高可靠的計(jì)算機(jī)系統(tǒng)至關(guān)重要。四:嵌入式系統(tǒng)常見電路

系統(tǒng)復(fù)位與電源監(jiān)控,I2C總線,實(shí)時(shí)時(shí)鐘和RS-232串行接口是嵌入式系統(tǒng)最常見的四種基本電路

1系統(tǒng)復(fù)位與電源監(jiān)控 A.復(fù)位有四種類型(1)上電自動復(fù)位(2)手動復(fù)位(3)看門狗復(fù)位

看門狗是一種定時(shí)器,必須由軟件定期對該定時(shí)器進(jìn)行清零,否則計(jì)時(shí)器到期將產(chǎn)生系統(tǒng)復(fù)位信號,看門狗可以使系統(tǒng)在軟件崩潰/死機(jī)后自動復(fù)位。(4)系統(tǒng)異常復(fù)位

B.復(fù)位與電源管理控制器

為了產(chǎn)生更可靠的系統(tǒng)復(fù)位,可以用專用復(fù)位管理控制器如MAX705 2I2C總線原理

I2C是一種簡單的只有兩條信號線的串行總線,在嵌入式中應(yīng)用很廣泛,盡管簡單,她仍然能支持多主設(shè)備,并且具有總線仲裁的功能。3.實(shí)時(shí)時(shí)鐘 4.RS-232接口 RS-232串行接口是實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)以及計(jì)算機(jī)與外圍設(shè)備連接的一種簡單且成本低的方法,除了實(shí)現(xiàn)一般的數(shù)據(jù)通信外,在系統(tǒng)調(diào)試中還常用于實(shí)現(xiàn)程序下載和系統(tǒng)控制臺的功能。

RS-232接口支持全雙工傳輸方式,可同時(shí)收,發(fā)數(shù)據(jù),接受方的接收比特率與發(fā)送方必須相同。

是串行接口,采用負(fù)邏輯。第五章:嵌入式系統(tǒng)存儲器 1靜態(tài)隨機(jī)存儲器

SRAM容量小,成本高,在PC機(jī)中已經(jīng)不作為主存使用,但他的接口簡單,在嵌入式系統(tǒng)中還有很多應(yīng)用,常與單片機(jī),DSP等處理器配套使用。比如

IDT7146靜態(tài)RAM存儲器 2雙端口存儲器(DPRAM)雙端口RAM是一種很特殊的存儲器,有兩套讀寫端口,可以同時(shí)被兩個(gè)處理器訪問,在嵌入式系統(tǒng)中常用于實(shí)現(xiàn)兩個(gè)處理期間的緊耦合數(shù)據(jù)通信,相當(dāng)于一個(gè)共享存儲區(qū)。3同步動態(tài)隨機(jī)存儲器(DRAM)DRAM容量大,成本低,在嵌入式系統(tǒng)應(yīng)用很廣泛 4NOR Flash Flash是嵌入式系統(tǒng)中常用的一類非易失性存儲器分為NOR flash和NAND flash兩類 5NAND flash 廣泛應(yīng)用于手機(jī),PDA,數(shù)碼相機(jī),MP3播放器等 6串行EEPROM 小型價(jià)格低廉的EEPROM可作為flash的替代品

六嵌入式系統(tǒng)引導(dǎo)程序

引導(dǎo)程序是計(jì)算機(jī)系統(tǒng)上電或復(fù)位后,實(shí)現(xiàn)系統(tǒng)初始化,將系統(tǒng)引入一個(gè)可運(yùn)行的狀態(tài),并將操作系統(tǒng)加載到系統(tǒng)RAM中運(yùn)行的程序。1.PC機(jī)中的引導(dǎo)程序

BIOS的主要功能是為計(jì)算機(jī)提供最底層,最直接的硬件設(shè)置和控制,包括硬件初始化,上電自測試,I/O設(shè)備管理,中斷服務(wù),引導(dǎo)加載操作系統(tǒng)等。

BIOS并不直接加載操作系統(tǒng),而是加載操作系統(tǒng)引導(dǎo)程序,再把執(zhí)行權(quán)交給引導(dǎo)程序,由引導(dǎo)程序繼續(xù)完成操作系統(tǒng)的后續(xù)加載任務(wù)。2.嵌入式系統(tǒng)中的引導(dǎo)程序 典型的嵌入式系統(tǒng)中,軟件分為4個(gè)部分:引導(dǎo)程序,操作系統(tǒng)內(nèi)核,文件系統(tǒng)和應(yīng)用程序。應(yīng)用程序和操作系統(tǒng)內(nèi)核之間可能包括嵌入式圖形用戶界面。

在有操作系統(tǒng)的嵌入式計(jì)算機(jī)中,引導(dǎo)程序是必備的軟件,完成上電初始化,加載操作系統(tǒng)并最終啟動應(yīng)用系統(tǒng),在嵌入式系統(tǒng)中,通常由引導(dǎo)程序獨(dú)立完成硬件初始化,上電自測試及操作系統(tǒng)加載啟動等任務(wù)。A.嵌入式系統(tǒng)引導(dǎo)程序的主要功能(1)硬件初始化

(2)加載啟動嵌入式操作系統(tǒng)(3)提供人機(jī)交互命令

(4)支持目標(biāo)機(jī)與開發(fā)機(jī)之間的通信(5)支持FLASH燒寫

B.引導(dǎo)程序有兩種模式:啟動加載模式和下載模式,系統(tǒng)的最終用戶只關(guān)心啟動加載模式,而下載模式對系統(tǒng)的開發(fā)與維護(hù)有很重要的作用。3.嵌入式系統(tǒng)引導(dǎo)程序的啟動過程

A.引導(dǎo)程序的執(zhí)行過程可分為兩個(gè)階段:階段1和階段2.階段1完成硬件初始化,工作模式設(shè)置等與硬件平臺密切相關(guān)的操作,該階段的程序代碼一般用匯編語言編寫,階段2完成一些相對高級,復(fù)雜的功能,如通信,文件下載,F(xiàn)LASH燒寫,該階段的程序代碼一般由C語言實(shí)現(xiàn)。B.階段1(1)硬件設(shè)備初始化

(2)為加載引導(dǎo)程序的階段2代碼準(zhǔn)備RAM空間(3)將階段2二進(jìn)制代碼復(fù)制到RAM空間中(4)設(shè)置好堆棧指針(5)執(zhí)行階段2程序代碼 C.階段2(1)其他硬件設(shè)備的初始化(2)檢測系統(tǒng)內(nèi)存映射

(3)將操作系統(tǒng)內(nèi)核映像及文件系統(tǒng)映像從FLASH讀取到系統(tǒng)RAM中(4)為內(nèi)核設(shè)置啟動參數(shù)(5)調(diào)用內(nèi)核 4.U-Boot 是一種應(yīng)用廣泛的嵌入式引導(dǎo)程序 七嵌入式操作系統(tǒng)

嵌入式實(shí)時(shí)操作系統(tǒng)具有模塊化,可移植,可定制,高實(shí)時(shí),高可靠等特點(diǎn)。,1概述 A.與桌面 操作系統(tǒng)相比,嵌入式操作系統(tǒng)一下特點(diǎn):(1)模塊化,可定制(2)實(shí)時(shí)性強(qiáng)(3)資源占用少(4)穩(wěn)定性要求高(5)代碼有固化要求

(6)具有良好的硬件適應(yīng)性,便于移植 2.嵌入式操作系統(tǒng)硬件抽象層 3嵌入式操作系統(tǒng)實(shí)時(shí)性 A.實(shí)時(shí)系統(tǒng)具有以下特點(diǎn)

(1)實(shí)時(shí)系統(tǒng)具有復(fù)雜的約束性(2)實(shí)時(shí)任務(wù)的執(zhí)行具有可預(yù)測性(3)實(shí)時(shí)系統(tǒng)具有高可靠性的要求(4)實(shí)時(shí)系統(tǒng)需要與外部環(huán)境進(jìn)行交互(5)實(shí)時(shí)系統(tǒng)需要滿足一定的峰值負(fù)荷要求 B.嵌入式系統(tǒng)實(shí)時(shí)性 C.裸機(jī)中的實(shí)時(shí)軟件設(shè)計(jì) D.嵌入式實(shí)時(shí)操作系統(tǒng)

(1)通用操作系統(tǒng)與嵌入式操作系統(tǒng)差異 a.任務(wù)調(diào)度策略不同 b.內(nèi)存管理方式不同 c.中斷處理方式不同

d.共享資源的互斥訪問機(jī)制不同

e.系統(tǒng)調(diào)用和系統(tǒng)內(nèi)部操作的時(shí)間開銷有差別 f.系統(tǒng)的可重入性 g.輔助工具

(2)實(shí)時(shí)操作系統(tǒng)的一些要求 a.直接訪問存儲 b.高速緩存

(3)評價(jià)實(shí)時(shí)操作系統(tǒng)的方面 a.任務(wù)調(diào)度機(jī)制 b.內(nèi)存管理 c.最小內(nèi)存開銷

d.中斷禁止時(shí)間與中斷延遲時(shí)間 e.任務(wù)切換時(shí)間 4.嵌入式Linux A.嵌入式Linux的特點(diǎn)(1)支持多硬件平臺(2)高效穩(wěn)定的系統(tǒng)內(nèi)核(3)開放源碼,軟件豐富(4)完善的開發(fā)工具(5)完善的網(wǎng)絡(luò)通信(6)支持多種文件系統(tǒng)(7)支持多種圖形用戶界面 B.常見的嵌入式Linux操作系統(tǒng)(1)RTLinux(2)uCLinux(3)EOSunx和Midnux(4)

第三篇:嵌入式復(fù)習(xí)總結(jié)a4

一、嵌入式系統(tǒng)基本知識

1、什么是嵌入式系統(tǒng)、分層結(jié)構(gòu):根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”,此定義是從應(yīng)用上考慮的,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)電等附屬裝置;一般定義:“以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)”;微機(jī)學(xué)會的定義:嵌入式系統(tǒng)是以嵌入式應(yīng)用為目的的計(jì)算機(jī)系統(tǒng)。可分為系統(tǒng)級、板級、片級(系統(tǒng)級:各種類型的工控器、PC104模塊;板級:各種類型的帶CPU的主板及OEM產(chǎn)品;片級:各種以單片機(jī)、DSP、微處理器為核心的產(chǎn)品)。分層結(jié)構(gòu):嵌入式系統(tǒng):硬件、驅(qū)動、操作系統(tǒng)、中間件、應(yīng)用。

2、嵌入式系統(tǒng)與單片機(jī)、PC系統(tǒng)的區(qū)別:(單片機(jī)與嵌入式系統(tǒng)比較,一般沒有操作系統(tǒng),就沒有辦法同時(shí)運(yùn)行多個(gè)任務(wù),單片機(jī)總是運(yùn)行單個(gè)任務(wù))目前嵌入式系統(tǒng)的主流是以32位嵌入式微處理器為核心的硬件設(shè)計(jì)和基于實(shí)時(shí)操作系統(tǒng)(RTOS)的軟件設(shè)計(jì);單片機(jī)系統(tǒng)多為4位、8位、16位機(jī),不適合運(yùn)行操作系統(tǒng),難以進(jìn)行復(fù)雜的運(yùn)算及處理功能;嵌入式系統(tǒng)強(qiáng)調(diào)基于平臺的設(shè)計(jì)、軟硬件協(xié)同設(shè)計(jì),單片機(jī)大多采用軟硬件流水設(shè)計(jì);嵌入式系統(tǒng)設(shè)計(jì)的核心是軟件設(shè)計(jì)(占70%左右的工作量),單片機(jī)系統(tǒng)軟硬件設(shè)計(jì)所占比例基本相同;單片機(jī)學(xué)習(xí)一般從硬件入手,從硬件體系結(jié)構(gòu)、匯編語言到硬件設(shè)計(jì)、軟件設(shè)計(jì);嵌入式系統(tǒng)學(xué)習(xí)可以從軟件入手,從應(yīng)用層編程到操作系統(tǒng)移植、硬件平臺設(shè)計(jì)較好,按單片機(jī)設(shè)計(jì)的學(xué)習(xí)流程較難掌握。嵌入式系統(tǒng)與pc系統(tǒng)區(qū)別:嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計(jì)算平臺;嵌入式系統(tǒng)的資源比PC少得多;嵌入式系統(tǒng)軟件故障帶來的后果比PC機(jī)大得多;嵌入式系統(tǒng)一般采用實(shí)時(shí)操作系統(tǒng);嵌入式系統(tǒng)大都有成本、功耗的要求;嵌入式系統(tǒng)得到多種微處理體系的支持;嵌入式系統(tǒng)需要專用的開發(fā)工具。

3、常見的嵌入式操作系統(tǒng)有哪些?可分為商用型和免費(fèi)型。免費(fèi)型:實(shí)時(shí)操作系統(tǒng)在價(jià)格方面具有優(yōu)勢,目前主要有Linux和μC/OS,穩(wěn)定性與服務(wù)性存在挑戰(zhàn)。Linux:是開放源碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛好者又是Linux開發(fā)的強(qiáng)大技術(shù)后盾;Linux的內(nèi)核小、功能強(qiáng)大、運(yùn)行穩(wěn)定、系統(tǒng)健壯、效率高,易于定制剪裁,在價(jià)格上極具競爭力;Linux不僅支持x86 CPU,還可以支持其他數(shù)十種CPU芯片。嵌入式Linux是指對Linux經(jīng)過小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾兆字節(jié)的存儲器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場合的專用Linux操作系統(tǒng)。主要有RTLinux和CLinux。商用型:實(shí)時(shí)操作系統(tǒng)功能穩(wěn)定、可靠,有完善的技術(shù)支持和售后服務(wù),但往往價(jià)格昂貴,如Vxworks、QNX、WinCE、Palm OS等。VxWorks,是一種嵌入式實(shí)時(shí)操作系統(tǒng),具有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域牢牢占據(jù)著一席之地。特點(diǎn)是:可靠性、實(shí)時(shí)性和可裁減性;它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS、POWER PC等。Windows CE 3.0:一種針對小容量、移動式、智能化、32位、連接設(shè)備的模塊化實(shí)時(shí)嵌入式操作系統(tǒng);針對掌上設(shè)備、無線設(shè)備的動態(tài)應(yīng)用程序和服務(wù)提供了一種功能豐富的操作系統(tǒng)平臺,WindowsCE嵌入但不夠?qū)崟r(shí),屬于軟實(shí)時(shí)操作系統(tǒng);由于其Windows背景,界面比較統(tǒng)一認(rèn)可;操作系統(tǒng)的基本內(nèi)核需要至少200K的ROM。

4、嵌入式系統(tǒng)的特點(diǎn):(1)系統(tǒng)內(nèi)核小:由于嵌入式系統(tǒng)一般是應(yīng)用于小型電子裝置的,系統(tǒng)資源相對有限;(2)專用性強(qiáng):嵌入式系統(tǒng)個(gè)性化很強(qiáng),其中的軟件系統(tǒng)和硬件的結(jié)合非常緊密,一般要針對硬件進(jìn)行系統(tǒng)的移植;即使在同一品牌、同一系列的產(chǎn)品中也需要根據(jù)系統(tǒng)硬件的變化和增減不斷進(jìn)行修改;針對不同的任務(wù),往往需要對系統(tǒng)進(jìn)行較大更改,這種修改和通用軟件的“升級”是完全不同的概念;(3)系統(tǒng)精簡:嵌入式系統(tǒng)一般沒有系統(tǒng)軟件和應(yīng)用軟件的明顯區(qū)分,不要求其功能設(shè)計(jì)及實(shí)現(xiàn)上過于復(fù)雜,這樣一方面利于控制系統(tǒng)成本,同時(shí)也利于實(shí)現(xiàn)系統(tǒng)安全;(4)高實(shí)時(shí)性O(shè)S:這是嵌入式軟件的基本要求,而且軟件要求固態(tài)存儲,以提高速度。軟件代碼要求高質(zhì)量和高可靠性、實(shí)時(shí)性;(5)嵌入式軟件開發(fā)走向標(biāo)準(zhǔn)化:嵌入式系統(tǒng)的應(yīng)用程序可以沒有操作系統(tǒng)直接在芯片上運(yùn)行。為了合理地調(diào)度多任務(wù)、利用系統(tǒng)資源、系統(tǒng)函數(shù)以及和專家?guī)旌瘮?shù)接口,用戶必須自行選配RTOS開發(fā)平臺,這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開發(fā)時(shí)間,保障軟件質(zhì)量;(6)嵌入式系統(tǒng)需要開發(fā)工具和環(huán)境:其本身不具備自主開發(fā)能力,即使設(shè)計(jì)完成以后,用戶通常也是不能對其中的程序功能進(jìn)行修改,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)。

二、嵌入式系統(tǒng)的設(shè)計(jì)原則及開發(fā)方法:

1、軟硬件協(xié)同設(shè)計(jì)概念:基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進(jìn)行詳細(xì)設(shè)計(jì),為了縮短產(chǎn)品開發(fā)周期,設(shè)計(jì)往往是并行的(既是先從邏輯入手,設(shè)計(jì)出功能模塊,最后再區(qū)分是由硬件還是軟件來實(shí)現(xiàn)該功能)。舉例:SOC系統(tǒng):嵌入式片上系統(tǒng),結(jié)合許多功能區(qū)塊,將功能坐在一個(gè)芯片上,微處理器核心是通信接口單元等。SOC是追求產(chǎn)品系統(tǒng)最大包容的集成器件,最大特點(diǎn)是成功實(shí)現(xiàn)了軟硬件無縫結(jié)合,直接在處理器片內(nèi)嵌入操作系統(tǒng)的代碼模塊,運(yùn)用VHDL等硬件描述語言,不需要像傳統(tǒng)系統(tǒng)設(shè)計(jì)一樣,繪制龐大復(fù)雜的電路板,一點(diǎn)一點(diǎn)的連接焊制,只需使用精確的語言,綜合時(shí)序設(shè)計(jì),直接在器件庫中調(diào)用各種通用處理器標(biāo)準(zhǔn),通過仿真后,可交付芯片廠家進(jìn)行生產(chǎn)。

2、項(xiàng)目開發(fā)生命周期:(識別需求-提出解決方案-執(zhí)行項(xiàng)目-結(jié)束項(xiàng)目)。系統(tǒng)開發(fā)步驟:系統(tǒng)需求分析(規(guī)格說明書):確定設(shè)計(jì)任務(wù)和目標(biāo),并提煉出設(shè)計(jì)規(guī)格說明書,作為正式設(shè)計(jì)指導(dǎo)和驗(yàn)收的標(biāo)準(zhǔn)。系統(tǒng)的需求一般分功能性需求和非功能性需求兩方面。功能性需求是系統(tǒng)的基本功能,如輸入輸出信號、操作方式等;非功能需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。體系結(jié)構(gòu)設(shè)計(jì):描述系統(tǒng)如何實(shí)現(xiàn)所述的功能和非功能需求,包括對硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。一個(gè)好的體系結(jié)構(gòu)是設(shè)計(jì)成功與否的關(guān)鍵。硬件/軟件協(xié)同設(shè)計(jì):基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進(jìn)行詳細(xì)設(shè)計(jì)。為了縮短產(chǎn)品開發(fā)周期,設(shè)計(jì)往往是并行的。

系統(tǒng)集成:把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)單元設(shè)計(jì)過程中的錯(cuò)誤。系統(tǒng)測試:對設(shè)計(jì)好的系統(tǒng)進(jìn)行測試,看其是否滿足規(guī)格說明書中給定的功能要求。

三、ARM處理器體系結(jié)構(gòu):

1、馮·諾依曼體系結(jié)構(gòu):程序和數(shù)據(jù)共用一個(gè)存儲空間,CPU無法同時(shí)訪問程序和數(shù)據(jù);哈佛體系結(jié)構(gòu):程序和數(shù)據(jù)分開存放,CPU可以同時(shí)訪問程序存儲器和數(shù)據(jù)存儲器。(2)CISC:復(fù)雜指令集,具有大量的指令和尋址方式;8/2原則:80%的程序只使用20%的指令;大多數(shù)程序只使用少量的指令就能夠運(yùn)行。RISC:精簡指令集,在通道中只包含最有用的指令;確保數(shù)據(jù)通道快速執(zhí)行每一條指令;使CPU硬件結(jié)構(gòu)設(shè)計(jì)變得更為簡單。(3)體系結(jié)構(gòu)與處理器的區(qū)別:知識產(chǎn)權(quán)核(IP核):電路或核是設(shè)計(jì)好并經(jīng)過驗(yàn)證的集成電路功能單元;IP復(fù)用意味著設(shè)計(jì)代價(jià)降低(時(shí)間,價(jià)格);ARM體系結(jié)構(gòu)是知識產(chǎn)權(quán),是IP核的一種,并不是某一具體的芯片,而微處理器一般指與RAM、ROM等硬件固化在一起的某一類芯片。(4)IP核的種類:Soft Cores(“code”)(軟核):HDL語言描述;靈活度高,可修改;與工藝獨(dú)立,可根據(jù)具體的加工工藝重新綜合;IP很難保護(hù)。Firm cores(“code+structure”)(固核):邏輯綜合后的描述,與工藝相關(guān)。Hard cores(“physical”)(硬核):物理綜合后的描述,準(zhǔn)備流片,包含工藝相關(guān)的布局和時(shí)序信息,IP很容易保護(hù),多數(shù)的處理器和存儲器。

2、ARM的七種基本工作模式:User用戶模式:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式*正常程序執(zhí)行的模式;FIQ快速中斷模式:當(dāng)一個(gè)高優(yōu)先級(fast)中斷產(chǎn)生時(shí)將會進(jìn)入這種模式*高速數(shù)據(jù)傳輸和通道處理;IRQ外部中斷模式:當(dāng)一個(gè)低優(yōu)先級(normal)中斷產(chǎn)生時(shí)將會進(jìn)入這種模式*通常的中斷處理;Supervisor管理模式:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會進(jìn)入這種模式*供操作系統(tǒng)使用的一種保護(hù)模式;Abort數(shù)據(jù)訪問中止模式: 當(dāng)存取異常時(shí)將會進(jìn)入這種模式*虛擬存儲及存儲保護(hù);Undef未定義指令中止模式: 當(dāng)執(zhí)行未定義指令時(shí)會進(jìn)入這種模式*軟件仿真硬件協(xié)處理器;System系統(tǒng)模式: 使用和User模式相同寄存器集的特權(quán)模式,特權(quán)級的操作系統(tǒng)任務(wù)。注意:模式之間的轉(zhuǎn)換實(shí)際上是寄存器組之間的切換,當(dāng)使用某種寄存器組,就進(jìn)入了某種相應(yīng)的工作模式。(1)寄存器組織(37 寄存器):31 個(gè)通用32位寄存器,包括未分組寄器R0-R7、分組寄存器R8-R14、程序計(jì)數(shù)器PC(R15);6 個(gè)狀態(tài)寄存器。15個(gè)通用寄存器(R0 to R14), 以及1或者2個(gè)狀態(tài)寄存器和程序計(jì)數(shù)器在任何時(shí)候都是可以訪問的;可訪問的寄存器取決于處理器的模式;其它寄存器的狀態(tài)在支持IRQ, FIQ, 管理員, 中止和未定義模式處理時(shí)被切換。*FIR要求速度要快,故其專用的寄存器最多。(2)R0 到 R15 可以直接訪問;R0 到 R14 是通用寄存器;R13: 堆棧指針(sp)(通常);每種處理器模式都有單獨(dú)的堆棧;R14: 鏈接寄存器(lr);R15 包含程序計(jì)數(shù)器(PC);CPSR:當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模式位;5個(gè)SPSRs(程序狀態(tài)保存寄存器):當(dāng)異常發(fā)生時(shí)保存CPSR狀態(tài);SPSR和CPSR的功能是:保存ALU當(dāng)前操作信息、控制允許和禁止中斷、設(shè)置處理器操作模式。(3)程序狀態(tài)寄存器:*條件位:N = 1-結(jié)果為負(fù),0-結(jié)果為正或0;Z = 1-結(jié)果為0,0-結(jié)果不為0;C =1-進(jìn)位,0-借位;V =1-結(jié)果溢出,0結(jié)果沒溢出。*中斷禁止位:I=1:禁止IRQ;F=1:禁止FIQ。*T Bit:僅ARM xT架構(gòu)支持;T = 0:處理器處于ARM狀態(tài);T=1:處理器處于Thumb狀態(tài)。*Mode位(處理器模式位):0b10000 User;0b10001 FIQ;0b10010 IRQ;0b10011 Supervisor;0b10111 Abort;0b11011 Undefined;0b11111 System。(4)程序指針PC(r15):當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令 32 bits 寬;所有指令必須 word 對齊;所以 pc值由bits [31:2]決定, bits [1:0] 未定義(所以指令不能halfword / byte對齊)。當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令 16 bits 寬;所有指令必須 halfword 對齊;所以 pc值由bits [31:1]決定, bits [0] 未定義(所以指令不能 byte對齊)。

3、ARM的異常:(1)異常定義:內(nèi)部或外部中斷源產(chǎn)生并引起處理器處理一個(gè)事件,如外部中斷或試圖執(zhí)行未定義指令都會引起異常。處理異常之前必須保留處理器的狀態(tài)。(2)異常的類型:復(fù)位RESET:當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常的處理程序處執(zhí)行;DABT數(shù)據(jù)中止:若處理器數(shù)據(jù)訪問指令地址不存在或該地址不允許當(dāng)前指令訪問,產(chǎn)生異常;FIQ快速中斷請求:當(dāng)快速中斷請求引腳有效,且CPSR中F=0,產(chǎn)生異常;IRQ外部中斷請求:當(dāng)外部中斷請求引腳有效,且且CPSR中I=0;PABT指令預(yù)取中止:若預(yù)取指令地址不存在或該地址不允許當(dāng)前的指令訪問,存儲器向處理器發(fā)出中止信號,但是只有當(dāng)取指的指令被執(zhí)行時(shí),才產(chǎn)生異常;UDEF未定義指令:當(dāng)處理器或協(xié)處理器遇到不能處理的指令時(shí)產(chǎn)生該異常,可利用該機(jī)制進(jìn)行軟件仿真;SWI軟件中斷:由執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)操作指令,利用該異常機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。(3)異常處理過程(只能在ARM態(tài)執(zhí)行,若進(jìn)入異常前是Thumb態(tài),進(jìn)入異常后轉(zhuǎn)為ARM態(tài),返回后自動進(jìn)入Thumb):當(dāng)異常產(chǎn)生時(shí),處理器執(zhí)行以下動作:改變處理器狀態(tài)進(jìn)入 ARM 態(tài);改變處理器模式進(jìn)入相應(yīng)的異常模式;保存返回地址到 LR_;拷貝 CPSR 到 SPSR_;設(shè)置中斷禁止位禁止相應(yīng)中斷(如需要);設(shè)置PC 為相應(yīng)的異常向量。異常處理完畢后,微處理器執(zhí)行下列操作從異常返回:從LR_恢復(fù)PC,應(yīng)減去相應(yīng)的偏移量;從 SPSR_恢復(fù)CPSR;清楚中斷禁止位。注意復(fù)位異常處理程序不需返回,因?yàn)榭梢哉J(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行。(4)異常響應(yīng)過程偽代碼: R14_=Return Link SPSR_=CPSR CPSR[4:0]=Exception Mode Number CPSR[5]=0;//當(dāng)運(yùn)行于ARM狀態(tài)時(shí)

IF==Reset or FIQ then;//當(dāng)響應(yīng)FIQ異常時(shí)禁止新的FIQ異常 CPSR[6]=1;CPSR[7]=1; PC=Exception Vector Address.4、ARM寄存器與操作系統(tǒng)之間的關(guān)系:操作系統(tǒng)的設(shè)計(jì)需要硬件的支持,同時(shí)也受其制約,例如在單片機(jī)上無法運(yùn)行windows OS是因?yàn)橘Y源不夠。同時(shí)ARM寄存器組也支持操作系統(tǒng),更快地在各種模式之間轉(zhuǎn)換,無需進(jìn)行出、入棧操作,利用寄存器組提高了上下文切換的效率。

5、ARM狀態(tài)和Thumb狀態(tài)關(guān)系:在程序的執(zhí)行過程中,微處理器可以隨時(shí)地在兩種工作狀態(tài)之間切換且不影響處理器的工作模式和相應(yīng)寄存器的內(nèi)容。Thumb狀態(tài)是ARM狀態(tài)的一個(gè)映射,最終也要映射成ARM指令來執(zhí)行,但字長較小,提高空間利用率,低功耗,節(jié)省代碼空間,用于便捷設(shè)備,不能用于異常模式;ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM態(tài)。進(jìn)入Thumb態(tài)操作:當(dāng)操作數(shù)寄存器的狀態(tài)位為1時(shí),執(zhí)行BX指令,從ARM態(tài)進(jìn)入Thumb態(tài)。當(dāng)處于Thumb態(tài)時(shí)發(fā)生異常,則異常返回時(shí),自動切換回到Thumb態(tài)。進(jìn)入ARM態(tài)操作:當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令進(jìn)入ARM態(tài)。此外當(dāng)進(jìn)行異常處理時(shí),把PC指針放入異常模式鏈接寄存器R14中,并從異常向量地址開始執(zhí)行程序,也能切換到ARM態(tài);Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個(gè)子集。

四、ARM指令集:

1、ARM編程模型:(1)3級指令流水線技術(shù):幾個(gè)指令可以并行執(zhí)行,提高了CPU的運(yùn)行效率;內(nèi)部信息流要求通暢流動(為了增加處理器指令流速度,提高運(yùn)行效率);允許多個(gè)操作同時(shí)處理,比逐條指令執(zhí)行要快;PC指向正被取指的指令,而非正在執(zhí)行的指令。(2)存儲器模式:大端模式(字?jǐn)?shù)據(jù)的高位字節(jié)存儲在低地址中,字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中)和小端模式。(3)數(shù)據(jù)和指令類型:ARM采用32位架構(gòu);ARM約定:字節(jié)8位,半字16位,字32位;大部分ARM核提供ARM指令集和Thumb指令集(T變種);Jazelle 核支持Java bytecode(J變種,4TEJ),所有指令8位寬,處理器執(zhí)行字存取,一次取4條指令。

2、指令結(jié)構(gòu):采用馮?諾依曼體系結(jié)構(gòu),需要把指令從存儲器加載到寄存器,沒有專門的IO指令,故存在load/store結(jié)構(gòu)——從存儲器中讀某個(gè)值,操作完后再將其放回存儲器中。指令分類:a.數(shù)據(jù)處理指令–使用和改變寄存器的值;b.數(shù)據(jù)傳送指令–把存儲器的值拷貝到寄存器中(load)or 把寄存器中的值拷貝到存儲器中(store);c.控制流指令 :分支、分支和鏈接, 保存返回的地址,以恢復(fù)最先的次序、陷入系統(tǒng)代碼。

3、ARM與Thumb指令的關(guān)系:(1)Thumb指令的特點(diǎn):Thumb 指令的長度為 16 位,是針對代碼密度問題而提出的;所有的 Thumb 指令和編程模型與ARM指令和編程模型相對應(yīng);Thumb 子程序和 ARM 子程序就可以互相調(diào)用;Thumb 指令集中的操作數(shù)和指令地址仍為32 位 ;大多數(shù)的 Thumb指令是無條件執(zhí)行的,而幾乎所有的 ARM 指令都是有條件執(zhí)行的;Thumb不是一個(gè)完整的體系結(jié)構(gòu),不能指望處理器只執(zhí)行Thumb指令集而不支持ARM指令集。(2)Thumb 指令與ARM 指令的時(shí)間效率和空間效率關(guān)系 :Thumb 代碼所需的存儲空間約為ARM 代碼的60%~70%;Thumb 代碼使用的指令數(shù)比ARM 代碼多約30%~40%;若使用32 位的存儲器,ARM 代碼比Thumb 代碼快約40%;若使用16 位的存儲器,Thumb 代碼比ARM 代碼快約40%~50%;與ARM 代碼相比較,使用Thumb 代碼,存儲器的功耗會降低約30%。

五、典型的ARM核芯片結(jié)構(gòu):

1、LPC2000系列處理器結(jié)構(gòu):LPC2000系列微控制器將ARM7TDMI配置為小端模式;內(nèi)部存儲器包括無等待SRAM和Flash;系統(tǒng)功能包括維持芯片工作的一些基本功能,如系統(tǒng)時(shí)鐘、復(fù)位等;向量中斷控制器(VIC)可減少中斷響應(yīng)時(shí)間,最多可管理32個(gè)中斷請求;外部存儲器控制器(EMC)支持4個(gè)BANK的外部SRAM和Flash,每個(gè)BANK最大16MB;I2C串行接口為標(biāo)準(zhǔn)I2C總線接口,支持最大速度400KB;具有兩個(gè)完全獨(dú)立的SPI控制器;具有兩個(gè)UART接口,均包含16字節(jié)的接受/發(fā)送FIFO,內(nèi)置波特率發(fā)生器,UART1具調(diào)制解調(diào)接口功能;LPC2119/2129/2290/2292包含CAN總線接口;看門狗定時(shí)器;通用IO,可受5V電壓,每個(gè)IO口可獨(dú)立設(shè)置為輸入輸出模式;PWMO脈寬調(diào)制器,可靈活設(shè)置,以適應(yīng)不同的場合,單邊沿/雙邊沿輸出方式,頻率、占空比可調(diào);實(shí)時(shí)時(shí)鐘,具可編程積存時(shí)鐘分頻器,以適應(yīng)不同的晶振頻率。

2、LPC處理器的啟動過程:一般在32位ARM應(yīng)用系統(tǒng)中,大多數(shù)采用C語言進(jìn)行軟件編程,但是在運(yùn)行應(yīng)用代碼前需要進(jìn)行系統(tǒng)初始化,常用一匯編文件做啟動代碼,它可以實(shí)現(xiàn)異常向量表定義、堆棧初始化、系統(tǒng)變量初始化、地址重映射等操作。

3、時(shí)鐘編程方法

4、存儲器映射控制原理:用于控制地址范圍為0x0000-0x0037存儲區(qū)域的重新映射,該區(qū)域存放著異常向量表,發(fā)生異常時(shí),程序總是跳轉(zhuǎn)到地址為0x0000-0x0037的對應(yīng)入口處,而實(shí)際異常向量表可能存在內(nèi)部Flash、SRAM、Boot Block,為了讓運(yùn)行在不同存儲器空間的程序?qū)Ξ惓_M(jìn)行控制,可通過存儲器映射控制,將位于不同存儲空間的異常向量表重新映射到固定地址0x0000-0x0037處,以實(shí)現(xiàn)異常向量表的來源控制,通過設(shè)置存儲器映射控制寄存器的值來實(shí)現(xiàn)。流程:內(nèi)核產(chǎn)生的地址0x0000-0x0037,經(jīng)過地址轉(zhuǎn)換器后,映射到物理存儲器的地址空間(0x80000000-0x80000037(外部存儲器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x40000000-0x40000037(內(nèi)部SRAM)/0x00000000-0x00000037(內(nèi)部Flash))。

5、存儲器加速模塊MAM

6、外部存儲器控制器(EMC):EMC模塊為AHB系統(tǒng)總線和外部存儲器件之間提供了一個(gè)接口;EMC支持4個(gè)獨(dú)立配置的存儲器組,每個(gè)最大支持16MB,支持字節(jié)定位讀取。

7、GPIO:特性:可獨(dú)立控制每個(gè)GPIO的方向(輸入、輸出模式);可獨(dú)立設(shè)置每個(gè)GPIO的輸出狀態(tài);所有GPIO復(fù)位后,默認(rèn)為輸入態(tài)。IOxPIN[0-31]: GPIO引腳值;IOxDIR[0-31]:

方向控制位,寫入1-輸出,0-輸入; IOxSET[0-31]: 輸出置位,寫入1-高電平,0-無效;IOxCLR[0-31]:寫入1-清零,0-無效。示例:設(shè)置P0.0輸出高電平代碼:PINSEL0 &=0xFFFFFFFC;//設(shè)置引腳連接模塊,P0.0為GPIO IO0DIR |=0x00000001;IO0SET=0x00000001;

8、UART0

六、實(shí)時(shí)操作系統(tǒng)概念及操作系統(tǒng)原理:

1、概念:(1)實(shí)時(shí)系統(tǒng):(指任務(wù)要求在限定時(shí)間內(nèi)完成)如果邏輯和時(shí)序出現(xiàn)偏差將會引起嚴(yán)重后果的系統(tǒng)。(2)軟實(shí)時(shí)系統(tǒng):系統(tǒng)的宗旨是使各個(gè)任務(wù)運(yùn)行得越快越好,并不要求限定某一任務(wù)必須在多長時(shí)間內(nèi)完成。(3)硬實(shí)時(shí)系統(tǒng):各任務(wù)不僅要執(zhí)行無誤而且要做到準(zhǔn)時(shí)。(4)前后臺系統(tǒng):或超循環(huán)系統(tǒng),應(yīng)用程序是一個(gè)無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺行為。中斷服務(wù)程序處理異步事件,這部分可以看成前臺行為。后臺也可以叫做任務(wù)級。前臺也叫中斷級。時(shí)間相關(guān)性很強(qiáng)的關(guān)鍵操作一定是靠中斷服務(wù)來保證的。(5)代碼的臨界段:也稱為臨界區(qū),指處理時(shí)不可分割的代碼。一旦這部分代碼開始執(zhí)行,則不允許任何中斷打入。為確保臨界段代碼的執(zhí)行,在進(jìn)入臨界段之前要關(guān)中斷,而臨界段代碼執(zhí)行完以后要立即開中斷。(6)資源:任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備或一個(gè)變量,結(jié)構(gòu),數(shù)組等。(7)共享資源:可以被一個(gè)以上任務(wù)使用的資源叫做共享資源。為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占該資源,這叫做互斥。(8)多任務(wù):多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際上是靠CPU(中央處理單元)在許多任務(wù)之間轉(zhuǎn)換、調(diào)度。CPU只有一個(gè),輪番服務(wù)于一系列任務(wù)中的某一個(gè)。多任務(wù)運(yùn)行使CPU的利用率得到最大的發(fā)揮,并使應(yīng)用程序模塊化。在實(shí)時(shí)應(yīng)用中,多任務(wù)化的最大特點(diǎn)是,開發(fā)人員可以將很復(fù)雜的應(yīng)用程序?qū)哟位J褂枚嗳蝿?wù),應(yīng)用程序?qū)⒏菀自O(shè)計(jì)與維護(hù)。(9)任務(wù)狀態(tài):典型地、每個(gè)任務(wù)都是一個(gè)無限的循環(huán)。每個(gè)任務(wù)都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是休眠態(tài),就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)(等待某一事件發(fā)生)和被中斷態(tài)。休眠態(tài)相當(dāng)于該任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度。就緒意味著該任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行了,但由于該任務(wù)的優(yōu)先級比正在運(yùn)行的任務(wù)的優(yōu)先級低,還暫時(shí)不能運(yùn)行。運(yùn)行態(tài)的任務(wù)是指該任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中。掛起狀態(tài)也可以叫做等待事件態(tài)WAITING,指該任務(wù)在等待,等待某一事件的發(fā)生,(例如等待某外設(shè)的I/O操作,等待某共享資源由暫不能使用變成能使用狀態(tài),等待定時(shí)脈沖的到來或等待超時(shí)信號的到來以結(jié)束目前的等待,等等)。最后,發(fā)生中斷時(shí),CPU提供相應(yīng)的中斷服務(wù),原來正在運(yùn)行的任務(wù)暫不能運(yùn)行,就進(jìn)入了被中斷狀態(tài)。(10)任務(wù)切換:當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài),即CPU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)的當(dāng)前狀況保存區(qū),也就是任務(wù)自己的棧區(qū)之中。入棧工作完成以后,就是把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行。(11)內(nèi)核:多任務(wù)系統(tǒng)中,內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),或者說為每個(gè)任務(wù)分配CPU時(shí)間,并且負(fù)責(zé)任務(wù)之間的通訊。內(nèi)核提供的基本服務(wù)是任務(wù)切換。(12)調(diào)度:是內(nèi)核的主要職責(zé)之一,就是要決定該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)實(shí)時(shí)內(nèi)核是基于優(yōu)先級調(diào)度法的。每個(gè)任務(wù)根據(jù)其重要程度的不同被賦予一定的優(yōu)先級。基于優(yōu)先級的調(diào)度法指,CPU總是讓處在就緒態(tài)的優(yōu)先級最高的任務(wù)先運(yùn)行。(13)不可剝奪型內(nèi)核:要求每個(gè)任務(wù)自我放棄CPU的所有權(quán)。異步事件還是由中斷服務(wù)來處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來被中斷了的那個(gè)任務(wù),直到該任務(wù)主動放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)先級的任務(wù)才能獲得CPU的使用權(quán)。優(yōu)點(diǎn)是響應(yīng)中斷快;幾乎不需要使用信號量保護(hù)共享數(shù)據(jù)。缺陷在于其響應(yīng)時(shí)間,高優(yōu)先級的任務(wù)已經(jīng)進(jìn)入就緒態(tài),但還不能運(yùn)行,要等,也許要等很長時(shí)間,直到當(dāng)前運(yùn)行著的任務(wù)釋放CPU。無法保證系統(tǒng)的實(shí)時(shí)性。(14)可剝奪型內(nèi)核:最高優(yōu)先級的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。如果是中斷服務(wù)子程序使一個(gè)高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級高的那個(gè)任務(wù)開始運(yùn)行。保證了系統(tǒng)的實(shí)時(shí)性。(15)可重入型函數(shù):可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會丟失。可重入型函數(shù)或者只使用局部變量,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要予以保護(hù)。(16)時(shí)間片輪番調(diào)度法:當(dāng)兩個(gè)或兩個(gè)以上任務(wù)有同樣優(yōu)先級,內(nèi)核允許一個(gè)任務(wù)運(yùn)行事先確定的一段時(shí)間,叫做時(shí)間額度,然后切換給另一個(gè)任務(wù)。(17)任務(wù)優(yōu)先級:是表示任務(wù)被調(diào)度的優(yōu)先程度。每個(gè)任務(wù)都有其優(yōu)先級。任務(wù)越重要,賦予的優(yōu)先級應(yīng)越高。(18)靜態(tài)優(yōu)先級:應(yīng)用程序執(zhí)行過程中諸任務(wù)優(yōu)先級不變,在靜態(tài)優(yōu)先級系統(tǒng)中,諸任務(wù)以及它們的時(shí)間約束在程序編譯時(shí)是已知的。(19)動態(tài)優(yōu)先級:應(yīng)用程序執(zhí)行過程中,任務(wù)的優(yōu)先級是可變的,實(shí)時(shí)內(nèi)核應(yīng)當(dāng)避免出現(xiàn)優(yōu)先級反轉(zhuǎn)問題。(20)優(yōu)先級反轉(zhuǎn):優(yōu)先級高和優(yōu)先級低的任務(wù)在運(yùn)行時(shí),由于共享資源的占用問題,而出現(xiàn)的優(yōu)先級反轉(zhuǎn)問題,即在執(zhí)行過程中,優(yōu)先級高的任務(wù)反而要等優(yōu)先級低的任務(wù)先運(yùn)行完后,釋放共享資源,才能運(yùn)行。糾正的方法:提高正在使用共享資源的任務(wù)的優(yōu)先級,但耗費(fèi)CPU時(shí)間;內(nèi)核能自動變換任務(wù)的優(yōu)先級,稱優(yōu)先級繼承,但是UCOSII不支持。(21)任務(wù)優(yōu)先級分配:單調(diào)執(zhí)行率調(diào)度法RMS:基于哪個(gè)任務(wù)執(zhí)行的次數(shù)最頻繁,執(zhí)行最頻繁的任務(wù)優(yōu)先級最高(22)任務(wù)互斥:實(shí)現(xiàn)任務(wù)間通訊最簡便到辦法是使用共享數(shù)據(jù)結(jié)構(gòu),但是必須保證每個(gè)任務(wù)在處理共享數(shù)據(jù)時(shí)的排它性,以避免競爭和數(shù)據(jù)的破壞。與共享資源打交道時(shí),使之滿足互斥條件最一般的方法有:關(guān)中斷;使用測試并置位指令TAS;禁止做任務(wù)切換;利用信號量。(23)信號量:信號量實(shí)際上是一種約定機(jī)制,用于:控制共享資源的使用權(quán)(滿足互斥條件);標(biāo)志某事件的發(fā)生;使兩個(gè)任務(wù)的行為同步。注意:信號,只取兩個(gè)值0和1的信號量;計(jì)數(shù)器型,值有多種形式。對信號量只能實(shí)施三種操作:初始化(INITIALIZE),也可稱作建立(CREATE);等信號(WAIT)也可稱作掛起(PEND);給信號(SIGNAL)或發(fā)信號(POST)。信號量初始化時(shí)要給信號量賦初值,等待信號量的任務(wù)表(Waiting list)應(yīng)清為空。P/V操作:P操作既是減1操作,任務(wù)執(zhí)行等待(WAIT)操作,有可能執(zhí)行P操作;V操作既是加1操作,任務(wù)以發(fā)信號操作(SIGNAL)釋放信號量。(24)死鎖:也稱作抱死,指兩個(gè)任務(wù)無限期地互相等待對方控制著的資源。最簡單的防止發(fā)生死鎖的方法是讓每個(gè)任務(wù)都:先得到全部需要的資源再做下一步的工作;用同樣的順序去申請多個(gè)資源;釋放資源時(shí)使用相反的順序。(25)同步:可以利用信號量使某任務(wù)與中斷服務(wù)同步(或者是與另一個(gè)任務(wù)同步,這兩個(gè)任務(wù)間沒有數(shù)據(jù)交換)。單向同步:任務(wù)與中斷服務(wù)之間/兩任務(wù)之間;雙向同步:兩任務(wù)之間可以用信號量同步它們的行為,兩個(gè)任務(wù)需要互相等待對方執(zhí)行,等待自身所需的事件發(fā)生(信號量),同步執(zhí)行。(26)任務(wù)間的通訊:有時(shí)很需要任務(wù)間的或中斷服務(wù)與任務(wù)間的通訊。任務(wù)間信息的傳遞有兩個(gè)途徑:通過全程變量或發(fā)消息給另一個(gè)任務(wù)。用全程變量時(shí),必須保證每個(gè)任務(wù)或中斷服務(wù)程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享該變量的辦法可以是關(guān)中斷再開中斷,或使用信號量(如前面提到的那樣)。(27)消息郵箱:通過內(nèi)核服務(wù)可以給任務(wù)發(fā)送消息。典型的消息郵箱也稱作交換消息,是用一個(gè)指針型變量,通過內(nèi)核服務(wù),一個(gè)任務(wù)或一個(gè)中斷服務(wù)程序可以把一則消息(即一個(gè)指針)放到郵箱里去。同樣,一個(gè)或多個(gè)任務(wù)可以通過內(nèi)核服務(wù)接收這則消息。發(fā)送消息的任務(wù)和接收消息的任務(wù)約定,該指針指向的內(nèi)容就是那則消息。內(nèi)核一般提供以下郵箱服務(wù):郵箱內(nèi)消息的內(nèi)容初始化,郵箱里最初可以有,也可以沒有消息;將消息放入郵箱(POST);等待有消息進(jìn)入郵箱(PEND);如果郵箱內(nèi)有消息,就接受這則消息。如果郵箱里沒有消息,則任務(wù)并不被掛起(ACCEPT),用返回代碼表示調(diào)用結(jié)果,是收到了消息還是沒有收到消息。消息郵箱也可以當(dāng)作只取兩個(gè)值的信號量來用。郵箱里有消息,表示資源可以使用,而空郵箱表示資源已被其它任務(wù)占用。(28)消息隊(duì)列:消息隊(duì)列用于給任務(wù)發(fā)消息。消息隊(duì)列實(shí)際上是郵箱陣列。通常,先進(jìn)入消息隊(duì)列的消息先傳給任務(wù),也就是說,任務(wù)先得到的是最先進(jìn)入消息隊(duì)列的消息,即先進(jìn)先出原則(FIFO)。然而μC/OS-Ⅱ也允許使用后進(jìn)先出方式(LIFO)。內(nèi)核提供的消息隊(duì)列服務(wù)如下:消息隊(duì)列初始化。隊(duì)列初始化時(shí)總是清為空;放一則消息到隊(duì)列中去(Post);等待一則消息的到來(Pend);如果隊(duì)列中有消息則任務(wù)可以得到消息,但如果此時(shí)隊(duì)列為空,內(nèi)核并不將該任務(wù)掛起(Accept)。如果有消息,則消息從隊(duì)列中取走。沒有消息則用特別的返回代碼通知調(diào)用者,隊(duì)列中沒有消息。

2、任務(wù)的組成:代碼、TCB、私有堆棧。一個(gè)任務(wù)通常是一個(gè)無限的循環(huán),絕不會返回的,但可通過調(diào)用函數(shù)自我刪除,也可建立新任務(wù)。

3、OS的內(nèi)核原理:(1)任務(wù)狀態(tài)圖(任務(wù)狀態(tài)的切換過程):睡眠態(tài)(DORMANT)指任務(wù)駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理,把任務(wù)交給μC/OS-Ⅱ是通過調(diào)用下述兩個(gè)函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()。當(dāng)任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。任務(wù)的建立可以是在多任務(wù)運(yùn)行開始之前,也可以是動態(tài)地被一個(gè)運(yùn)行著的任務(wù)建立。如果一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而這個(gè)任務(wù)的優(yōu)先級高于建立它的那個(gè)任務(wù),則這個(gè)剛剛建立的任務(wù)將立即得到CPU的控制權(quán)。一個(gè)任務(wù)可以通過調(diào)用OSTaskDel()返回到睡眠態(tài),或通過調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)。調(diào)用OSStart()可以啟動多任務(wù)。OSStart()函數(shù)運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)。就緒的任務(wù)只有當(dāng)所有優(yōu)先級高于這個(gè)任務(wù)的任務(wù)轉(zhuǎn)為等待狀態(tài),或者是被刪除了,才能進(jìn)入運(yùn)行態(tài)。

正在運(yùn)行的任務(wù)可以通過調(diào)用兩個(gè)函數(shù)之一將自身延遲一段時(shí)間,這兩個(gè)函數(shù)是OSTimeDly()或OSTimeDlyHMSM()。這個(gè)任務(wù)于是進(jìn)入等待狀態(tài),等待這段時(shí)間過去,下一個(gè)優(yōu)先級最高的、并進(jìn)入了就緒態(tài)的任務(wù)立刻被賦予了CPU的控制權(quán)。等待的時(shí)間過去以后,系統(tǒng)服務(wù)函數(shù)OSTimeTick()使延遲了的任務(wù)進(jìn)入就緒態(tài)。正在運(yùn)行的任務(wù)期待某一事件的發(fā)生時(shí)也要等待,手段是調(diào)用以下3個(gè)函數(shù)之一:OSSemPend(),OSMboxPend(),或OSQPend()。調(diào)用后任務(wù)進(jìn)入了等待狀態(tài)(WAITING)。當(dāng)任務(wù)因等待事件被掛起(Pend),下一個(gè)優(yōu)先級最高的任務(wù)立即得到了CPU的控制權(quán)。當(dāng)事件發(fā)生了,被掛起的任務(wù)進(jìn)入就緒態(tài)。事件發(fā)生的報(bào)告可能來自另一個(gè)任務(wù),也可能來自中斷服務(wù)子程序。正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者μC/OS-Ⅱ?qū)⒅袛嚓P(guān)了。被中斷了的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)被掛起,中斷服務(wù)子程序控制了CPU的使用權(quán)。中斷服務(wù)子程序可能會報(bào)告一個(gè)或多個(gè)事件的發(fā)生,而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài)。在這種情況下,從中斷服務(wù)子程序返回之前,μC/OS-Ⅱ要判定,被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級最高的。如果中斷服務(wù)子程序使一個(gè)優(yōu)先級更高的任務(wù)進(jìn)入了就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級更高的任務(wù)將得以運(yùn)行,否則原來被中斷了的任務(wù)才能繼續(xù)運(yùn)行。當(dāng)所有的任務(wù)都在等待事件發(fā)生或等待延遲時(shí)間結(jié)束,μC/OS-Ⅱ執(zhí)行空閑任務(wù)(idle task),執(zhí)行OSTaskIdle()函數(shù)。(2)局部結(jié)構(gòu)——任務(wù)控制塊TCB:一旦任務(wù)建立了,任務(wù)控制塊OS_TCBs將被賦值。任務(wù)控制塊是一個(gè)數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),μC/OS-Ⅱ用它來保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行。實(shí)際上,任務(wù)狀態(tài)的改變就是修改TCB的過程,OS_TCBs全部駐留在RAM中。任務(wù)建立的時(shí)候,OS_TCBs就被初始化了。

應(yīng)用程序中可以有的最多任務(wù)數(shù)(OS_MAX_TASKS)是在文件OS_CFG.H中定義的。這個(gè)最多任務(wù)數(shù)也是μC/OS-Ⅱ分配給用戶程序的最多任務(wù)控制塊OS_TCBs的數(shù)目。將OS_MAX_TASKS的數(shù)目設(shè)置為用戶應(yīng)用程序?qū)嶋H需要的任務(wù)數(shù)可以減小RAM的需求量。所有的任務(wù)控制塊OS_TCBs都是放在任務(wù)控制塊列表數(shù)組OSTCBTbl[]中的。μC/OS-Ⅱ分配給系統(tǒng)任務(wù)OS_N_SYS_TASKS若干個(gè)任務(wù)控制塊,供其內(nèi)部使用。目前,一個(gè)用于空閑任務(wù),另一個(gè)用于任務(wù)統(tǒng)計(jì)。在μC/OS-Ⅱ初始化的時(shí)候,所有任務(wù)控制塊OS_TCBs

被鏈接成單向空任務(wù)鏈表。當(dāng)任務(wù)一旦建立,空任務(wù)控制塊指針OSTCBFreeList指向的任務(wù)控制塊便賦給了該任務(wù),然后OSTCBFreeList的值調(diào)整為指向下鏈表中下一個(gè)空的任務(wù)控制塊。一旦任務(wù)被刪除,任務(wù)控制塊就還給空任務(wù)鏈表。(3)全局結(jié)構(gòu)——就緒表:將任務(wù)放入就緒表程序清單: OSRdyGrp |= OSMapTbl[prio >> 3];OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

任務(wù)優(yōu)先級的低三位用于確定任務(wù)在總就緒表OSRdyTbl[]中的所在位。接下去的三位用于確定是在OSRdyTbl[]數(shù)組的第幾個(gè)元素。OSMapTbl[]是在ROM中的屏蔽字,用于限制OSRdyTbl[]數(shù)組的元素下標(biāo)在0到7之間。程序清單:從就緒表中刪除一個(gè)任務(wù)

if((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])== 0)OSRdyGrp &= ~OSMapTbl[prio >> 3];

程序清單:找出進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)

y = OSUnMapTbl[OSRdyGrp];

x = OSUnMapTbl[OSRdyTbl[y]];prio =(y << 3)+ x;

以上代碼將就緒任務(wù)表數(shù)組OSRdyTbl[]中相應(yīng)元素的相應(yīng)位清零,而對于OSRdyGrp,只有當(dāng)被刪除任務(wù)所在任務(wù)組中全組任務(wù)一個(gè)都沒有進(jìn)入就緒態(tài)時(shí),才將相應(yīng)位清零。算法理解:預(yù)先根據(jù)結(jié)構(gòu),先算好屏蔽字,做好準(zhǔn)備,再利用二進(jìn)制的特點(diǎn),將優(yōu)先級與查表得出的屏蔽字進(jìn)行邏輯操作,得出xy值,再對就緒表的相應(yīng)位進(jìn)行置位或清零操作,完成對就緒表的修改。利用屏蔽字是為了提高查找就緒表的速度。4)任務(wù)調(diào)度算法 void OSSched(void){

INT8U y;OS_ENTER_CRITICAL();

if((OSLockNesting | OSIntNesting)== 0){

y = OSUnMapTbl[OSRdyGrp];

OSPrioHighRdy =(INT8U)((y << 3)+ OSUnMapTbl[OSRdyTbl[y]]);

if(OSPrioHighRdy!= OSPrioCur)

{

OSTCBHighRdy= TCBPrioTbl[OSPrioHighRdy];

OSCtxSwCtr++;

OS_TASK_SW();

}

} OS_EXIT_CRITICAL();}

μC/OS-Ⅱ任務(wù)調(diào)度所花的時(shí)間是常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。

4、空閑任務(wù)(Idle Task):μC/OS-Ⅱ總是建立一個(gè)空閑任務(wù),這個(gè)任務(wù)在沒有其它任務(wù)進(jìn)入就緒態(tài)時(shí)投入運(yùn)行。空閑任務(wù)[OSTaskIdle()]永遠(yuǎn)設(shè)為最低優(yōu)先級。空閑任務(wù)OSTaskIdle()什么也不做,只是在不停地給一個(gè)32位的名叫OSIdleCtr的計(jì)數(shù)器加1,統(tǒng)計(jì)任務(wù)使用這個(gè)計(jì)數(shù)器以確定現(xiàn)行應(yīng)用軟件實(shí)際消耗的CPU時(shí)間。空閑任務(wù)不可能被應(yīng)用軟件刪除,但可以通過時(shí)間中斷喚醒其他任務(wù)進(jìn)入就緒態(tài)后,退出空閑任務(wù)。

5、統(tǒng)計(jì)任務(wù):提供運(yùn)行時(shí)間統(tǒng)計(jì)的任務(wù),叫做OSTaskStat(),如果用戶將系統(tǒng)定義常數(shù)OS_TASK_STAT_EN設(shè)為1,這個(gè)任務(wù)就會建立。一旦得到了允許,OSTaskStat()每秒鐘運(yùn)行一次,計(jì)算當(dāng)前的CPU利用率。注意:在調(diào)用系統(tǒng)啟動函數(shù)OSStart()之前,用戶初始代碼必須先建立一個(gè)任務(wù),在這個(gè)任務(wù)中調(diào)用系統(tǒng)統(tǒng)計(jì)初始化函數(shù)OSStatInit(),然后再建立應(yīng)用程序中的其它任務(wù)。

6、μC/OS-Ⅱ初始化:μC/OS-Ⅱ要求用戶首先調(diào)用系統(tǒng)初始化函數(shù)OSIint()。OSIint()初始化μC/OS-Ⅱ所有的變量和數(shù)據(jù)結(jié)構(gòu)。OSInit()建立空閑任務(wù)idle task,統(tǒng)計(jì)任務(wù)OSTaskStat()并且讓其進(jìn)入就緒態(tài)。以上兩個(gè)任務(wù)的任務(wù)控制塊(OS_TCBs)是用雙向鏈表鏈接在一起的。還初始化了4個(gè)空數(shù)據(jù)結(jié)構(gòu)緩沖區(qū):空任務(wù)控制塊緩沖區(qū)、空事件表、空隊(duì)列表、空存儲區(qū)。先做好準(zhǔn)備,目的是為了保證CPU的運(yùn)行速度。注意:初始化后數(shù)據(jù)結(jié)構(gòu):包括就緒表、優(yōu)先級表、空閑任務(wù)和統(tǒng)計(jì)任務(wù)TCB、及其各自私有堆棧。

4、μC/OS-Ⅱ的啟動:程序清單初始化和啟動μC/OS-Ⅱ: void main(void){

OSInit();/* 初始化uC/OS-II

*/..通過調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù);..OSStart();/* 開始多任務(wù)調(diào)度!OSStart()永遠(yuǎn)不會返回 */}

5、任務(wù)數(shù)據(jù)結(jié)構(gòu):void YourTask(void *pdata){ for(;;){

/* 用戶代碼 */ 調(diào)用μC/OS-Ⅱ的服務(wù)例程之一: OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);

OSTimeDly();OSTimeDlyHMSM();/* 用戶代碼 */ } } 或void YourTask(void *pdata){

/* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF);}

6、事件控制塊ECB:一個(gè)數(shù)據(jù)結(jié)構(gòu)(類似TCB),包含了事件本身的定義,如用于信號量的計(jì)數(shù)器,用于指向郵箱的指針,以及指向消息隊(duì)列的指針數(shù)組等,還定義了等待該事件的所有任務(wù)的列表。分為OSEventGrp/OSEventTbl兩個(gè)變量。任務(wù)調(diào)度算法也和TCB相似。

程序清單:將一個(gè)任務(wù)插入到事件的等待任務(wù)列表中

pevent->OSEventGrp |= OSMapTbl[prio >> 3];pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

其中,prio是任務(wù)的優(yōu)先級,pevent是指向事件控制塊的指針。該算法的原理:任務(wù)優(yōu)先級的最低3位決定了該任務(wù)在相應(yīng)的.OSEventTbl[]中的位置,緊接著的3位則決定了該任務(wù)優(yōu)先級在.OSEventTbl[]中的字節(jié)索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實(shí)現(xiàn)。(1)在μC/OS-II中,事件控制塊的總數(shù)由用戶所需要的信號量、郵箱和消息隊(duì)列的總數(shù)決定。在調(diào)用OSInit()時(shí),所有事件控制塊被鏈接成一個(gè)單向鏈表——空閑事件控制塊鏈表。每當(dāng)建立一個(gè)信號量、郵箱或者消息隊(duì)列時(shí),就從該鏈表中取出一個(gè)空閑事件控制塊,并對它進(jìn)行初始化。因?yàn)樾盘柫俊⑧]箱和消息隊(duì)列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對于事件控制塊進(jìn)行的一些通用操作包括:初始化一個(gè)事件控制塊;使一個(gè)任務(wù)進(jìn)入就緒態(tài);使一個(gè)任務(wù)進(jìn)入等待該事件的狀態(tài);因?yàn)榈却瑫r(shí)而使一個(gè)任務(wù)進(jìn)入就緒態(tài)。為了避免代碼重復(fù)和減短程代碼長度,μC/OS-II將上面的操作用4個(gè)系統(tǒng)函數(shù)實(shí)現(xiàn),它們是:OSEventWaitListInit(),OSEventTaskRdy(),OSEventWait()和OSEventTO()。

7、μC/OS-II系統(tǒng)多任務(wù)的意義:多任務(wù)使事件簡單化,任務(wù)與任務(wù)之間的關(guān)系使松耦合而不是緊耦合,每個(gè)任務(wù)只要考慮當(dāng)前事件,而不需考慮全局事件,全局事件由操作系統(tǒng)來考慮,利用操作系統(tǒng)的一些通訊機(jī)制,將多個(gè)任務(wù)聯(lián)系起來共同完成一個(gè)功能,同時(shí)采用多人機(jī)制,OS可以同時(shí)運(yùn)行多個(gè)應(yīng)用程序,提高了CPU的使用效率。

8、操作系統(tǒng)在嵌入式系統(tǒng)中的地位:操作系統(tǒng)在嵌入式系統(tǒng)中扮演管理者的角色,主要任務(wù)使完成多任務(wù)之間的調(diào)度和同步,同時(shí)也是上層應(yīng)用軟件和底層硬件的接口,負(fù)責(zé)全部軟硬件資源的分配和回收、控制與協(xié)調(diào)等并發(fā)活動。同時(shí)嵌入式實(shí)時(shí)操作系統(tǒng)提高了系統(tǒng)的可靠性;提高了開發(fā)效率,縮短了開發(fā)周期,嵌入式RTOS充分發(fā)揮了32位CPU的多任務(wù)潛力。

9、文件系統(tǒng):(定義)處理文件的操作系統(tǒng)的部分稱為文件系統(tǒng).是操作系統(tǒng)中統(tǒng)一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護(hù)手段,并且方便用戶使用。功能:文件的構(gòu)造、命名、存取、保護(hù)等。(2)基于NAND FLASH的嵌入式文件系統(tǒng):FLASH讀寫的特點(diǎn):必須以Page為單位進(jìn)行讀寫;寫之前必須先擦除原有內(nèi)容;擦除操作必須對Block進(jìn)行,即一次至少擦除一個(gè)Block的內(nèi)容。針對這種情況,將Flash的一個(gè)Page定為1個(gè)扇區(qū),將其1個(gè)Block,32個(gè)扇區(qū)定為一個(gè)簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求。(3)FLASH文件系統(tǒng)的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統(tǒng)管理結(jié)構(gòu)在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實(shí)際數(shù)據(jù)的存儲,可以提高有用數(shù)據(jù)的存儲空間。(4)FLASH文件系統(tǒng)的分類:集中管理文件系統(tǒng)、線性文件系統(tǒng)、日志文件系統(tǒng)。(5)幾種開源文件系統(tǒng):TFS(Tiny File System):線性結(jié)構(gòu)的文件系統(tǒng),優(yōu)點(diǎn):TFS提供了掉電安全機(jī)制和垃圾回收機(jī)制。需要額外的輔助空間,用于垃圾回收時(shí)的文件緩存和過程狀態(tài),如果出現(xiàn)終止,系統(tǒng)根據(jù)輔助空間的信息進(jìn)行文件系統(tǒng)的恢復(fù)。缺點(diǎn):文件的插入、剪切和個(gè)性需要較大的運(yùn)行開銷,即使是很小的修改,也要求將整個(gè)文件重寫。JFFS:主要針對NOR型Flash存儲器設(shè)計(jì),提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實(shí)現(xiàn)移植。日志文件系統(tǒng);提供了更好的崩潰、掉電安全保護(hù);jffs2支持對flash的均勻磨損;在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作功能較好;文件系統(tǒng)接近滿時(shí),JFFS2 會大大放慢運(yùn)行速度——垃圾收集。Nand上yaffs文件系統(tǒng)的優(yōu)勢:專門為Nand flash設(shè)計(jì)的日志文件系統(tǒng);jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護(hù)節(jié)點(diǎn);啟動的時(shí)候需要掃描日志節(jié)點(diǎn),不適合大容量的Nand flash;FAT系統(tǒng)沒有日志。(6)

NAND和NOR——性能比較:NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。NOR的讀速度比NAND稍快一些;NAND的寫入速度比NOR快很多;NAND的擦除速度遠(yuǎn)比NOR的快;大多數(shù)寫入操作需要先進(jìn)行擦除操作;NAND的擦除單元更小,相應(yīng)的擦除電路更少。接口差別:NOR flash帶有SRAM接口,線性尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié);NAND flash使用復(fù)用接口和控制IO多次尋址存取數(shù)據(jù);NAND讀和寫操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤管理此類操作易于取代硬盤等類似的塊設(shè)備。容量和成本:NAND flash生產(chǎn)過程更為簡單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128MB;NOR主要應(yīng)用在代碼存儲介質(zhì)中,NAND適合于數(shù)據(jù)存儲;NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲卡市場上所占份額最大。可靠性和耐用性:在NAND中每塊的最大擦寫次數(shù)是100萬次,而NOR的擦寫次數(shù)是10萬次;位交換的問題NAND flash中更突出,需要ECC糾錯(cuò);NAND flash中壞塊隨機(jī)分布,需要通過軟件標(biāo)定——產(chǎn)品量產(chǎn)的問題。(7)FAT:FAT32容量:位數(shù),32位;最大簇?cái)?shù)目,268,453,456;每簇大小4KB-32KB;最大磁盤容量,2^41(2T)。FAT文件系統(tǒng)基本結(jié)構(gòu):保留區(qū) Reserved region,存放引導(dǎo)記錄,BIOS信息等;FAT 區(qū),F(xiàn)AT信息列表(12/16/32 bits);根目錄區(qū),目錄信息列表(32 bytes);文件和目錄區(qū),存放簇信息。典型FLASH文件系統(tǒng)的結(jié)構(gòu):系統(tǒng)記錄-文件分配表-文件登記表-數(shù)據(jù)區(qū)域。文件系統(tǒng)的操作流程:打開文件OpenOSFile-操作文件ReadOSFile/WriteOSFile-關(guān)閉文件CloseOSFile。

10、GUI技術(shù):GUI的定義:Graphics User Interface, 是指計(jì)算機(jī)與其使用者之間的圖形化對話接口。GUI的主要特征:——Windows,采用窗口界面,每個(gè)窗口是用戶或系統(tǒng)的一個(gè)工作區(qū)域。一個(gè)屏幕上可以有多個(gè)窗口。——Icons,采用形象化的圖標(biāo)或圖符,易于操作者理解與操作。——Menu,采用菜單,可供用戶選擇的功能提示。——Pointing Devices,指鼠標(biāo)器、觸摸屏等,便于用戶直接對屏幕對象進(jìn)行操作。嵌入式GUI的特點(diǎn):體積小;功能強(qiáng);圖形算法簡潔、快速,占用系統(tǒng)資源少;可靠性高;模塊結(jié)構(gòu),便于移植和定制。MiniGUI:支持 GB2312 與 BIG5 字集;支持多種格式字體,例如:TrueType、Adobe Type1等;GUI函數(shù)(MoveTo、LineTo、FillBox、Rectangle、Circle、TextOut、DrawText..等)。

11、C/OS的性能特點(diǎn):公開源代碼;可移植性(Portable),絕大部分? C/OS-II的源碼是用移植性很強(qiáng)的ANSI C寫的。和微處理器硬件相關(guān)的那部分是用匯編語言寫的。匯編語言寫的部分已經(jīng)壓到最低限度,使得 C/OS-II便于移植到其他微處理器上。C/OS-II可以在絕大多數(shù)8位、16位、32位以至64位微處理器、微控制器、數(shù)字信號處理器(DSP)上運(yùn)行;可固化(ROMable),C/OS-II是為嵌入式應(yīng)用而設(shè)計(jì)的,這就意味著,只要讀者有固化手段(C編譯、連接、下載和固化),C/OS-II可以嵌入到讀者的產(chǎn)品中成為產(chǎn)品的一部分;可裁剪(Scalable),可以只使用C/OS-II中應(yīng)用程序需要的那些系統(tǒng)服務(wù)。也就是說某產(chǎn)品可以只使用很少幾個(gè)C/OS-II調(diào)用,而另一個(gè)產(chǎn)品則使用了幾乎所有? C/OS-II的功能,這樣可以減少產(chǎn)品中的C/OS-II所需的存儲器空間(RAM和ROM)。這種可剪裁性是靠條件編譯實(shí)現(xiàn)的;占先式(Preemptive);多任務(wù),C/OS-II可以管理64個(gè)任務(wù),然而,目前這一版本保留8個(gè)給系統(tǒng)。應(yīng)用程序最多可以有56個(gè)任務(wù);可確定性,全部C/OS-II的函數(shù)調(diào)用與服務(wù)的執(zhí)行時(shí)間具有可確定性;任務(wù)棧,每個(gè)任務(wù)有自己單獨(dú)的棧,C/OS-II允許每個(gè)任務(wù)有不同的棧空間,以便壓低應(yīng)用程序?qū)AM的需求;系統(tǒng)服務(wù),C/OS-II提供很多系統(tǒng)服務(wù),例如郵箱、消息隊(duì)列、信號量、塊大小固定的內(nèi)存的申請與釋放、時(shí)間相關(guān)函數(shù)等;中斷管理,中斷可以使正在執(zhí)行的任務(wù)暫時(shí)掛起,如果優(yōu)先級更高的任務(wù)被該中斷喚醒,則高優(yōu)先級的任務(wù)在中斷嵌套全部退出后立即執(zhí)行,中斷嵌套層數(shù)可達(dá)255層;穩(wěn)定性與可靠性。相關(guān)系統(tǒng)函數(shù):

OS_ENTER_CRITICAL()進(jìn)入臨界區(qū),關(guān)中斷 OSTaskResume(INT8U prio);恢復(fù)任務(wù) OS_EXIT_CRITICAL()退出臨界區(qū),開中斷 OSTaskQurery();獲得有關(guān)任務(wù)的信息 OSInit()系統(tǒng)初始化 OSTaskSuspend(INT8U prio);掛起任務(wù),只能通過OSStart()可啟動多任務(wù),運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù) OSTaskResume()來恢復(fù) OSIntEnter()時(shí)間: OSIntExit()OSTimeDly();任務(wù)延時(shí)一定的時(shí)鐘節(jié)拍 OSSchedLock()給任務(wù)調(diào)度上鎖 OSTimeDlyHMSM();任務(wù)延時(shí)一定毫秒、秒、分、小時(shí) OSSchedUnlock()給任務(wù)調(diào)度解鎖 OSTimeDlyResume();取消延時(shí),若原先任務(wù)調(diào)用延時(shí)函數(shù),OSTaskIdle()該函數(shù)可讓任務(wù)進(jìn)入就緒態(tài),而不必等到等待期滿 任務(wù): OSTimeGet()/OSTimeSet();系統(tǒng)時(shí)鐘獲取和設(shè)置 OSTaskDel(INT8U prio);非空閑任務(wù)刪除,使被刪除任務(wù)返回OSTimeTick();時(shí)鐘節(jié)拍函數(shù) 并處于休眠態(tài),釋放TCB 信號量 OSTaskCreat(*task)(void *pd), void *pdata, OS_STK *ptos, OSSemCreat(void *addr, INT32U nblks ,INT32U blksize, INT8U INT8U prio);建立任務(wù)4個(gè)參數(shù),不能由中斷服務(wù)來建立任務(wù) *err);建立一個(gè)信號量 OSTaskCreatExt();上述的擴(kuò)展版,更為靈活,9個(gè)參數(shù) OSSemPend();等待一個(gè)信號量 OSTaskChangPrio()改變?nèi)蝿?wù)優(yōu)先級,不改變?nèi)蝿?wù)狀態(tài) OSSemPost();發(fā)送一個(gè)信號量

OSSemAcccept();無等待地請求一個(gè)信號量,若信號量暫時(shí)無OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)效,也可以讓任務(wù)簡單返回而不是進(jìn)入睡眠狀態(tài) 消息隊(duì)列 OSSemQurery();查詢一個(gè)信號量的當(dāng)前狀態(tài) OSQCreat(); 郵箱(函數(shù)意義同上)OSQPost();先進(jìn)先出原則 OSMBoxCreat(void *msg)OSQPend()OSMBoxPost(OS_EVENT *pevent, void *msg)

OSQPostFront();后進(jìn)先出原則 OSMBoxAcccept(OS_EVENT *pevent)

OSQFlush();清空一個(gè)消息隊(duì)列 OSMBoxPend(OS_EVENT *pevent, INT16U timeout, int8u OSQAcccept();

OSQQurery()*err);

與FLASH存儲器的接口函數(shù):

塊擦除:unsignde char Erase_Cluster(unsigned int cluster)頁寫入:int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)頁讀出:Void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)文件系統(tǒng)相關(guān)接口函數(shù):

初始化文件系統(tǒng):Void initOSFile(char filename[],U32 OpenMode)讀文件到緩沖區(qū):U32ReadOSFile(FILE *pfile,U8 *Read Buffer, U32 n Readbyte)把緩沖區(qū)內(nèi)容寫入文件:U32WriteOSFile(FILE *pfile,U8 *Write Buffer, U32 n Writebyte)關(guān)閉文件,釋放緩沖區(qū):Void CloseOSFile(FILE *pfile)常見API函數(shù): 數(shù)據(jù)隊(duì)列:

QueueCreat();建立數(shù)據(jù)隊(duì)列 QueueSize();獲取隊(duì)列共可以存儲數(shù)據(jù)的數(shù)目 QueueWriteFront();先進(jìn)先出方式發(fā)送數(shù)據(jù) 串口驅(qū)動: QueueWrite();以后進(jìn)先出方式發(fā)送數(shù)據(jù) UART0Init();初始化UART0 QueueRead();獲取隊(duì)列中的數(shù)據(jù) UART0Putch();發(fā)送一個(gè)字節(jié) QueueFlush();清空隊(duì)列 UART0Write();發(fā)送多個(gè)字節(jié) QueueNData();獲取隊(duì)列中已存儲的數(shù)據(jù)的數(shù)目 UART0Getch();接受一個(gè)字節(jié) 調(diào)制解調(diào)器模塊

I2C: ModemInit();初始化

GetModemState();獲取Modem狀態(tài) I2CInit();

I2CWrite();

I2CRead();

SPI: ModemWrite();通過Modem發(fā)送多個(gè)字節(jié)數(shù)據(jù)

ModemGetch();從Modem獲取一個(gè)字節(jié)數(shù)據(jù) SPIInit();初始化 ModemDiaUp();通過Modem撥號 GetSPI Flag();獲取SPI狀態(tài) ModemDiaDown();掛斷Modem SPIStart();開始訪問SPI SPIRW();通過SPI發(fā)送并接受一個(gè)數(shù)據(jù)

SPIEND();訪問SPI結(jié)束

為了保證系統(tǒng)實(shí)時(shí)性,UCOII采用了哪些策略?答:占先式內(nèi)核、準(zhǔn)備工作、就緒表機(jī)制。

2、你認(rèn)為設(shè)計(jì)嵌入式操作系統(tǒng)對硬件是否有要求?硬件支持軟件,如果CPU,沒有定時(shí)器,OS時(shí)間片管理就無法實(shí)現(xiàn);Linux的虛擬內(nèi)存功能,ARM上沒有該存儲器,就無法運(yùn)行Linux。

3、UCOSII操作系統(tǒng)的就緒表用何種機(jī)制保證其實(shí)時(shí)性不受任務(wù)個(gè)數(shù)的限制?UCOSII是占先式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級最高的任務(wù)準(zhǔn)備就緒則擁有CPU的所有權(quán),開始投入運(yùn)行;不支持時(shí)間片輪轉(zhuǎn)法,每個(gè)任務(wù)優(yōu)先級是唯一的,查找準(zhǔn)備就緒的最高優(yōu)先級的任務(wù)并執(zhí)行上下文切換;UCOSII任務(wù)調(diào)度所花的時(shí)間為常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。

消息機(jī)制對于多任務(wù)系統(tǒng)的意義?使兩個(gè)任務(wù)獨(dú)立性增強(qiáng),耦合比較松散。P(s){if(s<1)wait();s--}

V(s){s++;} 嵌入式系統(tǒng)的軟/硬件框架:硬件層、驅(qū)動層、OS層、中間層和應(yīng)用層。

第四篇:嵌入式系統(tǒng)復(fù)習(xí)總結(jié)

嵌入式系統(tǒng)復(fù)習(xí)總結(jié)

一、嵌入式系統(tǒng)的概述

1.嵌入式系統(tǒng)的定義:嵌入到對象中的專業(yè)計(jì)算機(jī) 2.三大特點(diǎn):嵌入型、專業(yè)性、計(jì)算機(jī)系統(tǒng) 3.組成:軟件、硬件

4.結(jié)構(gòu)層次:應(yīng)用程序、嵌入式系統(tǒng)實(shí)時(shí)操作系統(tǒng),硬件抽象層、嵌入式系統(tǒng)硬件工作平臺

5.分類:MCU、EMPU、DSP、CPLDFPGA、SoC

二、51單片機(jī)

1.單片機(jī)的特點(diǎn):體積小、控制功能強(qiáng)、可靠性高、易擴(kuò)展易產(chǎn)品化、性能價(jià)格比高、需要開發(fā)裝置

2.51單片機(jī)的組成:CPU、64KB數(shù)據(jù)存儲器、4KB程序存儲器、兩個(gè)16位定時(shí)計(jì)數(shù)器、5個(gè)中斷源、P0~P3 4個(gè)并行IO口、4個(gè)串行

3存儲其結(jié)構(gòu)特點(diǎn):內(nèi)、外數(shù)據(jù)存儲器,內(nèi)、外程序存儲器 程序存儲器,內(nèi)外統(tǒng)一編制,地址重合區(qū)由EA決定,EA=1訪問外部,EA=0訪問內(nèi)部,內(nèi)部數(shù)據(jù)存儲器:00H~20H由32個(gè)寄存器組成,每八個(gè)一組,21H~2FH位尋址區(qū),30H~FFH用戶存儲區(qū),內(nèi)外存儲地址有指令區(qū)分MOVSMOV SFR特殊功能寄存器:ACC、B、SP、DPTR、PSW、IO宿存器 4.CPU時(shí)序電路:振蕩周期(1)、狀態(tài)周期(2)、機(jī)器周期(12)、指令周期、CPU訪問指令時(shí)兩次讀指令,訪問外部程序存儲器是ALE兩次有效,S1P2S4P2,4.單片機(jī)的引腳功能:PSEN,ALEPROG,EA 5.輸入輸出口結(jié)構(gòu):p0準(zhǔn)雙向口,每位可帶8個(gè)LSTTTL負(fù)載,輸出需要上拉電阻(準(zhǔn)雙向原因:作為輸出口,要給鎖存器1,屏蔽兩個(gè)二極管)

p1、p2均為準(zhǔn)雙向口,帶四個(gè)負(fù)載,p1也需要上拉電阻,p2自帶電阻,p2控制信號為1時(shí)輸出高八位地址 p3每個(gè)位有特殊定義 6.單片機(jī)的尋址方式:

直接尋址:SFR尋址均為直接尋址

寄存器尋址:乘法指令中B寄存器為寄存器尋 立即數(shù)尋址:

寄存器間接尋址:R0,R1 變址尋址:注意PC變址不改變PC值,DPTR變址可以隨意到任意位置取數(shù)

相對變址尋址:調(diào)轉(zhuǎn)指令 位尋址 7.單片機(jī)指令:(1)數(shù)據(jù)傳送類指令:MOVMOVXMOVC,XCHXCHDSWAP,PUSHPOP(2)數(shù)據(jù)傳送類指令:

ADDADDCINC,SUBBDEC,MUL(低位A,高位B),DIV(商A,余數(shù)B)

(3)邏輯類指令:

ANL,ORL,XRL, RL,RR,RLC,RRC, CPL(按位取反),CLR(請位)

(4)轉(zhuǎn)移類指令

AJMP,LJMP,SJMP,JMP.JZ.JNZ,CJNE,CJE,DJNZ(5)位轉(zhuǎn)移指令

JC rel ;若CY=1,則PC ←PC+ 2 + rel ;若CY=0,則PC ←PC+ 2 JNC rel ;若CY=0,則PC ←PC+ 2 + rel ;若CY=1,則PC ←PC+ 2 JB bit,rel ;若(bit)=1,則PC ←PC+ 3 + rel ;若(bit)=0,則PC ←PC+ 3 JNB bit,rel ;若(bit)=0,則PC ←PC+ 3 + rel ;若(bit)=1,則PC ←PC+ 3 JBC bit,rel ;若(bit)=1,則PC ←PC+ 3 + rel,bit←0 ;若(bit)=0,則PC ←PC+ 3 8.程序設(shè)計(jì):

冒泡法,BCD轉(zhuǎn)2進(jìn)制,2進(jìn)制轉(zhuǎn)BCD,ASCALL轉(zhuǎn)2進(jìn)制 9.偽指令:ORG,EQU 10.中斷系統(tǒng)

兩個(gè)外部中斷INT0、1,兩個(gè)定時(shí)器中斷TI0、TI1,串口中斷

中斷系統(tǒng)的組成:TCON,SCON,IE,IP

中斷響應(yīng)的條件:

有中斷請求; EA=1;

IE相應(yīng)的中斷位為1;CPU執(zhí)行指令最后一個(gè)周期;

CPU沒有執(zhí)行同級或者更高級的中斷指令; CPU不執(zhí)行RET,RETI或者讀取IEIP的指令

中斷響應(yīng)的過程:

①置位相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器,清除相應(yīng)的中斷請求標(biāo)志(TI和RI除外);

②由硬件自動生成一條長調(diào)用指令LCALL,將斷點(diǎn)地址(當(dāng)前PC值)壓入堆棧加以保護(hù);

③將中斷入口地址裝入PC,使程序轉(zhuǎn)向執(zhí)行中斷服務(wù)程序。中斷響應(yīng)時(shí)間為3~8個(gè)機(jī)器周期

中斷相應(yīng)返回時(shí): 將優(yōu)先狀態(tài)觸發(fā)器置0; 將返回地址送至PC返回

定時(shí)器中斷自動清除標(biāo)志位 外部中斷:

(1)電平觸發(fā)外部清除,或者軟件清除(2)邊緣觸發(fā)自動清除 串行口中斷軟件清除

10.定時(shí)器中斷:TCON,80H設(shè)置(T0低位,T1高位)

工作方式0:13位計(jì)數(shù)TH位高八位TL低五位表示低五位,工作方式1:16位計(jì)數(shù)

工作方式2:8位計(jì)數(shù),TL方初值,TH計(jì)數(shù)

工作方式3: TL0不變可做定時(shí)計(jì)數(shù),用T0的一套,TH0只能定時(shí)用T1的一套。T1為方式3時(shí)不工作 11.利用定時(shí)中斷溢出編程

(1)產(chǎn)生方波信號(方波信號的嵌套)

①設(shè)置TMOD控制字,確定工作方式;

②計(jì)算計(jì)數(shù)初值并裝入計(jì)數(shù)值寄存器TH0(1)、TL0(1); ③若使用中斷系統(tǒng),則開中斷EA=

1、ET0或ET1=1; ④啟動定時(shí)器/計(jì)數(shù)器工作(置TR0或TR1)。(2)外部中斷的擴(kuò)展(查詢方式,將初值設(shè)置為最大)

禁止中斷;JBC 12.串行口波特率的計(jì)算

方式0:固有頻率的12分之一

方式1、3:與三相同與T

1fOSC2SMOD??的益處時(shí)間有關(guān) 3212?2n?x?? 方式2:固有頻率的64分之一

三、ARM單片機(jī)

(1)兩種工作狀態(tài):ARM狀態(tài)(32位)、THUM狀態(tài)(16位)

工作狀態(tài)的切換:BX RN 寄存器最后一位是0切換ABM狀態(tài),最后一位是1切換到THUM狀態(tài)

(2)七種工作模式:用戶模式、系統(tǒng)模式、管理模式、外部中斷模式、快速中斷模式、未定義指令模式、數(shù)據(jù)訪問中止模式

后五個(gè)屬于“異常模式”,后六屬于“特權(quán)模式”

(3)ARM7的流水式作業(yè):取指——譯碼——執(zhí)行

采用馮諾依曼存儲結(jié)構(gòu) ARM9流水式作業(yè):取指——譯碼——執(zhí)行——訪存——回寫 采用哈佛結(jié)構(gòu)

(4)存儲其結(jié)構(gòu)(37個(gè)寄存器)

31個(gè)通用寄存器、6個(gè)標(biāo)志位寄存器 1.R0~R7八個(gè)通用寄存器(7種模式通用)2.R8~R12前六種公用,最后一種自己用一組 3.R13:堆棧指針

R14:子程序連接寄存器(子程序調(diào)用時(shí)自動將下一條地址送給R14),這兩個(gè)寄存器用戶模式、系統(tǒng)模式公用一組,異常模式每種各一組 4.R15,:PC計(jì)數(shù)器

5.CPSR:程序狀態(tài)寄存器 N.V.C.Z.Q.I.F.T.M4~M0 6.SPSR:程序狀態(tài)備用寄存器,調(diào)用子程序?qū)?dāng)前CPSR復(fù)制給SPSR,用戶模式與系統(tǒng)模式?jīng)]有,異常模式每種一組。

(5)存儲類型;

數(shù)據(jù)類型三種:8位字節(jié)、16位半字、32位字

指令類型:16位THUM、32位ARM 大端格式:與正常存儲方式相反

小端格式:高字節(jié)對應(yīng)高地址,低字節(jié)對應(yīng)低地址(6)多級存儲形式:寄存器組、片上RAM、CASHE、主存儲器

(7)異常:(其中異常模式類似于中斷)1.種類:按優(yōu)先級排列

復(fù)位、數(shù)據(jù)中止、FIQ、IRQ、指令預(yù)取終止、未定義指令終止、SWI(軟件中止)2.異常的相應(yīng)過程:

保護(hù)返回地址:將下一條地址復(fù)制到LR子程序連接寄存器中;

保護(hù)當(dāng)前狀態(tài)寄存器的值:復(fù)制CPSR至將要執(zhí)行模式的SPSR;

強(qiáng)行設(shè)置異常模式下CPSR的值;

強(qiáng)制PC從中斷向量地址取出指令執(zhí)行;

可以設(shè)置中斷禁止位;

3.中斷的返回

將返回的值寫入PC中

恢復(fù)CPSR的值

清除沖斷禁止位

4.異常返回地址的確定(LR 在復(fù)制時(shí)已自動減4)

(1)軟件中止:直接返回(2)未定義指令:直接返回

(3)FIQ、IRQ、指令預(yù)取中止:均減四返回

(4)數(shù)據(jù)中止:減八返回

(8)尋址方式

立即尋址:MOV R0, #0xFF00(8位位圖)寄存器尋址:MOV R2, R3 寄存器移位尋址:MOV R0, R1, LSL#4(6種類型的移位操作)

寄存器間接尋址:LDR R1,[R2] 變址尋址:LDR R0, [R1,#8](前變址尋址);

LDR R0, [R1,#8]!(自動變址尋址); LDR R0, [R1], #2(后變址尋址)

堆棧尋址:STMFD SP!, {R4-R7, LR}(4種類型的堆棧操作)塊復(fù)制尋址:LDMIA R1!,{R2-R4,R5}(4種塊復(fù)制尋址操作)

相對尋址:BL SUBR(9)指令集: 數(shù)據(jù)傳送:MOV、MVN 算術(shù)運(yùn)算:ADD、ADC、SUB、SBC、RSB、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 邏輯運(yùn)算:AND、ORR、EOR、BIC 比較和測試:CMP、CMN ARM程序狀態(tài)訪問指令:MSR ARM存儲器訪問指令

單一數(shù)據(jù):LDR、STR、LDRB、STRB 批量數(shù)據(jù):LDM、STM(IA、IB、DA、DB)數(shù)據(jù)交換:SWP ARM分支指令:B、BL、BX(10)偽指令與程序設(shè)計(jì) 1.偽指令

ADR:小范圍加載指令,將相對偏移量加載到某個(gè)寄存器中,只能用一條指令來實(shí)現(xiàn),若不能用一條指令來實(shí)現(xiàn)則編譯錯(cuò)誤

ADRL:中范圍加載指令,將PC的相對偏移量加載到某個(gè)寄存器中,必須用兩條指令來實(shí)現(xiàn),LDR:將某個(gè)32位偏移量加載到寄存器中

聲明變量:

全局變量:GBLA,GBLL,GBLS 局部變量:LCLA,LCLL,LCLS 變量賦值:SETA,SETL,SETS 聲明寄存器列表:RLIST 數(shù)據(jù)定義偽指令:DCB DCDU DCWU 分配一塊字節(jié)內(nèi)存單元偽操作SPACE(%)格式:標(biāo)號 SPACE expr 或 標(biāo)號 % expr 聲明數(shù)據(jù)緩沖池(文字池)偽操作LTORG 格式: LTORG 段指示偽操作AREA 格式:AREA 段名 {,屬性1} {,屬性2}… 程序入口偽操作ENTRY 格式:ENTRY(11)基本ATPCS規(guī)則

1.子程序調(diào)用過程中寄存器的使用規(guī)則

子程序間通過寄存器R0~R3來傳遞參數(shù)

在子程序中,使用寄存器R4~R11來保存局部變量 寄存器R12用作子程序內(nèi)部調(diào)用的scratch寄存器 寄存器R13用作數(shù)據(jù)棧指針,記作sp或SP 寄存器R14用作鏈接寄存器,記作lr或LR 寄存器R15是程序計(jì)數(shù)器,記作pc或PC。2.數(shù)據(jù)棧的使用規(guī)則;

數(shù)據(jù)棧為滿遞減FD類型,并對數(shù)據(jù)棧的操作是8字節(jié)對齊的

3.參數(shù)的傳遞規(guī)則。

(a)參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則

(b)參數(shù)個(gè)數(shù)固定的子程序參數(shù)傳遞規(guī)則(c)子程序結(jié)果返回規(guī)則

四、存儲器與接口技術(shù)

1.SRAM:靜態(tài)隨機(jī)訪問存儲

(1)組成:地址線、數(shù)據(jù)線、讀寫控制、片選信號線(2)工作原理:讀寫均先輸送地址,在進(jìn)行數(shù)據(jù)的輸入和輸出

(3)SRAM與CPU的鏈接: 2.DRAM:

有行地址和列地址,工作時(shí)有地址鎖存器,先輸送行地址在輸送列地址,選中單元后輸送單元,讀數(shù)據(jù)時(shí)需要刷新電路

3.SDRAM:與SRAM相比多了同步時(shí)鐘信號,同時(shí)增添了BLOCK,地址分行地址、列地址,也需要刷新電路,BLOCK為最大讀寫單元,引腳BA選擇塊兒 4.FLASH:

(1)NOR FLASH:存儲容量絞小,讀速度較快,采用線性尋址,可直接找到存儲位置

(2)HAND FLASH:存儲密度大,寫入和擦除速度較快,有BLOCK存儲單元,有塊兒地址,頁地址,頁內(nèi)地址,數(shù)據(jù)地址線復(fù)用,傳送地址需要四個(gè)周期

5.MCS-51單片機(jī)

P0口作為地址線低八位和數(shù)據(jù)線,所以需要地址鎖存器,p0口分時(shí)復(fù)用,由ALE管理,P2輸出地址高八位,PSEN接程序存儲器使能端OE 進(jìn)行存儲其擴(kuò)展時(shí)可用與門或者先選來鏈接存儲器片選信號進(jìn)行擴(kuò)展。

鏈接程序存儲器數(shù)據(jù)存儲器復(fù)用時(shí),將PSEN 與RD相與和選通相連連 6.ARM(S3C2410)存儲機(jī)制:

(1)與SRAM、DRAM相連(2)高速存儲機(jī)制:CASHE(3)NMUI 接口設(shè)計(jì):

(1)HAND FLASH啟動:將地址前4KB 的代碼作為啟動代碼

(2)ROM啟動: 可選擇16位或者32位的存儲器,通過M1、M0進(jìn)行選擇 在與存儲器進(jìn)行連接時(shí),注意地址線,若存儲器為8位直接位位對應(yīng),16位是錯(cuò)開一位,32位時(shí)錯(cuò)開兩位 7.接口 1.RS-232C 信號電平與邏輯

RS-232C信號采用負(fù)邏輯,即以+12V電平視為邏輯“0”,-12V電平視為邏輯“1”

串行接口電路中需要在TTL標(biāo)準(zhǔn)與RS-232C標(biāo)準(zhǔn)之間進(jìn)行電平轉(zhuǎn)換 2.SPI接口

總線定義及信號線構(gòu)成 傳輸技術(shù):同步、全雙工

SPI采用同步、全雙工串行傳輸技術(shù),也稱為同步串行總線接口;SPI總線(Serial Peripheral Interface)稱為串行外圍設(shè)備接口 3.USB 總線定義及信號線構(gòu)成,半雙工傳輸 三種設(shè)備Host、Device和HUB USB(Universal Serial Bus)即通用串行總線,主要用于PC與外圍設(shè)備互連。USB的輸出特性是差分驅(qū)動、支持半雙工方式,接收采用差分接收 USB體系結(jié)構(gòu)中包括三種設(shè)備 Host(即主控制器)Device(設(shè)備)

HUB(集線器,也是設(shè)備)4.I2C總線

總線定義及信號線構(gòu)成,信號線連接方式 總線仲裁

I2C總線定義了兩根傳輸線:SDA(串行數(shù)據(jù))和SCL(串行時(shí)鐘),都是雙向傳輸線,通過電阻上拉到正電源,總線空閑時(shí)都是高電平5.I2S總線

總線定義及信號線構(gòu)成 數(shù)據(jù)傳輸格式

I2S總線(Inter-IC Sound Bus集成電路內(nèi)置音頻總線 串行數(shù)據(jù)高位MSB在先,發(fā)送器和接收器可以有不同的字長無論有多少位有效數(shù)據(jù),最高位MSB總是出現(xiàn)在IISLRCK變化后的第二個(gè)IISCLK脈沖處。MSB位置固定,LSB位置取決于字長。這就使得接收端與發(fā)送端可以不同的有效位數(shù)。如果接收端能處理的有效位數(shù)少于發(fā)送端的,則可以放棄數(shù)據(jù)幀中多余的低位數(shù)據(jù);如果接收端能處理的有效位數(shù)多于發(fā)送端的,則剩余低位自行補(bǔ)0。這種同步機(jī)制使得數(shù)字音頻設(shè)備的互連更加方便,而且不會造成數(shù)據(jù)錯(cuò)位

第五篇:嵌入式復(fù)習(xí)總結(jié)

一、嵌入式系統(tǒng)基本知識

1、什么是嵌入式系統(tǒng)、分層結(jié)構(gòu):根據(jù)IEEE(國際電氣和電子工程師協(xié)會)的定義:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”,此定義是從應(yīng)用上考慮的,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)電等附屬裝置;一般定義:“以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)”;微機(jī)學(xué)會的定義:嵌入式系統(tǒng)是以嵌入式應(yīng)用為目的的計(jì)算機(jī)系統(tǒng)。可分為系統(tǒng)級、板級、片級(系統(tǒng)級:各種類型的工控器、PC104模塊;板級:各種類型的帶CPU的主板及OEM產(chǎn)品;片級:各種以單片機(jī)、DSP、微處理器為核心的產(chǎn)品)。分層結(jié)構(gòu):嵌入式系統(tǒng):硬件、驅(qū)動、操作系統(tǒng)、中間件、應(yīng)用。

2、嵌入式系統(tǒng)與單片機(jī)、PC系統(tǒng)的區(qū)別:(單片機(jī)與嵌入式系統(tǒng)比較,一般沒有操作系統(tǒng),就沒有辦法同時(shí)運(yùn)行多個(gè)任務(wù),單片機(jī)總是運(yùn)行單個(gè)任務(wù))目前嵌入式系統(tǒng)的主流是以32位嵌入式微處理器為核心的硬件設(shè)計(jì)和基于實(shí)時(shí)操作系統(tǒng)(RTOS)的軟件設(shè)計(jì);單片機(jī)系統(tǒng)多為4位、8位、16位機(jī),不適合運(yùn)行操作系統(tǒng),難以進(jìn)行復(fù)雜的運(yùn)算及處理功能;嵌入式系統(tǒng)強(qiáng)調(diào)基于平臺的設(shè)計(jì)、軟硬件協(xié)同設(shè)計(jì),單片機(jī)大多采用軟硬件流水設(shè)計(jì);嵌入式系統(tǒng)設(shè)計(jì)的核心是軟件設(shè)計(jì)(占70%左右的工作量),單片機(jī)系統(tǒng)軟硬件設(shè)計(jì)所占比例基本相同;單片機(jī)學(xué)習(xí)一般從硬件入手,從硬件體系結(jié)構(gòu)、匯編語言到硬件設(shè)計(jì)、軟件設(shè)計(jì);嵌入式系統(tǒng)學(xué)習(xí)可以從軟件入手,從應(yīng)用層編程到操作系統(tǒng)移植、硬件平臺設(shè)計(jì)較好,按單片機(jī)設(shè)計(jì)的學(xué)習(xí)流程較難掌握。嵌入式系統(tǒng)與pc系統(tǒng)區(qū)別:嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計(jì)算平臺;嵌入式系統(tǒng)的資源比PC少得多;嵌入式系統(tǒng)軟件故障帶來的后果比PC機(jī)大得多;嵌入式系統(tǒng)一般采用實(shí)時(shí)操作系統(tǒng);嵌入式系統(tǒng)大都有成本、功耗的要求;嵌入式系統(tǒng)得到多種微處理體系的支持;嵌入式系統(tǒng)需要專用的開發(fā)工具。

3、常見的嵌入式操作系統(tǒng)有哪些?可分為商用型和免費(fèi)型。免費(fèi)型:實(shí)時(shí)操作系統(tǒng)在價(jià)格方面具有優(yōu)勢,目前主要有Linux和μC/OS,穩(wěn)定性與服務(wù)性存在挑戰(zhàn)。Linux:是開放源碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛好者又是Linux開發(fā)的強(qiáng)大技術(shù)后盾;Linux的內(nèi)核小、功能強(qiáng)大、運(yùn)行穩(wěn)定、系統(tǒng)健壯、效率高,易于定制剪裁,在價(jià)格上極具競爭力;Linux不僅支持x86 CPU,還可以支持其他數(shù)十種CPU芯片。嵌入式Linux是指對Linux經(jīng)過小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾兆字節(jié)的存儲器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場合的專用Linux操作系統(tǒng)。主要有RTLinux和CLinux。商用型:實(shí)時(shí)操作系統(tǒng)功能穩(wěn)定、可靠,有完善的技術(shù)支持和售后服務(wù),但往往價(jià)格昂貴,如Vxworks、QNX、WinCE、Palm OS等。VxWorks,是一種嵌入式實(shí)時(shí)操作系統(tǒng),具有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實(shí)時(shí)操作系統(tǒng)領(lǐng)域牢牢占據(jù)著一席之地。特點(diǎn)是:可靠性、實(shí)時(shí)性和可裁減性;它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS、POWER PC等。Windows CE 3.0:一種針對小容量、移動式、智能化、32位、連接設(shè)備的模塊化實(shí)時(shí)嵌入式操作系統(tǒng);針對掌上設(shè)備、無線設(shè)備的動態(tài)應(yīng)用程序和服務(wù)提供了一種功能豐富的操作系統(tǒng)平臺,WindowsCE嵌入但不夠?qū)崟r(shí),屬于軟實(shí)時(shí)操作系統(tǒng);由于其Windows背景,界面比較統(tǒng)一認(rèn)可;操作系統(tǒng)的基本內(nèi)核需要至少200K的ROM。

4、嵌入式系統(tǒng)的特點(diǎn):(1)系統(tǒng)內(nèi)核小:由于嵌入式系統(tǒng)一般是應(yīng)用于小型電子裝置的,系統(tǒng)資源相對有限;(2)專用性強(qiáng):嵌入式系統(tǒng)個(gè)性化很強(qiáng),其中的軟件系統(tǒng)和硬件的結(jié)合非常緊密,一般要針對硬件進(jìn)行系統(tǒng)的移植;即使在同一品牌、同一系列的產(chǎn)品中也需要根據(jù)系統(tǒng)硬件的變化和增減不斷進(jìn)行修改;針對不同的任務(wù),往往需要對系統(tǒng)進(jìn)行較大更改,這種修改和通用軟件的“升級”是完全不同的概念;(3)系統(tǒng)精簡:嵌入式系統(tǒng)一般沒有系統(tǒng)軟件和應(yīng)用軟件的明顯區(qū)分,不要求其功能設(shè)計(jì)及實(shí)現(xiàn)上過于復(fù)雜,這樣一方面利于控制系統(tǒng)成本,同時(shí)也利于實(shí)現(xiàn)系統(tǒng)安全;(4)高實(shí)時(shí)性O(shè)S:這是嵌入式軟件的基本要求,而且軟件要求固態(tài)存儲,以提高速度。軟件代碼要求高質(zhì)量和高可靠性、實(shí)時(shí)性;(5)嵌入式軟件開發(fā)走向標(biāo)準(zhǔn)化:嵌入式系統(tǒng)的應(yīng)用程序可以沒有操作系統(tǒng)直接在芯片上運(yùn)行。為了合理地調(diào)度多任務(wù)、利用系統(tǒng)資源、系統(tǒng)函數(shù)以及和專家?guī)旌瘮?shù)接口,用戶必須自行選配RTOS開發(fā)平臺,這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開發(fā)時(shí)間,保障軟件質(zhì)量;(6)嵌入式系統(tǒng)需要開發(fā)工具和環(huán)境:其本身不具備自主開發(fā)能力,即使設(shè)計(jì)完成以后,用戶通常也是不能對其中的程序功能進(jìn)行修改,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)。

二、嵌入式系統(tǒng)的設(shè)計(jì)原則及開發(fā)方法:

1、軟硬件協(xié)同設(shè)計(jì)概念:基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進(jìn)行詳細(xì)設(shè)計(jì),為了縮短產(chǎn)品開發(fā)周期,設(shè)計(jì)往往是并行的(既是先從邏輯入手,設(shè)計(jì)出功能模塊,最后再區(qū)分是由硬件還是軟件來實(shí)現(xiàn)該功能)。舉例:SOC系統(tǒng):嵌入式片上系統(tǒng),結(jié)合許多功能區(qū)塊,將功能坐在一個(gè)芯片上,微處理器核心是通信接口單元等。SOC是追求產(chǎn)品系統(tǒng)最大包容的集成器件,最大特點(diǎn)是成功實(shí)現(xiàn)了軟硬件無縫結(jié)合,直接在處理器片內(nèi)嵌入操作系統(tǒng)的代碼模塊,運(yùn)用VHDL等硬件描述語言,不需要像傳統(tǒng)系統(tǒng)設(shè)計(jì)一樣,繪制龐大復(fù)雜的電路板,一點(diǎn)一點(diǎn)的連接焊制,只需使用精確的語言,綜合時(shí)序設(shè)計(jì),直接在器件庫中調(diào)用各種通用處理器標(biāo)準(zhǔn),通過仿真后,可交付芯片廠家進(jìn)行生產(chǎn)。

2、項(xiàng)目開發(fā)生命周期:(識別需求-提出解決方案-執(zhí)行項(xiàng)目-結(jié)束項(xiàng)目)。系統(tǒng)開發(fā)步驟:系統(tǒng)需求分析(規(guī)格說明書):確定設(shè)計(jì)任務(wù)和目標(biāo),并提煉出設(shè)計(jì)規(guī)格說明書,作為正式設(shè)計(jì)指導(dǎo)和驗(yàn)收的標(biāo)準(zhǔn)。系統(tǒng)的需求一般分功能性需求和非功能性需求兩方面。功能性需求是系統(tǒng)的基本功能,如輸入輸出信號、操作方式等;非功能需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。體系結(jié)構(gòu)設(shè)計(jì):描述系統(tǒng)如何實(shí)現(xiàn)所述的功能和非功能需求,包括對硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。一個(gè)好的體系結(jié)構(gòu)是設(shè)計(jì)成功與否的關(guān)鍵。硬件/軟件協(xié)同設(shè)計(jì):基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進(jìn)行詳細(xì)設(shè)計(jì)。為了縮短產(chǎn)品開發(fā)周期,設(shè)計(jì)往往是并行的。系統(tǒng)集成:把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)單元設(shè)計(jì)過程中的錯(cuò)誤。系統(tǒng)測試:對設(shè)計(jì)好的系統(tǒng)進(jìn)行測試,看其是否滿足規(guī)格說明書中給定的功能要求。

三、ARM處理器體系結(jié)構(gòu):

1、馮·諾依曼體系結(jié)構(gòu):程序和數(shù)據(jù)共用一個(gè)存儲空間,CPU無法同時(shí)訪問程序和數(shù)據(jù);哈佛體系結(jié)構(gòu):程序和數(shù)據(jù)分開存放,CPU可以同時(shí)訪問程序存儲器和數(shù)據(jù)存儲器。(2)CISC:復(fù)雜指令集,具有大量的指令和尋址方式;8/2原則:80%的程序只使用20%的指令;大多數(shù)程序只使用少量的指令就能夠運(yùn)行。RISC:精簡指令集,在通道中只包含最有用的指令;確保數(shù)據(jù)通道快速執(zhí)行每一條指令;使CPU硬件結(jié)構(gòu)設(shè)計(jì)變得更為簡單。(3)體系結(jié)構(gòu)與處理器的區(qū)別:知識產(chǎn)權(quán)核(IP核):電路或核是設(shè)計(jì)好并經(jīng)過驗(yàn)證的集成電路功能單元;IP復(fù)用意味著設(shè)計(jì)代價(jià)降低(時(shí)間,價(jià)格);ARM體系結(jié)構(gòu)是知識產(chǎn)權(quán),是IP核的一種,并不是某一具體的芯片,而微處理器一般指與RAM、ROM等硬件固化在一起的某一類芯片。(4)IP核的種類:Soft Cores(“code”)(軟核):HDL語言描述;靈活度高,可修改;與工藝獨(dú)立,可根據(jù)具體的加工工藝重新綜合;IP很難保護(hù)。Firm cores(“code+structure”)(固核):邏輯綜合后的描述,與工藝相關(guān)。Hard cores(“physical”)(硬核):物理綜合后的描述,準(zhǔn)備流片,包含工藝相關(guān)的布局和時(shí)序信息,IP很容易保護(hù),多數(shù)的處理器和存儲器。

2、ARM的七種基本工作模式:User用戶模式:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式*正常程序執(zhí)行的模式;FIQ快速中斷模式:當(dāng)一個(gè)高優(yōu)先級(fast)中斷產(chǎn)生時(shí)將會進(jìn)入這種模式*高速數(shù)據(jù)傳輸和通道處理;IRQ外部中斷模式:當(dāng)一個(gè)低優(yōu)先級(normal)中斷產(chǎn)生時(shí)將會進(jìn)入這種模式*通常的中斷處理;Supervisor管理模式:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會進(jìn)入這種模式*供操作系統(tǒng)使用的一種保護(hù)模式;Abort數(shù)據(jù)訪問中止模式: 當(dāng)存取異常時(shí)將會進(jìn)入這種模式*虛擬存儲及存儲保護(hù);Undef未定義指令中止模式: 當(dāng)執(zhí)行未定義指令時(shí)會進(jìn)入這種模式*軟件仿真硬件協(xié)處理器;System系統(tǒng)模式: 使用和User模式相同寄存器集的特權(quán)模式,特權(quán)級的操作系統(tǒng)任務(wù)。注意:模式之間的轉(zhuǎn)換實(shí)際上是寄存器組之間的切換,當(dāng)使用某種寄存器組,就進(jìn)入了某種相應(yīng)的工作模式。(1)寄存器組織(37 寄存器):31 個(gè)通用32位寄存器,包括未分組寄器R0-R7、分組寄存器R8-R14、程序計(jì)數(shù)器PC(R15);6 個(gè)狀態(tài)寄存器。15個(gè)通用寄存器(R0 to R14), 以及1或者2個(gè)狀態(tài)寄存器和程序計(jì)數(shù)器在任何時(shí)候都是可以訪問的;可訪問的寄存器取決于處理器的模式;其它寄存器的狀態(tài)在支持IRQ, FIQ, 管理員, 中止和未定義模式處理時(shí)被切換。*FIR要求速度要快,故其專用的寄存器最多。(2)R0 到 R15 可以直接訪問;R0 到 R14 是通用寄存器;R13: 堆棧指針(sp)(通常);每種處理器模式都有單獨(dú)的堆棧;R14: 鏈接寄存器(lr);R15 包含程序計(jì)數(shù)器(PC);CPSR:當(dāng)前程序狀態(tài)寄存器,包括代碼標(biāo)志狀態(tài)和當(dāng)前模式位;5個(gè)SPSRs(程序狀態(tài)保存寄存器):當(dāng)異常發(fā)生時(shí)保存CPSR狀態(tài);SPSR和CPSR的功能是:保存ALU當(dāng)前操作信息、控制允許和禁止中斷、設(shè)置處理器操作模式。(3)程序狀態(tài)寄存器:*條件位:N = 1-結(jié)果為負(fù),0-結(jié)果為正或0;Z = 1-結(jié)果為0,0-結(jié)果不為0;C =1-進(jìn)位,0-借位;V =1-結(jié)果溢出,0結(jié)果沒溢出。*中斷禁止位:I=1:禁止IRQ;F=1:禁止FIQ。*T Bit:僅ARM xT架構(gòu)支持;T = 0:處理器處于ARM狀態(tài);T=1:處理器處于Thumb狀態(tài)。*Mode位(處理器模式位):0b10000 User;0b10001 FIQ;0b10010 IRQ;0b10011 Supervisor;0b10111 Abort;0b11011 Undefined;0b11111 System。(4)程序指針PC(r15):當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令 32 bits 寬;所有指令必須 word 對齊;所以 pc值由bits [31:2]決定, bits [1:0] 未定義(所以指令不能halfword / byte對齊)。當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令 16 bits 寬;所有指令必須 halfword 對齊;所以 pc值由bits [31:1]決定, bits [0] 未定義(所以指令不能 byte對齊)。

3、ARM的異常:(1)異常定義:內(nèi)部或外部中斷源產(chǎn)生并引起處理器處理一個(gè)事件,如外部中斷或試圖執(zhí)行未定義指令都會引起異常。處理異常之前必須保留處理器的狀態(tài)。(2)異常的類型:復(fù)位RESET:當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常的處理程序處執(zhí)行;DABT數(shù)據(jù)中止:若處理器數(shù)據(jù)訪問指令地址不存在或該地址不允許當(dāng)前指令訪問,產(chǎn)生異常;FIQ快速中斷請求:當(dāng)快速中斷請求引腳有效,且CPSR中F=0,產(chǎn)生異常;IRQ外部中斷請求:當(dāng)外部中斷請求引腳有效,且且CPSR中I=0;PABT指令預(yù)取中止:若預(yù)取指令地址不存在或該地址不允許當(dāng)前的指令訪問,存儲器向處理器發(fā)出中止信號,但是只有當(dāng)取指的指令被執(zhí)行時(shí),才產(chǎn)生異常;UDEF未定義指令:當(dāng)處理器或協(xié)處理器遇到不能處理的指令時(shí)產(chǎn)生該異常,可利用該機(jī)制進(jìn)行軟件仿真;SWI軟件中斷:由執(zhí)行SWI指令產(chǎn)生,用于用戶模式下的程序調(diào)用特權(quán)操作指令,利用該異常機(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。(3)異常處理過程(只能在ARM態(tài)執(zhí)行,若進(jìn)入異常前是Thumb態(tài),進(jìn)入異常后轉(zhuǎn)為ARM態(tài),返回后自動進(jìn)入Thumb):當(dāng)異常產(chǎn)生時(shí),處理器執(zhí)行以下動作:改變處理器狀態(tài)進(jìn)入 ARM 態(tài);改變處理器模式進(jìn)入相應(yīng)的異常模式;保存返回地址到 LR_;拷貝 CPSR 到 SPSR_;設(shè)置中斷禁止位禁止相應(yīng)中斷(如需要);設(shè)置PC 為相應(yīng)的異常向量。異常處理完畢后,微處理器執(zhí)行下列操作從異常返回:從LR_恢復(fù)PC,應(yīng)減去相應(yīng)的偏移量;從 SPSR_恢復(fù)CPSR;清楚中斷禁止位。注意復(fù)位異常處理程序不需返回,因?yàn)榭梢哉J(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行。(4)異常響應(yīng)過程偽代碼:R14_=Return Link SPSR_=CPSR CPSR[4:0]=Exception Mode Number CPSR[5]=0;//當(dāng)運(yùn)行于ARM狀態(tài)時(shí) IF==Reset or FIQ then;//當(dāng)響應(yīng)FIQ異常時(shí)禁止新的FIQ異常 CPSR[6]=1; CPSR[7]=1; PC=Exception Vector Address.4、ARM寄存器與操作系統(tǒng)之間的關(guān)系:操作系統(tǒng)的設(shè)計(jì)需要硬件的支持,同時(shí)也受其制約,例如在單片機(jī)上無法運(yùn)行windows OS是因?yàn)橘Y源不夠。同時(shí)ARM寄存器組也支持操作系統(tǒng),更快地在各種模式之間轉(zhuǎn)換,無需進(jìn)行出、入棧操作,利用寄存器組提高了上下文切換的效率。

5、ARM狀態(tài)和Thumb狀態(tài)關(guān)系:在程序的執(zhí)行過程中,微處理器可以隨時(shí)地在兩種工作狀態(tài)之間切換且不影響處理器的工作模式和相應(yīng)寄存器的內(nèi)容。Thumb狀態(tài)是ARM狀態(tài)的一個(gè)映射,最終也要映射成ARM指令來執(zhí)行,但字長較小,提高空間利用率,低功耗,節(jié)省代碼空間,用于便捷設(shè)備,不能用于異常模式;ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM態(tài)。進(jìn)入Thumb態(tài)操作:當(dāng)操作數(shù)寄存器的狀態(tài)位為1時(shí),執(zhí)行BX指令,從ARM態(tài)進(jìn)入Thumb態(tài)。當(dāng)處于Thumb態(tài)時(shí)發(fā)生異常,則異常返回時(shí),自動切換回到Thumb態(tài)。進(jìn)入ARM態(tài)操作:當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行BX指令進(jìn)入ARM態(tài)。此外當(dāng)進(jìn)行異常處理時(shí),把PC指針放入異常模式鏈接寄存器R14中,并從異常向量地址開始執(zhí)行程序,也能切換到ARM態(tài);Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個(gè)子集。

四、ARM指令集:

1、ARM編程模型:(1)3級指令流水線技術(shù):幾個(gè)指令可以并行執(zhí)行,提高了CPU的運(yùn)行效率;內(nèi)部信息流要求通暢流動(為了增加處理器指令流速度,提高運(yùn)行效率);允許多個(gè)操作同時(shí)處理,比逐條指令執(zhí)行要快;PC指向正被取指的指令,而非正在執(zhí)行的指令。(2)存儲器模式:大端模式(字?jǐn)?shù)據(jù)的高位字節(jié)存儲在低地址中,字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中)和小端模式。(3)數(shù)據(jù)和指令類型:ARM采用32位架構(gòu);ARM約定:字節(jié)8位,半字16位,字32位;大部分ARM核提供ARM指令集和Thumb指令集(T變種);Jazelle 核支持Java bytecode(J變種,4TEJ),所有指令8位寬,處理器執(zhí)行字存取,一次取4條指令。

2、指令結(jié)構(gòu):采用馮?諾依曼體系結(jié)構(gòu),需要把指令從存儲器加載到寄存器,沒有專門的IO指令,故存在load/store結(jié)構(gòu)——從存儲器中讀某個(gè)值,操作完后再將其放回存儲器中。指令分類:a.數(shù)據(jù)處理指令–使用和改變寄存器的值;b.數(shù)據(jù)傳送指令–把存儲器的值拷貝到寄存器中(load)or 把寄存器中的值拷貝到存儲器中(store);c.控制流指令 :分支、分支和鏈接, 保存返回的地址,以恢復(fù)最先的次序、陷入系統(tǒng)代碼。

3、ARM與Thumb指令的關(guān)系:(1)Thumb指令的特點(diǎn):Thumb 指令的長度為 16 位,是針對代碼密度問題而提出的;所有的 Thumb 指令和編程模型與ARM指令和編程模型相對應(yīng);Thumb 子程序和 ARM 子程序就可以互相調(diào)用;Thumb 指令集中的操作數(shù)和指令地址仍為32 位 ;大多數(shù)的 Thumb指令是無條件執(zhí)行的,而幾乎所有的 ARM 指令都是有條件執(zhí)行的;Thumb不是一個(gè)完整的體系結(jié)構(gòu),不能指望處理器只執(zhí)行Thumb指令集而不支持ARM指令集。(2)Thumb 指令與ARM 指令的時(shí)間效率和空間效率關(guān)系 :Thumb 代碼所需的存儲空間約為ARM 代碼的60%~70%;Thumb 代碼使用的指令數(shù)比ARM 代碼多約30%~40%;若使用32 位的存儲器,ARM 代碼比Thumb 代碼快約40%;若使用16 位的存儲器,Thumb 代碼比ARM 代碼快約40%~50%;與ARM 代碼相比較,使用Thumb 代碼,存儲器的功耗會降低約30%。

五、典型的ARM核芯片結(jié)構(gòu):

1、LPC2000系列處理器結(jié)構(gòu):LPC2000系列微控制器將ARM7TDMI配置為小端模式;內(nèi)部存儲器包括無等待SRAM和Flash;系統(tǒng)功能包括維持芯片工作的一些基本功能,如系統(tǒng)時(shí)鐘、復(fù)位等;向量中斷控制器(VIC)可減少中斷響應(yīng)時(shí)間,最多可管理32個(gè)中斷請求;外部存儲器控制器(EMC)支持4個(gè)BANK的外部SRAM和Flash,每個(gè)BANK最大16MB;I2C串行接口為標(biāo)準(zhǔn)I2C總線接口,支持最大速度400KB;具有兩個(gè)完全獨(dú)立的SPI控制器;具有兩個(gè)UART接口,均包含16字節(jié)的接受/發(fā)送FIFO,內(nèi)置波特率發(fā)生器,UART1具調(diào)制解調(diào)接口功能;LPC2119/2129/2290/2292包含CAN總線接口;看門狗定時(shí)器;通用IO,可受5V電壓,每個(gè)IO口可獨(dú)立設(shè)置為輸入輸出模式;PWMO脈寬調(diào)制器,可靈活設(shè)置,以適應(yīng)不同的場合,單邊沿/雙邊沿輸出方式,頻率、占空比可調(diào);實(shí)時(shí)時(shí)鐘,具可編程積存時(shí)鐘分頻器,以適應(yīng)不同的晶振頻率。

2、LPC處理器的啟動過程:一般在32位ARM應(yīng)用系統(tǒng)中,大多數(shù)采用C語言進(jìn)行軟件編程,但是在運(yùn)行應(yīng)用代碼前需要進(jìn)行系統(tǒng)初始化,常用一匯編文件做啟動代碼,它可以實(shí)現(xiàn)異常向量表定義、堆棧初始化、系統(tǒng)變量初始化、地址重映射等操作。

3、時(shí)鐘編程方法:

4、存儲器映射控制原理:用于控制地址范圍為0x0000-0x0037存儲區(qū)域的重新映射,該區(qū)域存放著異常向量表,發(fā)生異常時(shí),程序總是跳轉(zhuǎn)到地址為0x0000-0x0037的對應(yīng)入口處,而實(shí)際異常向量表可能存在內(nèi)部Flash、SRAM、Boot Block,為了讓運(yùn)行在不同存儲器空間的程序?qū)Ξ惓_M(jìn)行控制,可通過存儲器映射控制,將位于不同存儲空間的異常向量表重新映射到固定地址0x0000-0x0037處,以實(shí)現(xiàn)異常向量表的來源控制,通過設(shè)置存儲器映射控制寄存器的值來實(shí)現(xiàn)。流程:內(nèi)核產(chǎn)生的地址0x0000-0x0037,經(jīng)過地址轉(zhuǎn)換器后,映射到物理存儲器的地址空間(0x80000000-0x80000037(外部存儲器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x40000000-0x40000037(內(nèi)部SRAM)/0x00000000-0x00000037(內(nèi)部Flash))。

5、存儲器加速模塊MAM:

6、外部存儲器控制器(EMC):EMC模塊為AHB系統(tǒng)總線和外部存儲器件之間提供了一個(gè)接口;EMC支持4個(gè)獨(dú)立配置的存儲器組,每個(gè)最大支持16MB,支持字節(jié)定位讀取。

7、GPIO:特性:可獨(dú)立控制每個(gè)GPIO的方向(輸入、輸出模式);可獨(dú)立設(shè)置每個(gè)GPIO的輸出狀態(tài);所有GPIO復(fù)位后,默認(rèn)為輸入態(tài)。IOxPIN[0-31]: GPIO引腳值;IOxDIR[0-31]:方向控制位,寫入1-輸出,0-輸入; IOxSET[0-31]: 輸出置位,寫入1-高電平,0-無效;IOxCLR[0-31]:寫入1-清零,0-無效。示例:設(shè)置P0.0輸出高電平代碼:PINSEL0 &=0xFFFFFFFC;//設(shè)置引腳連接模塊,P0.0為GPIO IO0DIR |=0x00000001;IO0SET=0x00000001;

8、UART0

六、實(shí)時(shí)操作系統(tǒng)概念及操作系統(tǒng)原理:

1、概念:(1)實(shí)時(shí)系統(tǒng):(指任務(wù)要求在限定時(shí)間內(nèi)完成)如果邏輯和時(shí)序出現(xiàn)偏差將會引起嚴(yán)重后果的系統(tǒng)。(2)軟實(shí)時(shí)系統(tǒng):系統(tǒng)的宗旨是使各個(gè)任務(wù)運(yùn)行得越快越好,并不要求限定某一任務(wù)必須在多長時(shí)間內(nèi)完成。(3)硬實(shí)時(shí)系統(tǒng):各任務(wù)不僅要執(zhí)行無誤而且要做到準(zhǔn)時(shí)。(4)前后臺系統(tǒng):或超循環(huán)系統(tǒng),應(yīng)用程序是一個(gè)無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺行為。中斷服務(wù)程序處理異步事件,這部分可以看成前臺行為。后臺也可以叫做任務(wù)級。前臺也叫中斷級。時(shí)間相關(guān)性很強(qiáng)的關(guān)鍵操作一定是靠中斷服務(wù)來保證的。(5)代碼的臨界段:也稱為臨界區(qū),指處理時(shí)不可分割的代碼。一旦這部分代碼開始執(zhí)行,則不允許任何中斷打入。為確保臨界段代碼的執(zhí)行,在進(jìn)入臨界段之前要關(guān)中斷,而臨界段代碼執(zhí)行完以后要立即開中斷。(6)資源:任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備或一個(gè)變量,結(jié)構(gòu),數(shù)組等。(7)共享資源:可以被一個(gè)以上任務(wù)使用的資源叫做共享資源。為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占該資源,這叫做互斥。(8)多任務(wù):多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際上是靠CPU(中央處理單元)在許多任務(wù)之間轉(zhuǎn)換、調(diào)度。CPU只有一個(gè),輪番服務(wù)于一系列任務(wù)中的某一個(gè)。多任務(wù)運(yùn)行使CPU的利用率得到最大的發(fā)揮,并使應(yīng)用程序模塊化。在實(shí)時(shí)應(yīng)用中,多任務(wù)化的最大特點(diǎn)是,開發(fā)人員可以將很復(fù)雜的應(yīng)用程序?qū)哟位J褂枚嗳蝿?wù),應(yīng)用程序?qū)⒏菀自O(shè)計(jì)與維護(hù)。(9)任務(wù)狀態(tài):典型地、每個(gè)任務(wù)都是一個(gè)無限的循環(huán)。每個(gè)任務(wù)都處在以下5種狀態(tài)之一的狀態(tài)下,這5種狀態(tài)是休眠態(tài),就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)(等待某一事件發(fā)生)和被中斷態(tài)。休眠態(tài)相當(dāng)于該任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度。就緒意味著該任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行了,但由于該任務(wù)的優(yōu)先級比正在運(yùn)行的任務(wù)的優(yōu)先級低,還暫時(shí)不能運(yùn)行。運(yùn)行態(tài)的任務(wù)是指該任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中。掛起狀態(tài)也可以叫做等待事件態(tài)WAITING,指該任務(wù)在等待,等待某一事件的發(fā)生,(例如等待某外設(shè)的I/O操作,等待某共享資源由暫不能使用變成能使用狀態(tài),等待定時(shí)脈沖的到來或等待超時(shí)信號的到來以結(jié)束目前的等待,等等)。最后,發(fā)生中斷時(shí),CPU提供相應(yīng)的中斷服務(wù),原來正在運(yùn)行的任務(wù)暫不能運(yùn)行,就進(jìn)入了被中斷狀態(tài)。(10)任務(wù)切換:當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),它保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài),即CPU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)的當(dāng)前狀況保存區(qū),也就是任務(wù)自己的棧區(qū)之中。入棧工作完成以后,就是把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行。(11)內(nèi)核:多任務(wù)系統(tǒng)中,內(nèi)核負(fù)責(zé)管理各個(gè)任務(wù),或者說為每個(gè)任務(wù)分配CPU時(shí)間,并且負(fù)責(zé)任務(wù)之間的通訊。內(nèi)核提供的基本服務(wù)是任務(wù)切換。(12)調(diào)度:是內(nèi)核的主要職責(zé)之一,就是要決定該輪到哪個(gè)任務(wù)運(yùn)行了。多數(shù)實(shí)時(shí)內(nèi)核是基于優(yōu)先級調(diào)度法的。每個(gè)任務(wù)根據(jù)其重要程度的不同被賦予一定的優(yōu)先級。基于優(yōu)先級的調(diào)度法指,CPU總是讓處在就緒態(tài)的優(yōu)先級最高的任務(wù)先運(yùn)行。(13)不可剝奪型內(nèi)核:要求每個(gè)任務(wù)自我放棄CPU的所有權(quán)。異步事件還是由中斷服務(wù)來處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來被中斷了的那個(gè)任務(wù),直到該任務(wù)主動放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)先級的任務(wù)才能獲得CPU的使用權(quán)。優(yōu)點(diǎn)是響應(yīng)中斷快;幾乎不需要使用信號量保護(hù)共享數(shù)據(jù)。缺陷在于其響應(yīng)時(shí)間,高優(yōu)先級的任務(wù)已經(jīng)進(jìn)入就緒態(tài),但還不能運(yùn)行,要等,也許要等很長時(shí)間,直到當(dāng)前運(yùn)行著的任務(wù)釋放CPU。無法保證系統(tǒng)的實(shí)時(shí)性。(14)可剝奪型內(nèi)核:最高優(yōu)先級的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。如果是中斷服務(wù)子程序使一個(gè)高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級高的那個(gè)任務(wù)開始運(yùn)行。保證了系統(tǒng)的實(shí)時(shí)性。(15)可重入型函數(shù):可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會丟失。可重入型函數(shù)或者只使用局部變量,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要予以保護(hù)。可重入型函數(shù)的例子:void strcpy(char *dest, char *src){

while(*dest++ = *src++){;} *dest=NUL;}

不可重入型函數(shù)的例子:int Temp;

void swap(int *x, int *y){ Temp= *x;*x = *y;*y=Temp;}

使用以下技術(shù)之一即可使Swap()函數(shù)具有可重入性:把Temp定義為局部變量;調(diào)用Swap()函數(shù)之前關(guān)中斷,調(diào)動后再開中斷;用信號量禁止該函數(shù)在使用過程中被再次調(diào)用。如果中斷發(fā)生在Swap()函數(shù)調(diào)用之前或調(diào)用之后,兩個(gè)任務(wù)中的X,Y值都會是正確的。(16)時(shí)間片輪番調(diào)度法:當(dāng)兩個(gè)或兩個(gè)以上任務(wù)有同樣優(yōu)先級,內(nèi)核允許一個(gè)任務(wù)運(yùn)行事先確定的一段時(shí)間,叫做時(shí)間額度,然后切換給另一個(gè)任務(wù)。(17)任務(wù)優(yōu)先級:是表示任務(wù)被調(diào)度的優(yōu)先程度。每個(gè)任務(wù)都有其優(yōu)先級。任務(wù)越重要,賦予的優(yōu)先級應(yīng)越高。(18)靜態(tài)優(yōu)先級:應(yīng)用程序執(zhí)行過程中諸任務(wù)優(yōu)先級不變,在靜態(tài)優(yōu)先級系統(tǒng)中,諸任務(wù)以及它們的時(shí)間約束在程序編譯時(shí)是已知的。(19)動態(tài)優(yōu)先級:應(yīng)用程序執(zhí)行過程中,任務(wù)的優(yōu)先級是可變的,實(shí)時(shí)內(nèi)核應(yīng)當(dāng)避免出現(xiàn)優(yōu)先級反轉(zhuǎn)問題。(20)優(yōu)先級反轉(zhuǎn):優(yōu)先級高和優(yōu)先級低的任務(wù)在運(yùn)行時(shí),由于共享資源的占用問題,而出現(xiàn)的優(yōu)先級反轉(zhuǎn)問題,即在執(zhí)行過程中,優(yōu)先級高的任務(wù)反而要等優(yōu)先級低的任務(wù)先運(yùn)行完后,釋放共享資源,才能運(yùn)行。糾正的方法:提高正在使用共享資源的任務(wù)的優(yōu)先級,但耗費(fèi)CPU時(shí)間;內(nèi)核能自動變換任務(wù)的優(yōu)先級,稱優(yōu)先級繼承,但是UCOSII不支持。(21)任務(wù)優(yōu)先級分配:單調(diào)執(zhí)行率調(diào)度法RMS:基于哪個(gè)任務(wù)執(zhí)行的次數(shù)最頻繁,執(zhí)行最頻繁的任務(wù)優(yōu)先級最高(22)任務(wù)互斥:實(shí)現(xiàn)任務(wù)間通訊最簡便到辦法是使用共享數(shù)據(jù)結(jié)構(gòu),但是必須保證每個(gè)任務(wù)在處理共享數(shù)據(jù)時(shí)的排它性,以避免競爭和數(shù)據(jù)的破壞。與共享資源打交道時(shí),使之滿足互斥條件最一般的方法有:關(guān)中斷;使用測試并置位指令TAS;禁止做任務(wù)切換;利用信號量。(23)信號量:信號量實(shí)際上是一種約定機(jī)制,用于:控制共享資源的使用權(quán)(滿足互斥條件);標(biāo)志某事件的發(fā)生;使兩個(gè)任務(wù)的行為同步。注意:信號,只取兩個(gè)值0和1的信號量;計(jì)數(shù)器型,值有多種形式。對信號量只能實(shí)施三種操作:初始化(INITIALIZE),也可稱作建立(CREATE);等信號(WAIT)也可稱作掛起(PEND);給信號(SIGNAL)或發(fā)信號(POST)。信號量初始化時(shí)要給信號量賦初值,等待信號量的任務(wù)表(Waiting list)應(yīng)清為空。P/V操作:P操作既是減1操作,任務(wù)執(zhí)行等待(WAIT)操作,有可能執(zhí)行P操作;V操作既是加1操作,任務(wù)以發(fā)信號操作(SIGNAL)釋放信號量。(24)死鎖:也稱作抱死,指兩個(gè)任務(wù)無限期地互相等待對方控制著的資源。最簡單的防止發(fā)生死鎖的方法是讓每個(gè)任務(wù)都:先得到全部需要的資源再做下一步的工作;用同樣的順序去申請多個(gè)資源;釋放資源時(shí)使用相反的順序。(25)同步:可以利用信號量使某任務(wù)與中斷服務(wù)同步(或者是與另一個(gè)任務(wù)同步,這兩個(gè)任務(wù)間沒有數(shù)據(jù)交換)。單向同步:任務(wù)與中斷服務(wù)之間/兩任務(wù)之間;雙向同步:兩任務(wù)之間可以用信號量同步它們的行為,兩個(gè)任務(wù)需要互相等待對方執(zhí)行,等待自身所需的事件發(fā)生(信號量),同步執(zhí)行。(26)任務(wù)間的通訊:有時(shí)很需要任務(wù)間的或中斷服務(wù)與任務(wù)間的通訊。任務(wù)間信息的傳遞有兩個(gè)途徑:通過全程變量或發(fā)消息給另一個(gè)任務(wù)。用全程變量時(shí),必須保證每個(gè)任務(wù)或中斷服務(wù)程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享該變量的辦法可以是關(guān)中斷再開中斷,或使用信號量(如前面提到的那樣)。(27)消息郵箱:通過內(nèi)核服務(wù)可以給任務(wù)發(fā)送消息。典型的消息郵箱也稱作交換消息,是用一個(gè)指針型變量,通過內(nèi)核服務(wù),一個(gè)任務(wù)或一個(gè)中斷服務(wù)程序可以把一則消息(即一個(gè)指針)放到郵箱里去。同樣,一個(gè)或多個(gè)任務(wù)可以通過內(nèi)核服務(wù)接收這則消息。發(fā)送消息的任務(wù)和接收消息的任務(wù)約定,該指針指向的內(nèi)容就是那則消息。內(nèi)核一般提供以下郵箱服務(wù):郵箱內(nèi)消息的內(nèi)容初始化,郵箱里最初可以有,也可以沒有消息;將消息放入郵箱(POST);等待有消息進(jìn)入郵箱(PEND);如果郵箱內(nèi)有消息,就接受這則消息。如果郵箱里沒有消息,則任務(wù)并不被掛起(ACCEPT),用返回代碼表示調(diào)用結(jié)果,是收到了消息還是沒有收到消息。消息郵箱也可以當(dāng)作只取兩個(gè)值的信號量來用。郵箱里有消息,表示資源可以使用,而空郵箱表示資源已被其它任務(wù)占用。(28)消息隊(duì)列:消息隊(duì)列用于給任務(wù)發(fā)消息。消息隊(duì)列實(shí)際上是郵箱陣列。通常,先進(jìn)入消息隊(duì)列的消息先傳給任務(wù),也就是說,任務(wù)先得到的是最先進(jìn)入消息隊(duì)列的消息,即先進(jìn)先出原則(FIFO)。然而μC/OS-Ⅱ也允許使用后進(jìn)先出方式(LIFO)。內(nèi)核提供的消息隊(duì)列服務(wù)如下:消息隊(duì)列初始化。隊(duì)列初始化時(shí)總是清為空;放一則消息到隊(duì)列中去(Post);等待一則消息的到來(Pend);如果隊(duì)列中有消息則任務(wù)可以得到消息,但如果此時(shí)隊(duì)列為空,內(nèi)核并不將該任務(wù)掛起(Accept)。如果有消息,則消息從隊(duì)列中取走。沒有消息則用特別的返回代碼通知調(diào)用者,隊(duì)列中沒有消息。

2、任務(wù)的組成:代碼、TCB、私有堆棧。一個(gè)任務(wù)通常是一個(gè)無限的循環(huán),絕不會返回的,但可通過調(diào)用函數(shù)自我刪除,也可建立新任務(wù)。

3、OS的內(nèi)核原理:(1)任務(wù)狀態(tài)圖(任務(wù)狀態(tài)的切換過程):睡眠態(tài)(DORMANT)指任務(wù)駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理,把任務(wù)交給μC/OS-Ⅱ是通過調(diào)用下述兩個(gè)函數(shù)之一:OSTaskCreate()或OSTaskCreateExt()。當(dāng)任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行。任務(wù)的建立可以是在多任務(wù)運(yùn)行開始之前,也可以是動態(tài)地被一個(gè)運(yùn)行著的任務(wù)建立。如果一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而這個(gè)任務(wù)的優(yōu)先級高于建立它的那個(gè)任務(wù),則這個(gè)剛剛建立的任務(wù)將立即得到CPU的控制權(quán)。一個(gè)任務(wù)可以通過調(diào)用OSTaskDel()返回到睡眠態(tài),或通過調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)。調(diào)用OSStart()可以啟動多任務(wù)。OSStart()函數(shù)運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)。就緒的任務(wù)只有當(dāng)所有優(yōu)先級高于這個(gè)任務(wù)的任務(wù)轉(zhuǎn)為等待狀態(tài),或者是被刪除了,才能進(jìn)入運(yùn)行態(tài)。正在運(yùn)行的任務(wù)可以通過調(diào)用兩個(gè)函數(shù)之一將自身延遲一段時(shí)間,這兩個(gè)函數(shù)是OSTimeDly()或OSTimeDlyHMSM()。這個(gè)任務(wù)于是進(jìn)入等待狀態(tài),等待這段時(shí)間過去,下一個(gè)優(yōu)先級最高的、并進(jìn)入了就緒態(tài)的任務(wù)立刻被賦予了CPU的控制權(quán)。等待的時(shí)間過去以后,系統(tǒng)服務(wù)函數(shù)OSTimeTick()使延遲了的任務(wù)進(jìn)入就緒態(tài)。正在運(yùn)行的任務(wù)期待某一事件的發(fā)生時(shí)也要等待,手段是調(diào)用以下3個(gè)函數(shù)之一:OSSemPend(),OSMboxPend(),或OSQPend()。調(diào)用后任務(wù)進(jìn)入了等待狀態(tài)(WAITING)。當(dāng)任務(wù)因等待事件被掛起(Pend),下一個(gè)優(yōu)先級最高的任務(wù)立即得到了CPU的控制權(quán)。當(dāng)事件發(fā)生了,被掛起的任務(wù)進(jìn)入就緒態(tài)。事件發(fā)生的報(bào)告可能來自另一個(gè)任務(wù),也可能來自中斷服務(wù)子程序。正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)了,或者μC/OS-Ⅱ?qū)⒅袛嚓P(guān)了。被中斷了的任務(wù)就進(jìn)入了中斷服務(wù)態(tài)(ISR)。響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)被掛起,中斷服務(wù)子程序控制了CPU的使用權(quán)。中斷服務(wù)子程序可能會報(bào)告一個(gè)或多個(gè)事件的發(fā)生,而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài)。在這種情況下,從中斷服務(wù)子程序返回之前,μC/OS-Ⅱ要判定,被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級最高的。如果中斷服務(wù)子程序使一個(gè)優(yōu)先級更高的任務(wù)進(jìn)入了就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級更高的任務(wù)將得以運(yùn)行,否則原來被中斷了的任務(wù)才能繼續(xù)運(yùn)行。當(dāng)所有的任務(wù)都在等待事件發(fā)生或等待延遲時(shí)間結(jié)束,μC/OS-Ⅱ執(zhí)行空閑任務(wù)(idle task),執(zhí)行OSTaskIdle()函數(shù)。(2)局部結(jié)構(gòu)——任務(wù)控制塊TCB:一旦任務(wù)建立了,任務(wù)控制塊OS_TCBs將被賦值。任務(wù)控制塊是一個(gè)數(shù)據(jù)結(jié)構(gòu),當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),μC/OS-Ⅱ用它來保存該任務(wù)的狀態(tài)。當(dāng)任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行。實(shí)際上,任務(wù)狀態(tài)的改變就是修改TCB的過程,OS_TCBs全部駐留在RAM中。任務(wù)建立的時(shí)候,OS_TCBs就被初始化了。應(yīng)用程序中可以有的最多任務(wù)數(shù)(OS_MAX_TASKS)是在文件OS_CFG.H中定義的。這個(gè)最多任務(wù)數(shù)也是μC/OS-Ⅱ分配給用戶程序的最多任務(wù)控制塊OS_TCBs的數(shù)目。將OS_MAX_TASKS的數(shù)目設(shè)置為用戶應(yīng)用程序?qū)嶋H需要的任務(wù)數(shù)可以減小RAM的需求量。所有的任務(wù)控制塊OS_TCBs都是放在任務(wù)控制塊列表數(shù)組OSTCBTbl[]中的。μC/OS-Ⅱ分配給系統(tǒng)任務(wù)OS_N_SYS_TASKS若干個(gè)任務(wù)控制塊,供其內(nèi)部使用。目前,一個(gè)用于空閑任務(wù),另一個(gè)用于任務(wù)統(tǒng)計(jì)。在μC/OS-Ⅱ初始化的時(shí)候,所有任務(wù)控制塊OS_TCBs被鏈接成單向空任務(wù)鏈表。當(dāng)任務(wù)一旦建立,空任務(wù)控制塊指針OSTCBFreeList指向的任務(wù)控制塊便賦給了該任務(wù),然后OSTCBFreeList的值調(diào)整為指向下鏈表中下一個(gè)空的任務(wù)控制塊。一旦任務(wù)被刪除,任務(wù)控制塊就還給空任務(wù)鏈表。(3)全局結(jié)構(gòu)——就緒表:將任務(wù)放入就緒表程序清單: OSRdyGrp |= OSMapTbl[prio >> 3];

OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

任務(wù)優(yōu)先級的低三位用于確定任務(wù)在總就緒表OSRdyTbl[]中的所在位。接下去的三位用于確定是在OSRdyTbl[]數(shù)組的第幾個(gè)元素。OSMapTbl[]是在ROM中的屏蔽字,用于限制OSRdyTbl[]數(shù)組的元素下標(biāo)在0到7之間。程序清單:從就緒表中刪除一個(gè)任務(wù)

if((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])== 0)OSRdyGrp &= ~OSMapTbl[prio >> 3];

程序清單:找出進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)

y = OSUnMapTbl[OSRdyGrp];x = OSUnMapTbl[OSRdyTbl[y]];

prio =(y << 3)+ x;以上代碼將就緒任務(wù)表數(shù)組OSRdyTbl[]中相應(yīng)元素的相應(yīng)位清零,而對于OSRdyGrp,只有當(dāng)被刪除任務(wù)所在任務(wù)組中全組任務(wù)一個(gè)都沒有進(jìn)入就緒態(tài)時(shí),才將相應(yīng)位清零。算法理解:預(yù)先根據(jù)結(jié)構(gòu),先算好屏蔽字,做好準(zhǔn)備,再利用二進(jìn)制的特點(diǎn),將優(yōu)先級與查表得出的屏蔽字進(jìn)行邏輯操作,得出xy值,再對就緒表的相應(yīng)位進(jìn)行置位或清零操作,完成對就緒表的修改。利用屏蔽字是為了提高查找就緒表的速度。4)任務(wù)調(diào)度算法:void OSSched(void){ INT8U y;OS_ENTER_CRITICAL();

if((OSLockNesting | OSIntNesting)== 0){ y = OSUnMapTbl[OSRdyGrp];

OSPrioHighRdy =(INT8U)((y << 3)+ OSUnMapTbl[OSRdyTbl[y]]);if(OSPrioHighRdy!= OSPrioCur){

OSTCBHighRdy= TCBPrioTbl[OSPrioHighRdy];OSCtxSwCtr++;OS_TASK_SW();} } OS_EXIT_CRITICAL();}

μC/OS-Ⅱ任務(wù)調(diào)度所花的時(shí)間是常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。

4、空閑任務(wù)(Idle Task):μC/OS-Ⅱ總是建立一個(gè)空閑任務(wù),這個(gè)任務(wù)在沒有其它任務(wù)進(jìn)入就緒態(tài)時(shí)投入運(yùn)行。空閑任務(wù)[OSTaskIdle()]永遠(yuǎn)設(shè)為最低優(yōu)先級。空閑任務(wù)OSTaskIdle()什么也不做,只是在不停地給一個(gè)32位的名叫OSIdleCtr的計(jì)數(shù)器加1,統(tǒng)計(jì)任務(wù)使用這個(gè)計(jì)數(shù)器以確定現(xiàn)行應(yīng)用軟件實(shí)際消耗的CPU時(shí)間。空閑任務(wù)不可能被應(yīng)用軟件刪除,但可以通過時(shí)間中斷喚醒其他任務(wù)進(jìn)入就緒態(tài)后,退出空閑任務(wù)。

5、統(tǒng)計(jì)任務(wù):提供運(yùn)行時(shí)間統(tǒng)計(jì)的任務(wù),叫做OSTaskStat(),如果用戶將系統(tǒng)定義常數(shù)OS_TASK_STAT_EN設(shè)為1,這個(gè)任務(wù)就會建立。一旦得到了允許,OSTaskStat()每秒鐘運(yùn)行一次,計(jì)算當(dāng)前的CPU利用率。注意:在調(diào)用系統(tǒng)啟動函數(shù)OSStart()之前,用戶初始代碼必須先建立一個(gè)任務(wù),在這個(gè)任務(wù)中調(diào)用系統(tǒng)統(tǒng)計(jì)初始化函數(shù)OSStatInit(),然后再建立應(yīng)用程序中的其它任務(wù)。

6、μC/OS-Ⅱ初始化:μC/OS-Ⅱ要求用戶首先調(diào)用系統(tǒng)初始化函數(shù)OSIint()。OSIint()初始化μC/OS-Ⅱ所有的變量和數(shù)據(jù)結(jié)構(gòu)。OSInit()建立空閑任務(wù)idle task,統(tǒng)計(jì)任務(wù)OSTaskStat()并且讓其進(jìn)入就緒態(tài)。以上兩個(gè)任務(wù)的任務(wù)控制塊(OS_TCBs)是用雙向鏈表鏈接在一起的。還初始化了4個(gè)空數(shù)據(jù)結(jié)構(gòu)緩沖區(qū):空任務(wù)控制塊緩沖區(qū)、空事件表、空隊(duì)列表、空存儲區(qū)。先做好準(zhǔn)備,目的是為了保證CPU的運(yùn)行速度。注意:初始化后數(shù)據(jù)結(jié)構(gòu):包括就緒表、優(yōu)先級表、空閑任務(wù)和統(tǒng)計(jì)任務(wù)TCB、及其各自私有堆棧。

7、μC/OS-Ⅱ的啟動:程序清單初始化和啟動μC/OS-Ⅱ: void main(void){ OSInit();/* 初始化uC/OS-II */..通過調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù);..OSStart();/* 開始多任務(wù)調(diào)度!OSStart()永遠(yuǎn)不會返回 */}

8、任務(wù)數(shù)據(jù)結(jié)構(gòu):void YourTask(void *pdata){ for(;;){ /* 用戶代碼 */ 調(diào)用μC/OS-Ⅱ的服務(wù)例程之一: OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/* 用戶代碼 */ } } 或void YourTask(void *pdata){ /* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF);}

9、事件控制塊ECB:一個(gè)數(shù)據(jù)結(jié)構(gòu)(類似TCB),包含了事件本身的定義,如用于信號量的計(jì)數(shù)器,用于指向郵箱的指針,以及指向消息隊(duì)列的指針數(shù)組等,還定義了等待該事件的所有任務(wù)的列表。分為OSEventGrp/OSEventTbl兩個(gè)變量。任務(wù)調(diào)度算法也和TCB相似。程序清單:將一個(gè)任務(wù)插入到事件的等待任務(wù)列表中 pevent->OSEventGrp |= OSMapTbl[prio >> 3];pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];其中,prio是任務(wù)的優(yōu)先級,pevent是指向事件控制塊的指針。

該算法的原理:任務(wù)優(yōu)先級的最低3位決定了該任務(wù)在相應(yīng)的.OSEventTbl[]中的位置,緊接著的3位則決定了該任務(wù)優(yōu)先級在.OSEventTbl[]中的字節(jié)索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實(shí)現(xiàn)。(1)在μC/OS-II中,事件控制塊的總數(shù)由用戶所需要的信號量、郵箱和消息隊(duì)列的總數(shù)決定。在調(diào)用OSInit()時(shí),所有事件控制塊被鏈接成一個(gè)單向鏈表——空閑事件控制塊鏈表。每當(dāng)建立一個(gè)信號量、郵箱或者消息隊(duì)列時(shí),就從該鏈表中取出一個(gè)空閑事件控制塊,并對它進(jìn)行初始化。因?yàn)樾盘柫俊⑧]箱和消息隊(duì)列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對于事件控制塊進(jìn)行的一些通用操作包括:初始化一個(gè)事件控制塊;使一個(gè)任務(wù)進(jìn)入就緒態(tài);使一個(gè)任務(wù)進(jìn)入等待該事件的狀態(tài);因?yàn)榈却瑫r(shí)而使一個(gè)任務(wù)進(jìn)入就緒態(tài)。為了避免代碼重復(fù)和減短程代碼長度,μC/OS-II將上面的操作用4個(gè)系統(tǒng)函數(shù)實(shí)現(xiàn),它們是:OSEventWaitListInit(),OSEventTaskRdy(),OSEventWait()和OSEventTO()。

10、μC/OS-II系統(tǒng)多任務(wù)的意義:多任務(wù)使事件簡單化,任務(wù)與任務(wù)之間的關(guān)系使松耦合而不是緊耦合,每個(gè)任務(wù)只要考慮當(dāng)前事件,而不需考慮全局事件,全局事件由操作系統(tǒng)來考慮,利用操作系統(tǒng)的一些通訊機(jī)制,將多個(gè)任務(wù)聯(lián)系起來共同完成一個(gè)功能,同時(shí)采用多人機(jī)制,OS可以同時(shí)運(yùn)行多個(gè)應(yīng)用程序,提高了CPU的使用效率。

11、操作系統(tǒng)在嵌入式系統(tǒng)中的地位:操作系統(tǒng)在嵌入式系統(tǒng)中扮演管理者的角色,主要任務(wù)使完成多任務(wù)之間的調(diào)度和同步,同時(shí)也是上層應(yīng)用軟件和底層硬件的接口,負(fù)責(zé)全部軟硬件資源的分配和回收、控制與協(xié)調(diào)等并發(fā)活動。同時(shí)嵌入式實(shí)時(shí)操作系統(tǒng)提高了系統(tǒng)的可靠性;提高了開發(fā)效率,縮短了開發(fā)周期,嵌入式RTOS充分發(fā)揮了32位CPU的多任務(wù)潛力。

12、文件系統(tǒng):(定義)處理文件的操作系統(tǒng)的部分稱為文件系統(tǒng).是操作系統(tǒng)中統(tǒng)一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護(hù)手段,并且方便用戶使用。功能:文件的構(gòu)造、命名、存取、保護(hù)等。(2)基于NAND FLASH的嵌入式文件系統(tǒng):FLASH讀寫的特點(diǎn):必須以Page為單位進(jìn)行讀寫;寫之前必須先擦除原有內(nèi)容;擦除操作必須對Block進(jìn)行,即一次至少擦除一個(gè)Block的內(nèi)容。針對這種情況,將Flash的一個(gè)Page定為1個(gè)扇區(qū),將其1個(gè)Block,32個(gè)扇區(qū)定為一個(gè)簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求。(3)FLASH文件系統(tǒng)的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統(tǒng)管理結(jié)構(gòu)在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實(shí)際數(shù)據(jù)的存儲,可以提高有用數(shù)據(jù)的存儲空間。(4)FLASH文件系統(tǒng)的分類:集中管理文件系統(tǒng)、線性文件系統(tǒng)、日志文件系統(tǒng)。(5)幾種開源文件系統(tǒng):TFS(Tiny File System):線性結(jié)構(gòu)的文件系統(tǒng),優(yōu)點(diǎn):TFS提供了掉電安全機(jī)制和垃圾回收機(jī)制。需要額外的輔助空間,用于垃圾回收時(shí)的文件緩存和過程狀態(tài),如果出現(xiàn)終止,系統(tǒng)根據(jù)輔助空間的信息進(jìn)行文件系統(tǒng)的恢復(fù)。缺點(diǎn):文件的插入、剪切和個(gè)性需要較大的運(yùn)行開銷,即使是很小的修改,也要求將整個(gè)文件重寫。JFFS:主要針對NOR型Flash存儲器設(shè)計(jì),提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實(shí)現(xiàn)移植。日志文件系統(tǒng);提供了更好的崩潰、掉電安全保護(hù);jffs2支持對flash的均勻磨損;在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作功能較好;文件系統(tǒng)接近滿時(shí),JFFS2 會大大放慢運(yùn)行速度——垃圾收集。Nand上yaffs文件系統(tǒng)的優(yōu)勢:專門為Nand flash設(shè)計(jì)的日志文件系統(tǒng);jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護(hù)節(jié)點(diǎn);啟動的時(shí)候需要掃描日志節(jié)點(diǎn),不適合大容量的Nand flash;FAT系統(tǒng)沒有日志。(6)NAND和NOR——性能比較:NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。NOR的讀速度比NAND稍快一些;NAND的寫入速度比NOR快很多;NAND的擦除速度遠(yuǎn)比NOR的快;大多數(shù)寫入操作需要先進(jìn)行擦除操作;NAND的擦除單元更小,相應(yīng)的擦除電路更少。接口差別:NOR flash帶有SRAM接口,線性尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié);NAND flash使用復(fù)用接口和控制IO多次尋址存取數(shù)據(jù);NAND讀和寫操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤管理此類操作易于取代硬盤等類似的塊設(shè)備。容量和成本:NAND flash生產(chǎn)過程更為簡單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128MB;NOR主要應(yīng)用在代碼存儲介質(zhì)中,NAND適合于數(shù)據(jù)存儲;NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲卡市場上所占份額最大。可靠性和耐用性:在NAND中每塊的最大擦寫次數(shù)是100萬次,而NOR的擦寫次數(shù)是10萬次;位交換的問題NAND flash中更突出,需要ECC糾錯(cuò);NAND flash中壞塊隨機(jī)分布,需要通過軟件標(biāo)定——產(chǎn)品量產(chǎn)的問題。(7)FAT:FAT32容量:位數(shù),32位;最大簇?cái)?shù)目,268,453,456;每簇大小4KB-32KB;最大磁盤容量,2^41(2T)。FAT文件系統(tǒng)基本結(jié)構(gòu):保留區(qū) Reserved region,存放引導(dǎo)記錄,BIOS信息等;FAT 區(qū),F(xiàn)AT信息列表(12/16/32 bits);根目錄區(qū),目錄信息列表(32 bytes);文件和目錄區(qū),存放簇信息。典型FLASH文件系統(tǒng)的結(jié)構(gòu):系統(tǒng)記錄-文件分配表-文件登記表-數(shù)據(jù)區(qū)域。文件系統(tǒng)的操作流程:打開文件OpenOSFile-操作文件ReadOSFile/WriteOSFile-關(guān)閉文件CloseOSFile。

13、GUI技術(shù):GUI的定義:Graphics User Interface, 是指計(jì)算機(jī)與其使用者之間的圖形化對話接口。GUI的主要特征:——Windows,采用窗口界面,每個(gè)窗口是用戶或系統(tǒng)的一個(gè)工作區(qū)域。一個(gè)屏幕上可以有多個(gè)窗口。——Icons,采用形象化的圖標(biāo)或圖符,易于操作者理解與操作。——Menu,采用菜單,可供用戶選擇的功能提示。——Pointing Devices,指鼠標(biāo)器、觸摸屏等,便于用戶直接對屏幕對象進(jìn)行操作。嵌入式GUI的特點(diǎn):體積小;功能強(qiáng);圖形算法簡潔、快速,占用系統(tǒng)資源少;可靠性高;模塊結(jié)構(gòu),便于移植和定制。MiniGUI:支持 GB2312 與 BIG5 字集;支持多種格式字體,例如:TrueType、Adobe Type1等;GUI函數(shù)(MoveTo、LineTo、FillBox、Rectangle、Circle、TextOut、DrawText..等)。

14、C/OS的性能特點(diǎn):公開源代碼;可移植性(Portable),絕大部分? C/OS-II的源碼是用移植性很強(qiáng)的ANSI C寫的。和微處理器硬件相關(guān)的那部分是用匯編語言寫的。匯編語言寫的部分已經(jīng)壓到最低限度,使得 C/OS-II便于移植到其他微處理器上。C/OS-II可以在絕大多數(shù)8位、16位、32位以至64位微處理器、微控制器、數(shù)字信號處理器(DSP)上運(yùn)行;可固化(ROMable),C/OS-II是為嵌入式應(yīng)用而設(shè)計(jì)的,這就意味著,只要讀者有固化手段(C編譯、連接、下載和固化),C/OS-II可以嵌入到讀者的產(chǎn)品中成為產(chǎn)品的一部分;可裁剪(Scalable),可以只使用C/OS-II中應(yīng)用程序需要的那些系統(tǒng)服務(wù)。也就是說某產(chǎn)品可以只使用很少幾個(gè)C/OS-II調(diào)用,而另一個(gè)產(chǎn)品則使用了幾乎所有? C/OS-II的功能,這樣可以減少產(chǎn)品中的C/OS-II所需的存儲器空間(RAM和ROM)。這種可剪裁性是靠條件編譯實(shí)現(xiàn)的;占先式(Preemptive);多任務(wù),C/OS-II可以管理64個(gè)任務(wù),然而,目前這一版本保留8個(gè)給系統(tǒng)。應(yīng)用程序最多可以有56個(gè)任務(wù);可確定性,全部C/OS-II的函數(shù)調(diào)用與服務(wù)的執(zhí)行時(shí)間具有可確定性;任務(wù)棧,每個(gè)任務(wù)有自己單獨(dú)的棧,C/OS-II允許每個(gè)任務(wù)有不同的棧空間,以便壓低應(yīng)用程序?qū)AM的需求;系統(tǒng)服務(wù),C/OS-II提供很多系統(tǒng)服務(wù),例如郵箱、消息隊(duì)列、信號量、塊大小固定的內(nèi)存的申請與釋放、時(shí)間相關(guān)函數(shù)等;中斷管理,中斷可以使正在執(zhí)行的任務(wù)暫時(shí)掛起,如果優(yōu)先級更高的任務(wù)被該中斷喚醒,則高優(yōu)先級的任務(wù)在中斷嵌套全部退出后立即執(zhí)行,中斷嵌套層數(shù)可達(dá)255層;穩(wěn)定性與可靠性。相關(guān)系統(tǒng)函數(shù): OS_ENTER_CRITICAL();進(jìn)入臨界區(qū),關(guān)中斷 OS_EXIT_CRITICAL();退出臨界區(qū),開中斷 OSInit();系統(tǒng)初始化 OSStart();可啟動多任務(wù),運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù) OSIntEnter()OSIntExit()OSSchedLock();給任務(wù)調(diào)度上鎖 OSSchedUnlock();給任務(wù)調(diào)度解鎖 OSTaskIdle()任務(wù): OSTaskDel(INT8U prio);非空閑任務(wù)刪除,使被刪除任務(wù)返回并處于休眠態(tài),釋放TCB OSTaskCreat(*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);建立任務(wù)4個(gè)參數(shù),不能由中斷服務(wù)來建立任務(wù) OSTaskCreatExt();上述的擴(kuò)展版,更為靈活,9個(gè)參數(shù) OSTaskChangPrio()改變?nèi)蝿?wù)優(yōu)先級,不改變?nèi)蝿?wù)狀態(tài) OSTaskResume(INT8U prio);恢復(fù)任務(wù) OSTaskQurery();獲得有關(guān)任務(wù)的信息 OSTaskSuspend(INT8U prio);掛起任務(wù),只能通過OSTaskResume()來恢復(fù) 時(shí)間: OSTimeDly();任務(wù)延時(shí)一定的時(shí)鐘節(jié)拍 OSTimeDlyHMSM();任務(wù)延時(shí)一定毫秒、秒、分、小時(shí) OSTimeDlyResume();取消延時(shí),若原先任務(wù)調(diào)用延時(shí)函數(shù),該函數(shù)可讓任務(wù)進(jìn)入就緒態(tài),而不必等到等待期滿 OSTimeGet()/OSTimeSet();系統(tǒng)時(shí)鐘獲取和設(shè)置 OSTimeTick();時(shí)鐘節(jié)拍函數(shù) 信號量 OSSemCreat(void *addr, INT32U nblks ,INT32U blksize, INT8U *err);建立一個(gè)信號量 OSSemPend();等待一個(gè)信號量 OSSemPost();發(fā)送一個(gè)信號量 OSSemAcccept();無等待地請求一個(gè)信號量,若信號量暫時(shí)無效,也可以讓任務(wù)簡單返回而不是進(jìn)入睡眠狀態(tài) OSSemQurery();查詢一個(gè)信號量的當(dāng)前狀態(tài) 郵箱(函數(shù)意義同上)OSMBoxCreat(void *msg); OSMBoxPost(OS_EVENT *pevent, void *msg); OSMBoxAcccept(OS_EVENT *pevent); OSMBoxPend(OS_EVNNT *pevent, INT16U timeout, int8u *err);OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)消息隊(duì)列 OSQCreat(); OSQPost();先進(jìn)先出原則 OSQPend()OSQPostFront();后進(jìn)先出原則 OSQFlush();清空一個(gè)消息隊(duì)列 OSQAcccept(); OSQQurery()與FLASH存儲器的接口函數(shù): 塊擦除:unsignde char Erase_Cluster(unsigned int cluster)頁寫入:int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)頁讀出:Void ReadPage(unsigned int block, unsigned int page, unsigned char *pPage)

文件系統(tǒng)相關(guān)接口函數(shù): 初始化文件系統(tǒng):Void

initOSFile(char filename[],U32 OpenMode)

讀文件到緩沖區(qū):U32ReadOSFile(FILE *pfile,U8 *Read Buffer, U32 n Readbyte)把緩沖區(qū)內(nèi)容寫入文件:U32WriteOSFile(FILE *pfile,U8 *Write Buffer, U32 n Writebyte)

關(guān)閉文件,釋放緩沖區(qū):Void CloseOSFile(FILE *pfile)常見API函數(shù):

數(shù)據(jù)隊(duì)列:

QueueCreat();建立數(shù)據(jù)隊(duì)列

QueueWriteFront();先進(jìn)先出方式發(fā)送數(shù)據(jù) QueueWrite();以后進(jìn)先出方式發(fā)送數(shù)據(jù) QueueRead();獲取隊(duì)列中的數(shù)據(jù) QueueFlush();清空隊(duì)列

QueueNData();獲取隊(duì)列中已存儲的數(shù)據(jù)的數(shù)目 QueueSize();獲取隊(duì)列共可以存儲數(shù)據(jù)的數(shù)目 串口驅(qū)動:

UART0Init();初始化UART0 UART0Putch();發(fā)送一個(gè)字節(jié) UART0Write();發(fā)送多個(gè)字節(jié) UART0Getch();接受一個(gè)字節(jié) 調(diào)制解調(diào)器模塊

ModemInit();初始化

GetModemState();獲取Modem狀態(tài)

ModemWrite();通過Modem發(fā)送多個(gè)字節(jié)數(shù)據(jù) ModemGetch();從Modem獲取一個(gè)字節(jié)數(shù)據(jù) ModemDiaUp();通過Modem撥號 ModemDiaDown();掛斷Modem I2C:

I2CInit(); I2CWrite(); I2CRead(); SPI:

SPIInit();初始化

GetSPI Flag();獲取SPI狀態(tài) SPIStart();開始訪問SPI

SPIRW();通過SPI發(fā)送并接受一個(gè)數(shù)據(jù) SPIEND();訪問SPI結(jié)束

1、為了保證系統(tǒng)實(shí)時(shí)性,UCOII采用了哪些策略。答:占先式內(nèi)核、準(zhǔn)備工作、就緒表機(jī)制。

2、你認(rèn)為設(shè)計(jì)嵌入式操作系統(tǒng)對硬件是否有要求?硬件支持軟件,如果CPU,沒有定時(shí)器,OS時(shí)間片管理就無法實(shí)現(xiàn);Linux的虛擬內(nèi)存功能,ARM上沒有該存儲器,就無法運(yùn)行Linux。

3、UCOSII操作系統(tǒng)的就緒表用何種機(jī)制保證其實(shí)時(shí)性不受任務(wù)個(gè)數(shù)的限制?UCOSII是占先式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級最高的任務(wù)準(zhǔn)備就緒則擁有CPU的所有權(quán),開始投入運(yùn)行;不支持時(shí)間片輪轉(zhuǎn)法,ARM指令集:數(shù)據(jù)處理指令:

算術(shù)操作:ADD r0, r1, r2 ;r0 := r1 + r2 ADC r0, r1, r2 ;r0 := r1 + r2 + C SUB r0, r1, r2 ;r0 := r1r2 + C1

按位邏輯操作: AND r0, r1, r2 ;r0 := r1 and r2 ORR r0, r1, r2 ;r0 := r1 or r2

EOR r0, r1, r2 ; r0 := r1 xor r2

BIC r0, r1, r2 ;r0 := r1 and(not)r2

比較操作: CMP r1, r2 ; r1-r2,并根據(jù)結(jié)果更改CPDR中條件標(biāo)志位 CMN r1, r2 ;r1 + r2,并根據(jù)結(jié)果更改CPDR中條件標(biāo)志位 TST r1, r2 ; r1 and r2,并根據(jù)結(jié)果更改CPDR中條件標(biāo)志位 TEQ r1, r2 ; r1 xor r2,并根據(jù)結(jié)果更改CPDR中條件標(biāo)志位 寄存器移位: MOV r0, r2 ;r0 := r2 MVN r0, r2 ;r0 := not r2

立即數(shù)操作: ADD r3, r3, #3 ;r3 := r3 + 3 AND r8, r7, #&ff ;r8 := r7[7:0] & for hex

移位寄存器操作數(shù):ADD r3, r2, r1, LSL #3 ;r3 := r2 + 8 x r1

ADD r5, r5, r3, LSL r2 ;r5 := r5 + 2rx r3

移位操作:LSR/LSL邏輯移位 ASR不等于LSR;LSR=ASL算術(shù)移位 ROR 不帶進(jìn)位循環(huán)右移,RRX帶進(jìn)位循環(huán)右移

乘法:(1)32位 MUL r4, r3, r2 ;r4 := [r3 x r2]<31:0> MLA r4, r3, r2, r1 ;r4 := [r3 x r2 + r1] <31:0>

最低 32-bits 置于結(jié)果寄存器中,其余被忽略;不支持第二立即操作數(shù);結(jié)果寄存器與源寄存器必須不同。

(2)64位 SMULL RO,R1,R2,R3;R0=(R2*R3)的低32位 R1=(R2*R3)的高32位 SMLAL R0,R1,R2,R3;R0=(R2*R3)的低32位+R0 R1=(R2*R3)的高32位+R1

UMULL和UMLAL 指令同上,不過是64位的無符號數(shù)乘法和乘加指令 單指令傳送(LDR, STR):

LDR r0, [r1, #4] ;r0 := mem32[r1 +4] 基址+偏移量尋址

LDR r0, [r1, #4]!; r0 := mem32[r1 + 4];r1 := r1 + 4自動變址尋址 LDR r0, [r1], #4 ;r0 := mem32[r1];r1 := r1 + 4后變址尋址 LDR r0, [r1] ; r0 := mem32[r1] 寄存器間接尋址 STR r0, [r1] ; mem32[r1] := r0 寄存器間接尋址

LDRB r0, [r1] ; r0 := mem8[r1] 字節(jié)傳送,寄存器間接尋址 示例:COPY:ADR r1, TABLE1;r1 points to TABLE1 ADR r2, TABLE2;r2 points to TABLE2 LOOP: LDR r0, [r1] 另外:LDR r0, [r1], #4 STR r0, [r2] STR r0, [r2], #4 ADD r1, r1, #4 ADD r2, r2, #4

多數(shù)據(jù)傳送指令(LDM, STM):使用于:堆棧;上下文切換: 保存或重新存儲工作寄存器;塊拷貝:在主存儲器中移動大數(shù)據(jù)塊。

LDMIA r1, {r0, r2, r5} ;r0 := mem32[r1];r2 := mem32[r1 + 4];

r5 := mem32[r1 + 8]

IA:每次傳送后地址加1;IB:傳送前地址加1; DA:傳送后地址減1;DB:傳送前地址減1。

單數(shù)據(jù)交換(SWAP):在寄存器和外部存儲器之間交換字節(jié)或字。

條件執(zhí)行:所有ARM指令都可以條件執(zhí)行,執(zhí)行與否取決于CPSR中的N/Z/C/V標(biāo)志位,所有Thumb指令都可以解壓稱全部條件指令;同時(shí)以上指令后加“S”后結(jié)果影響CPSR中的條件標(biāo)志位。控制和分支指令:分支和分支連接:跳到希望的指令中;保存當(dāng)前的PC并返回(with ‘L’ bit)。分支和交換:跳到期望的指令中與指令集交換。PSR 指令:程序狀態(tài)寄存器訪問指令(MRS, MSR):MRS 程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令;MSR 通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令。中斷向量表的程序:

AREA Boot,CODE,READONLY

ENTRY

B Reset_handler B Undef_Handler B SWI_Handler

B PreAbort_Handler B.;for reserved interrupt,stop here B IRQ_handler B FIQ_handler

嵌入式系統(tǒng)的軟/硬件框架:

每個(gè)任務(wù)優(yōu)先級是唯一的,查找準(zhǔn)備就緒的最高優(yōu)先級的任務(wù)并執(zhí)行上下文切換;UCOSII任務(wù)調(diào)度所花的時(shí)間為常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。

4、消息機(jī)制對于多任務(wù)系統(tǒng)的意義?使兩個(gè)任務(wù)獨(dú)立性增強(qiáng),耦合比較松散。

5、內(nèi)核涉及的數(shù)據(jù)結(jié)構(gòu)(就緒表、TCB、優(yōu)先級表)。

6、生產(chǎn)者、消費(fèi)者: P(s){if(s<1)wait();s--} V(s){s++;}

下載嵌入式期末復(fù)習(xí)總結(jié)整理word格式文檔
下載嵌入式期末復(fù)習(xí)總結(jié)整理.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    ARM9嵌入式復(fù)習(xí)總結(jié)

    ARM9嵌入式復(fù)習(xí)第一章 1.嵌入式微處理器的分類。 a) 什么是嵌入式微處理器? 1.嵌入式微處理器是嵌入式系統(tǒng)硬件層的核心,嵌入式微處理器將通用CPU中許多由板卡完成的任務(wù)集成......

    嵌入式系統(tǒng)復(fù)習(xí)總結(jié)

    一、嵌入式系統(tǒng)定義:以應(yīng)用中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。二、硬件設(shè)計(jì)的步驟:1需求和功能......

    ARM嵌入式技術(shù)復(fù)習(xí)總結(jié)

    第一章 1.嵌入式系統(tǒng)定義/概念:嵌入式系統(tǒng)就是嵌入到對象體中的專用計(jì)算機(jī)系統(tǒng)。三要素:嵌入、專用、計(jì)算機(jī)。嵌入性:嵌入到對象體系中,有對象環(huán)境要求,專用性:軟、硬件按對象要求......

    嵌入式實(shí)驗(yàn)學(xué)習(xí)心得及期末總結(jié)[推薦5篇]

    嵌入式實(shí)驗(yàn)學(xué)習(xí)心得 及期末總結(jié) 本學(xué)期的嵌入式實(shí)驗(yàn)課是在老師的指導(dǎo)下進(jìn)行的,主要進(jìn)行了三個(gè)階段的實(shí)驗(yàn)課程。 一,Linux系統(tǒng)的基礎(chǔ)指令的認(rèn)識和操作 二,嵌入式平臺的搭建以及......

    嵌入式總結(jié)

    一、嵌入式系統(tǒng)原理與應(yīng)用課程總結(jié) 這個(gè)學(xué)期我學(xué)習(xí)了《嵌入式原理與應(yīng)用》這門課程,雖然這個(gè)學(xué)期馬上就要結(jié)束了,對嵌入式的學(xué)習(xí)也要告一段落了,但是我覺得收獲還是很大的。學(xué)......

    高中期末復(fù)習(xí)總結(jié)

    高中期末復(fù)習(xí)總結(jié) 復(fù)習(xí)的過程是掌握知識的高級階段, 高中期末復(fù)習(xí)總結(jié)有哪些?以下是小編為您整理的相關(guān)資料,歡迎閱讀! 【篇一:高中期末復(fù)習(xí)總結(jié)】這個(gè)學(xué)期結(jié)束了。在這個(gè)學(xué)期里,......

    銀行信貸期末復(fù)習(xí)總結(jié)

    一、名詞解釋 1、銀行信貸:指以銀行為中介、以償還計(jì)息為條件的貨幣借貸 2、貸款展期:是指貸款人因故使借款未能按合同約定期現(xiàn)償還而要求繼續(xù)使用 貸款 3、審貸分離制度:貸款......

    初一期末復(fù)習(xí)總結(jié)[精選合集]

    【知識梳理】 I. 重點(diǎn)短語 1. Sit down2. on duty 3. in English 4. have a seat 5. at home 6. look like 7. look at8. have a look9. come on10. at work11. at school12......

主站蜘蛛池模板: 九九精品无码专区免费| 欧美伊香蕉久久综合网99| 免费无码成人av在线播放不卡| 日本大尺度吃奶呻吟视频| 亚洲国产成人精品无码区在线播放| 精品亚洲成av人在线观看| 国产成人久久精品77777综合| 日日麻批免费40分钟无码| 夜夜欢天天干| 亚洲欧美日韩综合俺去了| 人妻少妇av无码一区二区| 国精产品999国精产| 一边摸一边做爽的视频17国产| 国产成人av在线免播放观看更新| 中文字幕亚洲欧美在线不卡| 久久亚洲精品中文字幕波多野结衣| 小说区亚洲综合第1页| 国产美女露脸口爆吞精| 国产精品 视频一区 二区三区| 亚洲国产精品毛片av不卡在线| 国产一区二区三区在线电影| 亚洲乱码日产精品一二三| 亚洲精品一区二区三区中文字幕| 人妻乳哺乳无码一区二区| 国产欧美在线观看不卡| 久久国产精品久久喷水| 女人与公人强伦姧人妻完电影| 国产亚洲精品久久久久久打不开| 在线看片免费人成视频久网下载| 欧美成人片一区二区三区| 日本伊人色综合网| 久久婷婷五月综合国产尤物app| 伊人久久大香线蕉av网禁呦| 国产精品久久福利新婚之夜| 亚洲中文久久精品无码照片| 欧美日韩国产专区一区二区| 人妻激情另类乱人伦人妻| 免费网站看av片| 特级做a爰片毛片免费69| 丰满女人又爽又紧又丰满| 撕开奶罩揉吮奶头高潮av|