第一篇:嵌入式系統(tǒng)復(fù)習(xí)總結(jié)
嵌入式系統(tǒng)復(fù)習(xí)總結(jié)
一、嵌入式系統(tǒng)的概述
1.嵌入式系統(tǒng)的定義:嵌入到對(duì)象中的專業(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)硬件工作平臺(tái)
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ù)存儲(chǔ)器、4KB程序存儲(chǔ)器、兩個(gè)16位定時(shí)計(jì)數(shù)器、5個(gè)中斷源、P0~P3 4個(gè)并行IO口、4個(gè)串行
3存儲(chǔ)其結(jié)構(gòu)特點(diǎn):內(nèi)、外數(shù)據(jù)存儲(chǔ)器,內(nèi)、外程序存儲(chǔ)器 程序存儲(chǔ)器,內(nèi)外統(tǒng)一編制,地址重合區(qū)由EA決定,EA=1訪問外部,EA=0訪問內(nèi)部,內(nèi)部數(shù)據(jù)存儲(chǔ)器:00H~20H由32個(gè)寄存器組成,每八個(gè)一組,21H~2FH位尋址區(qū),30H~FFH用戶存儲(chǔ)區(qū),內(nèi)外存儲(chǔ)地址有指令區(qū)分MOVSMOV SFR特殊功能寄存器:ACC、B、SP、DPTR、PSW、IO宿存器 4.CPU時(shí)序電路:振蕩周期(1)、狀態(tài)周期(2)、機(jī)器周期(12)、指令周期、CPU訪問指令時(shí)兩次讀指令,訪問外部程序存儲(chǔ)器是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控制信號(hào)為1時(shí)輸出高八位地址 p3每個(gè)位有特殊定義 6.單片機(jī)的尋址方式:
直接尋址:SFR尋址均為直接尋址
寄存器尋址:乘法指令中B寄存器為寄存器尋 立即數(shù)尋址:
寄存器間接尋址:R0,R1 變址尋址:注意PC變址不改變PC值,DPTR變址可以隨意到任意位置取數(shù)
相對(duì)變址尋址:調(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(請(qǐng)位)
(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)的條件:
有中斷請(qǐng)求; EA=1;
IE相應(yīng)的中斷位為1;CPU執(zhí)行指令最后一個(gè)周期;
CPU沒有執(zhí)行同級(jí)或者更高級(jí)的中斷指令; CPU不執(zhí)行RET,RETI或者讀取IEIP的指令
中斷響應(yīng)的過程:
①置位相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器,清除相應(yīng)的中斷請(qǐng)求標(biāo)志(TI和RI除外);
②由硬件自動(dòng)生成一條長調(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í)器中斷自動(dòng)清除標(biāo)志位 外部中斷:
(1)電平觸發(fā)外部清除,或者軟件清除(2)邊緣觸發(fā)自動(dòng)清除 串行口中斷軟件清除
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)生方波信號(hào)(方波信號(hào)的嵌套)
①設(shè)置TMOD控制字,確定工作方式;
②計(jì)算計(jì)數(shù)初值并裝入計(jì)數(shù)值寄存器TH0(1)、TL0(1); ③若使用中斷系統(tǒng),則開中斷EA=
1、ET0或ET1=1; ④啟動(dòng)定時(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í)行
采用馮諾依曼存儲(chǔ)結(jié)構(gòu) ARM9流水式作業(yè):取指——譯碼——執(zhí)行——訪存——回寫 采用哈佛結(jié)構(gòu)
(4)存儲(chǔ)其結(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í)自動(dòng)將下一條地址送給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)存儲(chǔ)類型;
數(shù)據(jù)類型三種:8位字節(jié)、16位半字、32位字
指令類型:16位THUM、32位ARM 大端格式:與正常存儲(chǔ)方式相反
小端格式:高字節(jié)對(duì)應(yīng)高地址,低字節(jié)對(duì)應(yīng)低地址(6)多級(jí)存儲(chǔ)形式:寄存器組、片上RAM、CASHE、主存儲(chǔ)器
(7)異常:(其中異常模式類似于中斷)1.種類:按優(yōu)先級(jí)排列
復(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í)已自動(dòng)減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]!(自動(dòng)變址尋址); LDR R0, [R1], #2(后變址尋址)
堆棧尋址:STMFD SP!, {R4-R7, LR}(4種類型的堆棧操作)塊復(fù)制尋址:LDMIA R1!,{R2-R4,R5}(4種塊復(fù)制尋址操作)
相對(duì)尋址: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 比較和測(cè)試:CMP、CMN ARM程序狀態(tài)訪問指令:MSR ARM存儲(chǔ)器訪問指令
單一數(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:小范圍加載指令,將相對(duì)偏移量加載到某個(gè)寄存器中,只能用一條指令來實(shí)現(xiàn),若不能用一條指令來實(shí)現(xiàn)則編譯錯(cuò)誤
ADRL:中范圍加載指令,將PC的相對(duì)偏移量加載到某個(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)號(hào) SPACE expr 或 標(biāo)號(hà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類型,并對(duì)數(shù)據(jù)棧的操作是8字節(jié)對(duì)齊的
3.參數(shù)的傳遞規(guī)則。
(a)參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則
(b)參數(shù)個(gè)數(shù)固定的子程序參數(shù)傳遞規(guī)則(c)子程序結(jié)果返回規(guī)則
四、存儲(chǔ)器與接口技術(shù)
1.SRAM:靜態(tài)隨機(jī)訪問存儲(chǔ)
(1)組成:地址線、數(shù)據(jù)線、讀寫控制、片選信號(hào)線(2)工作原理:讀寫均先輸送地址,在進(jìn)行數(shù)據(jù)的輸入和輸出
(3)SRAM與CPU的鏈接: 2.DRAM:
有行地址和列地址,工作時(shí)有地址鎖存器,先輸送行地址在輸送列地址,選中單元后輸送單元,讀數(shù)據(jù)時(shí)需要刷新電路
3.SDRAM:與SRAM相比多了同步時(shí)鐘信號(hào),同時(shí)增添了BLOCK,地址分行地址、列地址,也需要刷新電路,BLOCK為最大讀寫單元,引腳BA選擇塊兒 4.FLASH:
(1)NOR FLASH:存儲(chǔ)容量絞小,讀速度較快,采用線性尋址,可直接找到存儲(chǔ)位置
(2)HAND FLASH:存儲(chǔ)密度大,寫入和擦除速度較快,有BLOCK存儲(chǔ)單元,有塊兒地址,頁地址,頁內(nèi)地址,數(shù)據(jù)地址線復(fù)用,傳送地址需要四個(gè)周期
5.MCS-51單片機(jī)
P0口作為地址線低八位和數(shù)據(jù)線,所以需要地址鎖存器,p0口分時(shí)復(fù)用,由ALE管理,P2輸出地址高八位,PSEN接程序存儲(chǔ)器使能端OE 進(jìn)行存儲(chǔ)其擴(kuò)展時(shí)可用與門或者先選來鏈接存儲(chǔ)器片選信號(hào)進(jìn)行擴(kuò)展。
鏈接程序存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器復(fù)用時(shí),將PSEN 與RD相與和選通相連連 6.ARM(S3C2410)存儲(chǔ)機(jī)制:
(1)與SRAM、DRAM相連(2)高速存儲(chǔ)機(jī)制:CASHE(3)NMUI 接口設(shè)計(jì):
(1)HAND FLASH啟動(dòng):將地址前4KB 的代碼作為啟動(dòng)代碼
(2)ROM啟動(dòng): 可選擇16位或者32位的存儲(chǔ)器,通過M1、M0進(jìn)行選擇 在與存儲(chǔ)器進(jìn)行連接時(shí),注意地址線,若存儲(chǔ)器為8位直接位位對(duì)應(yīng),16位是錯(cuò)開一位,32位時(shí)錯(cuò)開兩位 7.接口 1.RS-232C 信號(hào)電平與邏輯
RS-232C信號(hào)采用負(fù)邏輯,即以+12V電平視為邏輯“0”,-12V電平視為邏輯“1”
串行接口電路中需要在TTL標(biāo)準(zhǔn)與RS-232C標(biāo)準(zhǔn)之間進(jìn)行電平轉(zhuǎn)換 2.SPI接口
總線定義及信號(hào)線構(gòu)成 傳輸技術(shù):同步、全雙工
SPI采用同步、全雙工串行傳輸技術(shù),也稱為同步串行總線接口;SPI總線(Serial Peripheral Interface)稱為串行外圍設(shè)備接口 3.USB 總線定義及信號(hào)線構(gòu)成,半雙工傳輸 三種設(shè)備Host、Device和HUB USB(Universal Serial Bus)即通用串行總線,主要用于PC與外圍設(shè)備互連。USB的輸出特性是差分驅(qū)動(dòng)、支持半雙工方式,接收采用差分接收 USB體系結(jié)構(gòu)中包括三種設(shè)備 Host(即主控制器)Device(設(shè)備)
HUB(集線器,也是設(shè)備)4.I2C總線
總線定義及信號(hào)線構(gòu)成,信號(hào)線連接方式 總線仲裁
I2C總線定義了兩根傳輸線:SDA(串行數(shù)據(jù))和SCL(串行時(shí)鐘),都是雙向傳輸線,通過電阻上拉到正電源,總線空閑時(shí)都是高電平5.I2S總線
總線定義及信號(hào)線構(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è)備的互連更加方便,而且不會(huì)造成數(shù)據(jù)錯(cuò)位
第二篇:嵌入式系統(tǒng)復(fù)習(xí)總結(jié)
一、嵌入式系統(tǒng)定義:以應(yīng)用中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
二、硬件設(shè)計(jì)的步驟:1需求和功能分析,這是系統(tǒng)設(shè)計(jì)的首要任務(wù)和依據(jù)。2設(shè)計(jì)方案的規(guī)劃,主要操作有構(gòu)造系統(tǒng)體系結(jié)構(gòu);軟硬件功能劃分;性能指標(biāo)評(píng)估;可維護(hù)性;3核心部件選型,核心部件通常指系統(tǒng)的處理器、微控制器或DSP等;4主要部件選型,主要部件有存儲(chǔ)器、測(cè)試接口、外設(shè)接口等;5 基礎(chǔ)部件選型,基礎(chǔ)部件指系統(tǒng)設(shè)計(jì)所需的電源電路、時(shí)鐘電路、復(fù)位電路、低功耗電路等;6 原理圖設(shè)計(jì);7 PCB設(shè)計(jì);8 系統(tǒng)調(diào)試;9產(chǎn)品維護(hù)和升級(jí)。
三、嵌入式操作系統(tǒng)EOS(Embedded Operating System):嵌入式應(yīng)用軟件的基礎(chǔ)和開發(fā)平臺(tái),它是一段嵌入在目標(biāo)硬件中的軟件,用戶的其他應(yīng)用程序都建立在嵌入式操作系統(tǒng)之上。目前有:linux、uClinux、WinCE、Uc/OS-II、VxWorks等,它們具有實(shí)時(shí)性高、可靠性好、可裁剪、體積小等特性。實(shí)時(shí)系統(tǒng)是指一個(gè)能夠在指定或者確定的時(shí)間內(nèi)完成系統(tǒng)功能以及對(duì)外部或內(nèi)部、同步或異步時(shí)間作出響應(yīng)的系統(tǒng)。嵌入式實(shí)時(shí)操作系統(tǒng)(Real Time Embedded Operating System)是一種實(shí)時(shí)的、支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng),是嵌入式系統(tǒng)(包括硬、軟件系統(tǒng))極為重要的組成部分。
四、S3C44B0X:功能:
? 2.5V ARM7TDMI內(nèi)核,帶有8K高速緩存器(SAMBAII? 1通道多主IIC-BUS控制器;
總線體系結(jié)構(gòu)); ? 1通道IIS-BUS控制器;
? 外部存儲(chǔ)器控制器(FP/EDO/SDRAM控制,片選邏? 5個(gè)PWM定時(shí)器核1通道內(nèi)部定時(shí)器;
輯); ? 看門狗定時(shí)器;
? LCD控制器(最大支持256色STN,LCD具有專用? 71個(gè)通用I/O口8通道外部中斷源;
DMA); ? 功耗控制:具有普通、慢速、空閑核停止模式; ? 2通道通用DMA、2通道外設(shè)DMA并具有外部請(qǐng)求? 8通道10位ADC;
引腳; ? 具有日歷功能的RTC;
? 2通道UART,帶有握手協(xié)議1通道SIO; ? 具有PLL的片上時(shí)鐘發(fā)生器。
5種模式:
正常模式:正常運(yùn)行模式;低速模式:不加PLL 的低時(shí)鐘頻率模式;
空閑模式:只停止CPU 的時(shí)鐘;停止模式:停止所有的時(shí)鐘;
LCD的SL空閑模式:SL 空閑模式的進(jìn)入將導(dǎo)致 LCD 控制器開始工作。此時(shí),CPU和除LCD控制器外的所有外設(shè)都停止工作。
五、嵌入式最小系統(tǒng)是指由保證嵌入式微處理器可靠工作所必需的基本電路組成的系統(tǒng),通常包括處理器單元、時(shí)鐘單元、復(fù)位單元、存儲(chǔ)器單元、供電單元和調(diào)試接口?;贏RM的嵌入式最小系統(tǒng)基本組成主要包括:基于ARM核的微處理器、電源電路、復(fù)位電路、時(shí)鐘電路、存儲(chǔ)器電路(FLASH和SDRAM)、UART接口電路和JTAG調(diào)試接口。
六、異常處理的基本步驟:1將下一條指令的地址存入相應(yīng)連接寄存器
LR,將CPSR復(fù)制到相應(yīng)的SPSR中。2根據(jù)異常類型,強(qiáng)制設(shè)置CPSR的運(yùn)行模式位。3強(qiáng)制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。如果異常發(fā)生時(shí),處理器處于Thumb狀態(tài),則當(dāng)異常向量地址加載入PC時(shí),處理器自動(dòng)切換到ARM狀態(tài)。
異常處理完畢之后,ARM微處理器會(huì)執(zhí)行以下幾步操作從異常返回:1將連接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。2將SPSR復(fù)制回CPSR中。若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除。
七、調(diào)用:
1、匯編訪問C變量全局:匯編可通過地址間接訪問在C語言中聲明過的全局變量。通過使用important關(guān)鍵詞引入全局變量,并利用ldr
與str指令根據(jù)全局變量的地址訪問他們。
2、C語言調(diào)用匯編:匯編語言設(shè)計(jì)首先遵守atpcs。首先在匯編文件需要使用EXPORT為操作來聲明,使得本程序可以被其他程序調(diào)用。
同時(shí)要在C程序調(diào)用匯編程序之前要在C程序中使用extern關(guān)鍵字作為引入的匯編程序的聲明;
3、匯編調(diào)用C:匯編語言設(shè)計(jì)首先遵守atpcs。需要在匯編中使用IMPORT偽操作來聲明對(duì)應(yīng)的C語言程序。在匯編語言程序中通過BL
指令來調(diào)用子程序。
八、嵌入式系統(tǒng)特點(diǎn):1“專用”計(jì)算機(jī)系統(tǒng),2運(yùn)行環(huán)境差異很大,3比通用PC資源少,4功耗低、體積小、集成度高、成本低,5具有完整的系統(tǒng)測(cè)試和可靠性評(píng)估體系,6具有較長的生命周期7需要專用開發(fā)工具和方法進(jìn)行設(shè)計(jì),8包含專用調(diào)試電路,9多學(xué)科知識(shí)集成系統(tǒng)。應(yīng)用范圍:1汽車;2工業(yè)控制;3通信設(shè)備;4消費(fèi)電子5商業(yè)終端6航空航天、軍事需求。
嵌入式應(yīng)用的多樣性,造就了嵌入式微處理器的多樣性,32位嵌入式RISC處理器產(chǎn)品主要有MIPS公司的MIPS,IBM公司的PowerPC系列,Sun公司的Sparc和ARM公司的基于ARM核系列。
九、嵌入式系統(tǒng)的設(shè)計(jì)過程:(1)系統(tǒng)定義與需求分析(2)系統(tǒng)設(shè)計(jì)方案的初步確立(3)初步設(shè)計(jì)方案性價(jià)比評(píng)估與方案評(píng)審論證(4)完善初步方案、初步方案實(shí)施(5)軟硬件集成測(cè)試(6)系統(tǒng)功能性能測(cè)試及可靠性測(cè)試ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。在程序的執(zhí)行過程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。但ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM狀態(tài)。
十、ARM微處理器:7種運(yùn)行模式
用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。
快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理。
外部中斷模式(irq):用于通用的中斷處理。
管理模式(svc):操作系統(tǒng)使用的保護(hù)模式。
數(shù)據(jù)訪問終止模式(abt)當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。
系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。
未定義(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權(quán)模式;其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式,常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為ARM狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的ARM指令;第二種為Thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的Thumb指令。處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。但ARM微處理器在開始執(zhí)行代碼時(shí),應(yīng)該處于ARM狀態(tài)。
十一、ARM寄存器: ARM處理器共有37個(gè)寄存器。其中包括:31個(gè)通用寄存器,包括程序計(jì)數(shù)器(PC)在內(nèi)。這些寄存器都是32位寄存器。以及6個(gè)32位狀態(tài)寄存器。
ARM指令集可以分為6大類:數(shù)據(jù)處理指令(算術(shù)運(yùn)算指令;邏輯運(yùn)算指令;數(shù)據(jù)傳送指令;比較指令;測(cè)試指令;乘法指令);Load/Store指令;跳轉(zhuǎn)指令;程序狀態(tài)寄存器處理指令;協(xié)處理器指令;異常產(chǎn)生指令。
ARM處理器支持的基本尋址方式有7種:立即尋址;寄存器尋址;寄存器間接尋址;基址加偏址尋址;堆棧尋址;快拷貝尋址;相對(duì)尋址。
兩種常見的ARM開發(fā)環(huán)境及其特點(diǎn):ADS/SDT IDE開發(fā)環(huán)境:它由ARM公司開發(fā),使用了CodeWarrior公司的編譯器; 集成了GNU開發(fā)工具的IDE開發(fā)環(huán)境:它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。
十二、Boot Loader 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的 Boot Loader 幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?duì)BootLoader歸納出一些通用的概念來,以指導(dǎo)用戶特定的 Boot Loader 設(shè)計(jì)與實(shí)現(xiàn)。
BootLoader包含兩種不同的操作模式:?jiǎn)?dòng)加載(Boot loading)模式:Boot Loader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個(gè)過程并沒有用戶的介入。下載(Downloading)模式:Boot Loader 將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載文件
嵌入式系統(tǒng)的發(fā)展趨勢(shì):
1即將迎來以ARM為核心的32位浪潮
嵌入式系統(tǒng)應(yīng)用的高低端 :以4位、8位單片機(jī)或?yàn)榭刂破鳎∕CU)為核心的嵌入式系統(tǒng),早已廣泛的應(yīng)用于工業(yè)控制、軍事、航空航天、家電等各個(gè)領(lǐng)域,極大地推動(dòng)了IT技術(shù)的發(fā)展。目前這些屬于最低端應(yīng)用的嵌入式系統(tǒng)。這些低端應(yīng)用市場(chǎng)范圍非常廣泛,局部帶動(dòng)了低端應(yīng)用。
即將來臨的32位浪潮:隨著嵌入式系統(tǒng)的不斷發(fā)展,當(dāng)應(yīng)用越來越復(fù)雜、使用范圍越來越廣時(shí),8位處理器已經(jīng)無法滿足的需要,此時(shí)32位SoC為高性能嵌入式系統(tǒng)開發(fā)提供了功能豐富的硬件平臺(tái),也為實(shí)時(shí)嵌入式操作系統(tǒng)的廣泛應(yīng)用提供了硬件基礎(chǔ)。因此,以32位處理器作為高性能嵌入式系統(tǒng)開發(fā)的核心已是嵌入式技術(shù)發(fā)展的必然趨勢(shì)。
32位向ARM 轉(zhuǎn)移,形成ARM市場(chǎng)主導(dǎo)地位:在嵌入式微處理器中,雖然有多種嵌入式處理器可供選擇,但是ARM處理器核以其低功耗、高性能等突出優(yōu)點(diǎn)已在32位嵌入式應(yīng)用中穩(wěn)居第一。ARM已成為移動(dòng)通信、手持計(jì)算、多媒體數(shù)字消費(fèi)等嵌入式解決方案事實(shí)上的標(biāo)準(zhǔn)。優(yōu)良的性能和廣泛的市場(chǎng)定位極大地增加和豐富了ARM的資源,加速了ARM處理器面向各種應(yīng)用的系統(tǒng)芯片的開發(fā)和發(fā)展。
2嵌入式系統(tǒng)與Internet的融合:
為適應(yīng)嵌入式分布處理結(jié)構(gòu)和應(yīng)用上網(wǎng)需求,面向21世紀(jì)的嵌入式系統(tǒng)要求配備標(biāo)準(zhǔn)的一種或多種網(wǎng)絡(luò)通信接口。針對(duì)外部聯(lián)網(wǎng)要求,嵌入設(shè)備必需配有通信接口,相應(yīng)需要TCP/IP協(xié)議簇軟件支持;由于家用電器相互關(guān)聯(lián)(如防盜報(bào)警、燈光能源控制、影視設(shè)備和信息終端交換信息)及實(shí)驗(yàn)現(xiàn)場(chǎng)儀器的協(xié)調(diào)工作等要求,新一代嵌入式設(shè)備還需具備IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同時(shí)也需要提供相應(yīng)的通信組網(wǎng)協(xié)議軟件和物理層驅(qū)動(dòng)軟件。為了支持應(yīng)用軟件的特定編程模式,如Web或無線Web編程模式,還需要相應(yīng)的瀏覽器,如HTML、WML等。3未來嵌入式系統(tǒng)的發(fā)展趨勢(shì)
近幾年,在消費(fèi)電子、工業(yè)應(yīng)用、軍事國防、網(wǎng)絡(luò)設(shè)備等領(lǐng)域的嵌入式應(yīng)用,為中提供了難得的發(fā)展機(jī)遇。另外,嵌入式技術(shù)又不斷地刺激新的技術(shù)的產(chǎn)生——信息家電、醫(yī)療電子病歷、微小型智能武器等方面應(yīng)用也日益廣泛,應(yīng)用深度也進(jìn)一步加強(qiáng)。
互聯(lián)網(wǎng)的普及、微電子加工工藝的提高、3C技術(shù)的普遍融合、使用者需求的增多、信息服務(wù)應(yīng)用的生活化、技術(shù)的滲透性和融合性、設(shè)備的關(guān)聯(lián)性以及個(gè)性化服務(wù)的普遍需求。因而,移動(dòng)化處理信息,即隨時(shí)隨地的獲取信息、處理信息等,成為信息社會(huì)把握先機(jī)而制勝的必然武器。日益發(fā)展的嵌入式已能夠滿足人們隨時(shí)隨地利用任何設(shè)備和手段來接收、處理和發(fā)布信息的需求。低成本、低功耗的消費(fèi)電子和寬帶、無線通信以及處理運(yùn)算的高效計(jì)算結(jié)合技術(shù)將進(jìn)一步刺激和加速嵌入式技術(shù)的發(fā)展,造就更廣闊的市場(chǎng)空間。
第三篇:嵌入式復(fù)習(xí)總結(jié)
一:嵌入式系統(tǒng)概述 1嵌入式定義
2嵌入式與通用計(jì)算機(jī)
A.嵌入式系統(tǒng)具有應(yīng)用針對(duì)性
B.嵌入式系統(tǒng)硬件一般對(duì)擴(kuò)展能力要求不高
C.嵌入式一般采用專門針對(duì)嵌入式應(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ò)展存儲(chǔ)器和外部設(shè)備控制器 嵌入式系統(tǒng)軟件運(yùn)行在硬件平臺(tái)之上,硬件抽象層向下管理硬件資源,向上為操作系統(tǒng)提供一個(gè)虛擬硬件平臺(tái),是操作系統(tǒng)支持多硬件平臺(tái)的關(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ù)指令分開存儲(chǔ),使用兩套彼此獨(dú)立的存儲(chǔ)總線,故可以同時(shí)訪問程序和指令)和馮諾依曼結(jié)構(gòu)(程序指令和數(shù)據(jù)采用統(tǒng)一的存儲(chǔ)器,尋址不能同時(shí)進(jìn)行)根據(jù)指令格式的不同可以分為復(fù)雜指令計(jì)算機(jī)處理器(CISC)和精簡(jiǎn)指令計(jì)算機(jī)處理器(RISC)RISC的最大特點(diǎn)是指令長度固定,指令種類少,尋址方式種類少,大多數(shù)是簡(jiǎn)單指令且都能在一個(gè)時(shí)鐘周期內(nèi)完成,易于設(shè)計(jì)高性能的流水線。
RISC還有特點(diǎn)(1)芯片面積?。?)開發(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.硬件基本功能的測(cè)試 B.軟件下載 C.軟件調(diào)試 D.Flash燒寫
三:嵌入式系統(tǒng)總線
1:計(jì)算機(jī)總線的基本概念
2嵌入式系統(tǒng)總線的特點(diǎn) A.機(jī)械結(jié)構(gòu)上的差別
B.嵌入式系統(tǒng)對(duì)總線標(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總線信號(hào)(1)地址信號(hào)(2)數(shù)據(jù)信號(hào)(3)總線命令信號(hào)(4)時(shí)序控制信號(hào)(5)DMA相關(guān)信號(hào)(6)中斷相關(guān)信號(hào)
(7)總線數(shù)據(jù)寬度控制信號(hào)(8)其他信號(hào) 4:PCI總線原理
在嵌入式中以PC/104,CompactPCI,miniPCI等形式出現(xiàn) A:pci總線的特點(diǎn)(1)高性能
(2)資源豐富且成本低(3)易于使用(4)可擴(kuò)展性好(5)支持不同的平臺(tái) B:PCI總線信號(hào)(1)系統(tǒng)信號(hào)
(2)地址與數(shù)據(jù)信號(hào)(3)接口控制信號(hào)(4)總線仲裁信號(hào)(5)錯(cuò)誤告信號(hào)(6)中斷信號(hào)(7)附加信號(hào)
(8)64位總線擴(kuò)展信號(hào)(9)JTAG邊界掃描信號(hào) C:PCI設(shè)備的配置空間
PCI配置空間是PCI設(shè)備上一組256字節(jié)的特殊功能寄存器,用于存儲(chǔ)與設(shè)備相關(guān)的信息,計(jì)算機(jī)系統(tǒng)根據(jù)配置空間實(shí)現(xiàn)對(duì)PCI總線設(shè)備的管理。(1)配置空間的功能與組織(2)設(shè)備標(biāo)識(shí)
(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ù)對(duì)實(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)上電自動(dòng)復(fù)位(2)手動(dòng)復(fù)位(3)看門狗復(fù)位
看門狗是一種定時(shí)器,必須由軟件定期對(duì)該定時(shí)器進(jìn)行清零,否則計(jì)時(shí)器到期將產(chǎn)生系統(tǒng)復(fù)位信號(hào),看門狗可以使系統(tǒng)在軟件崩潰/死機(jī)后自動(dòng)復(fù)位。(4)系統(tǒng)異常復(fù)位
B.復(fù)位與電源管理控制器
為了產(chǎn)生更可靠的系統(tǒng)復(fù)位,可以用專用復(fù)位管理控制器如MAX705 2I2C總線原理
I2C是一種簡(jiǎn)單的只有兩條信號(hào)線的串行總線,在嵌入式中應(yīng)用很廣泛,盡管簡(jiǎn)單,她仍然能支持多主設(shè)備,并且具有總線仲裁的功能。3.實(shí)時(shí)時(shí)鐘 4.RS-232接口 RS-232串行接口是實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)以及計(jì)算機(jī)與外圍設(shè)備連接的一種簡(jiǎn)單且成本低的方法,除了實(shí)現(xiàn)一般的數(shù)據(jù)通信外,在系統(tǒng)調(diào)試中還常用于實(shí)現(xiàn)程序下載和系統(tǒng)控制臺(tái)的功能。
RS-232接口支持全雙工傳輸方式,可同時(shí)收,發(fā)數(shù)據(jù),接受方的接收比特率與發(fā)送方必須相同。
是串行接口,采用負(fù)邏輯。第五章:嵌入式系統(tǒng)存儲(chǔ)器 1靜態(tài)隨機(jī)存儲(chǔ)器
SRAM容量小,成本高,在PC機(jī)中已經(jīng)不作為主存使用,但他的接口簡(jiǎn)單,在嵌入式系統(tǒng)中還有很多應(yīng)用,常與單片機(jī),DSP等處理器配套使用。比如
IDT7146靜態(tài)RAM存儲(chǔ)器 2雙端口存儲(chǔ)器(DPRAM)雙端口RAM是一種很特殊的存儲(chǔ)器,有兩套讀寫端口,可以同時(shí)被兩個(gè)處理器訪問,在嵌入式系統(tǒng)中常用于實(shí)現(xiàn)兩個(gè)處理期間的緊耦合數(shù)據(jù)通信,相當(dāng)于一個(gè)共享存儲(chǔ)區(qū)。3同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(DRAM)DRAM容量大,成本低,在嵌入式系統(tǒng)應(yīng)用很廣泛 4NOR Flash Flash是嵌入式系統(tǒng)中常用的一類非易失性存儲(chǔ)器分為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è)置和控制,包括硬件初始化,上電自測(cè)試,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)并最終啟動(dòng)應(yīng)用系統(tǒng),在嵌入式系統(tǒng)中,通常由引導(dǎo)程序獨(dú)立完成硬件初始化,上電自測(cè)試及操作系統(tǒng)加載啟動(dòng)等任務(wù)。A.嵌入式系統(tǒng)引導(dǎo)程序的主要功能(1)硬件初始化
(2)加載啟動(dòng)嵌入式操作系統(tǒng)(3)提供人機(jī)交互命令
(4)支持目標(biāo)機(jī)與開發(fā)機(jī)之間的通信(5)支持FLASH燒寫
B.引導(dǎo)程序有兩種模式:?jiǎn)?dòng)加載模式和下載模式,系統(tǒng)的最終用戶只關(guān)心啟動(dòng)加載模式,而下載模式對(duì)系統(tǒng)的開發(fā)與維護(hù)有很重要的作用。3.嵌入式系統(tǒng)引導(dǎo)程序的啟動(dòng)過程
A.引導(dǎo)程序的執(zhí)行過程可分為兩個(gè)階段:階段1和階段2.階段1完成硬件初始化,工作模式設(shè)置等與硬件平臺(tái)密切相關(guān)的操作,該階段的程序代碼一般用匯編語言編寫,階段2完成一些相對(duì)高級(jí),復(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)檢測(cè)系統(tǒng)內(nèi)存映射
(3)將操作系統(tǒng)內(nèi)核映像及文件系統(tǒng)映像從FLASH讀取到系統(tǒng)RAM中(4)為內(nèi)核設(shè)置啟動(dòng)參數(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ù)測(cè)性(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.直接訪問存儲(chǔ) b.高速緩存
(3)評(píng)價(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)支持多硬件平臺(tái)(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)
第四篇:嵌入式系統(tǒng)相關(guān)知識(shí)點(diǎn)總結(jié)
嵌入式系統(tǒng)的定義及特點(diǎn)
定義:嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等方面有特殊要求的專用計(jì)算機(jī)系統(tǒng)。
特點(diǎn):(1)嵌入式系統(tǒng)是面向特定應(yīng)用的。嵌入式系統(tǒng)中的CPU是專門為特定應(yīng)用設(shè)計(jì)的,具有低功耗、體積小、集成度高等特點(diǎn),能夠把通用CPU中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有利于整個(gè)系統(tǒng)設(shè)計(jì)趨于小型化。
(2)嵌入式系統(tǒng)涉及先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)、通信和軟件等各個(gè)行業(yè)。是一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。
(3)嵌入式系統(tǒng)的硬件和軟件都必須具備高度可定制性。
(4)嵌入式系統(tǒng)的生命周期相當(dāng)長。嵌入式系統(tǒng)和具體應(yīng)用有機(jī)地結(jié)合在一起,其升級(jí)換代也是和具體產(chǎn)品同步進(jìn)行的。
(5)嵌入式系統(tǒng)本身并不具備在其上進(jìn)行進(jìn)一步開發(fā)的能力。在設(shè)計(jì)完成以后,用戶如果需要修改其中的程序功能,必須借助于一套專門的開發(fā)工具和環(huán)境。
(6)為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片或單片機(jī)中,而不是存貯于磁盤等載體中。
特點(diǎn)也可答:1.系統(tǒng)內(nèi)核小。2.專用性強(qiáng)。3.系統(tǒng)精簡(jiǎn)。4.高實(shí)時(shí)性的系統(tǒng)軟件(OS)是嵌入式軟件的基本要求。5.嵌入式軟件開發(fā)要想走向標(biāo)準(zhǔn)化,就必須使用多任務(wù)的操作系統(tǒng)。6.嵌入式系統(tǒng)開發(fā)需要開發(fā)工具和環(huán)境。7.嵌入式系統(tǒng)與具體應(yīng)用有機(jī)結(jié)合在一起,升級(jí)換代也是同步進(jìn)行,所以具有較長的生命周期。8.為了提高運(yùn)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片中。
操作系統(tǒng)在嵌入式系統(tǒng)中所起的作用(四個(gè))
嵌入式操作系統(tǒng)(嵌入式linux學(xué)習(xí))的功能
嵌入式操作系統(tǒng)除具備了一般操作系統(tǒng)(嵌入式linux系統(tǒng))最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件處理等外,還有以下兩個(gè)方面的功能:
1.構(gòu)成一個(gè)易于編程的虛擬機(jī)平臺(tái)
嵌入式操作系統(tǒng)構(gòu)成一個(gè)虛擬機(jī)平臺(tái),EOS把底層的硬件細(xì)節(jié)封裝起來,為運(yùn)行在它上面的軟件(如中間件軟件和各種應(yīng)用軟件)提供了一個(gè)抽象的編程接口。軟件開發(fā)在這個(gè)編程接口的上進(jìn)行,而不直接與機(jī)器硬件層打交道。
2.系統(tǒng)資源的管理者
嵌入式操作系統(tǒng)是一個(gè)系統(tǒng)資源的管理者,負(fù)責(zé)管理系統(tǒng)當(dāng)中的各種軟硬件資源,如處理器、內(nèi)存、各種I/O設(shè)備、文件和數(shù)據(jù)等,使得整個(gè)系統(tǒng)能夠高效、可靠地運(yùn)轉(zhuǎn)。
嵌入式操作系統(tǒng)負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度、控制、協(xié)調(diào)并發(fā)活動(dòng)。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能。
嵌入式操作系統(tǒng)是嵌入式系統(tǒng)應(yīng)用的核心.嵌入式操作系統(tǒng),大大地提高了嵌入式系統(tǒng)硬件工作效率,并為應(yīng)用軟件開發(fā)提供了極大的便利。
操作系統(tǒng)的作用主要體現(xiàn)在兩方面:
1.屏蔽硬件物理特性和操作細(xì)節(jié),為用戶使用計(jì)算機(jī)提供了便利 2.有效管理系統(tǒng)資源,提高系統(tǒng)資源使用效率
Linux與嵌入式使用的uclinux操作系統(tǒng)的關(guān)系
Linux與UNIX系統(tǒng)兼容,開放源代碼?,F(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正逐漸的應(yīng)用于嵌入式設(shè)備。uClinux正是在這種氛圍下產(chǎn)生的。所以u(píng)Clinux就是Micro-Control-Linux,字面上的理解就是“針對(duì)微控制領(lǐng)域而設(shè)計(jì)的Linux系統(tǒng)”。
uClinux是針對(duì)控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。uClinux同標(biāo)準(zhǔn)Linux的最大區(qū)別就在于內(nèi)存管理。標(biāo)準(zhǔn)Linux是針對(duì)有MMU的處理器設(shè)計(jì)的。在這種處理器上,虛擬地址被送到MMU,MMU把虛擬地址映射為物理地址。通過賦予每個(gè)任務(wù)不同的虛擬—物理地址轉(zhuǎn)換映射,支持不同任務(wù)之間的保護(hù)。對(duì)于uCLinux來說,其設(shè)計(jì)針對(duì)沒有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù),仍然采用存儲(chǔ)器的分頁管理。
什么是內(nèi)核?
內(nèi)核是操作系統(tǒng)最基本的部分。它是為眾多應(yīng)用程序提供對(duì)計(jì)算機(jī)硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內(nèi)核決定一個(gè)程序在什么時(shí)候?qū)δ巢糠钟布僮鞫嚅L時(shí)間。內(nèi)核,是一個(gè)操作系統(tǒng)的核心。是基于硬件的第一層軟件擴(kuò)充,提供操作系統(tǒng)的最基本的功能,是操作系統(tǒng)工作的基礎(chǔ),它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。
什么是Bootlonder? 答案一搜狗百科:?jiǎn)?dòng)程序(英語:boot loader,也稱啟動(dòng)加載器,引導(dǎo)程序)位于電腦或其他計(jì)算機(jī)應(yīng)用上,是指引導(dǎo)操作系統(tǒng)啟動(dòng)的程序。引導(dǎo)程序啟動(dòng)方式及程序視應(yīng)用機(jī)型種類而不同。BIOS開機(jī)完成后,bootloader就接手初始化硬件設(shè)備、創(chuàng)建存儲(chǔ)器空間的映射,以便為操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的軟硬件環(huán)境。BootLoader是依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個(gè)通用的BootLoader是很困難的。
答案二百度百科:Boot Loader 是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,Boot Loader 是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的 Boot Loader 幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?duì) Boot Loader 歸納出一些通用的概念來,以指導(dǎo)用戶特定的 Boot Loader 設(shè)計(jì)與實(shí)現(xiàn)。
使用帶uclinux操作系統(tǒng)的嵌入式系統(tǒng)應(yīng)該注意什么問題?
uClinux的內(nèi)存管理
uClinux同標(biāo)準(zhǔn)Linux的最大區(qū)別就在于內(nèi)存管理。對(duì)于uCLinux來說,其設(shè)計(jì)針對(duì)沒有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù),仍采用存儲(chǔ)器的分頁管理,系統(tǒng)在啟動(dòng)時(shí)把實(shí)際存儲(chǔ)器進(jìn)行分頁。在加載應(yīng)用程序時(shí)程序分頁加載。這一點(diǎn)影響了系統(tǒng)工作的很多方面。
uClinux系統(tǒng)對(duì)于內(nèi)存的訪問是直接的,所有程序中訪問的地址都是實(shí)際的物理地址。操作系統(tǒng)對(duì)內(nèi)存空間沒有保護(hù),各個(gè)進(jìn)程實(shí)際上共享一個(gè)運(yùn)行空間。由于應(yīng)用程序加載時(shí)必須分配連續(xù)的地址空間,而針對(duì)不同硬件平臺(tái)的可一次成塊,分配內(nèi)存大小限制是不同,所以開發(fā)人員在開發(fā)應(yīng)用程序時(shí)必須考慮內(nèi)存的分配情況并關(guān)注應(yīng)用程序需要運(yùn)行空間的大小。另外由于采用實(shí)存儲(chǔ)器管理策略,用戶程序同內(nèi)核以及其它用戶程序在一個(gè)地址空間,程序開發(fā)時(shí)要保證不侵犯其它程序的地址空間,以使得程序不至于破壞系統(tǒng)的正常工作,或?qū)е缕渌绦虻倪\(yùn)行異常。
從內(nèi)存的訪問角度來看,開發(fā)人員的權(quán)利增大了(開發(fā)人員在編程時(shí)可以訪問任意的地址空間),但與此同時(shí)系統(tǒng)的安全性也大為下降。uClinux的多進(jìn)程處理
uClinux沒有MMU管理存儲(chǔ)器,在實(shí)現(xiàn)多個(gè)進(jìn)程時(shí)(fork調(diào)用生成子進(jìn)程)需要實(shí)現(xiàn)數(shù)據(jù)保護(hù)。uClinux的這種多進(jìn)程實(shí)現(xiàn)機(jī)制同它的內(nèi)存管理緊密相關(guān)。uClinux針對(duì)沒有mmu處理器開發(fā),所以被迫使用一種flat方式的內(nèi)存管理模式,啟動(dòng)新的應(yīng)用程序時(shí)系統(tǒng)必須為應(yīng)用程序分配存儲(chǔ)空間,并立即把應(yīng)用程序加載到內(nèi)存。缺少了MMU的內(nèi)存重映射機(jī)制,uClinux必須在可執(zhí)行文件加載階段對(duì)可執(zhí)行文件reloc處理,使得程序執(zhí)行時(shí)能夠直接使用物理內(nèi)存。
編程實(shí)現(xiàn)五個(gè)點(diǎn)的中值濾波和均值濾波
clear all;t=0:0.01:1;f2=5;%生成一個(gè)正弦信號(hào)y; y1=1*sin(2*pi*f2*t);%y1=square(2*pi*f2*t);%向y中加入噪聲信號(hào)生成x;x1=y1+0.1*randn(1,101);figure(1)subplot(2,1,1);plot(t,y1,'r');title('生成一個(gè)正弦信號(hào)y');grid;legend y;subplot(2,1,2);plot(t, x1,'r');title('向y中加入噪聲信號(hào)生成x');grid;legend x;X=1:length(x1)for X=1:length(x1)z2=smooth(x1,5);%M=5時(shí)的均值濾波 end for X=1:length(x1)figure(2)plot(t,z1,'r');title('M=5時(shí)的均值濾波處理后的信號(hào)');grid;legend y;for X=1:length(x1)L2= median(x1,5);end figure(3)plot(t,L2,'r');title('M=5時(shí)的中值濾波處理后的信號(hào)');grid;legend y;
第五篇:嵌入式復(fù)習(xí)總結(jié)a4
一、嵌入式系統(tǒng)基本知識(shí)
1、什么是嵌入式系統(tǒng)、分層結(jié)構(gòu):根據(jù)IEEE(國際電氣和電子工程師協(xié)會(huì))的定義:嵌入式系統(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é)會(huì)的定義:嵌入式系統(tǒng)是以嵌入式應(yīng)用為目的的計(jì)算機(jī)系統(tǒng)??煞譃橄到y(tǒng)級(jí)、板級(jí)、片級(jí)(系統(tǒng)級(jí):各種類型的工控器、PC104模塊;板級(jí):各種類型的帶CPU的主板及OEM產(chǎn)品;片級(jí):各種以單片機(jī)、DSP、微處理器為核心的產(chǎn)品)。分層結(jié)構(gòu):嵌入式系統(tǒng):硬件、驅(qū)動(dòng)、操作系統(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)基于平臺(tái)的設(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)移植、硬件平臺(tái)設(shè)計(jì)較好,按單片機(jī)設(shè)計(jì)的學(xué)習(xí)流程較難掌握。嵌入式系統(tǒng)與pc系統(tǒng)區(qū)別:嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計(jì)算平臺(tái);嵌入式系統(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)勢(shì),目前主要有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à)格上極具競(jìng)爭(zhēng)力;Linux不僅支持x86 CPU,還可以支持其他數(shù)十種CPU芯片。嵌入式Linux是指對(duì)Linux經(jīng)過小型化裁剪后,能夠固化在容量只有幾百K字節(jié)或幾兆字節(jié)的存儲(chǔ)器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場(chǎ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:一種針對(duì)小容量、移動(dòng)式、智能化、32位、連接設(shè)備的模塊化實(shí)時(shí)嵌入式操作系統(tǒng);針對(duì)掌上設(shè)備、無線設(shè)備的動(dòng)態(tài)應(yīng)用程序和服務(wù)提供了一種功能豐富的操作系統(tǒng)平臺(tái),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)核?。河捎谇度胧较到y(tǒng)一般是應(yīng)用于小型電子裝置的,系統(tǒng)資源相對(duì)有限;(2)專用性強(qiáng):嵌入式系統(tǒng)個(gè)性化很強(qiáng),其中的軟件系統(tǒng)和硬件的結(jié)合非常緊密,一般要針對(duì)硬件進(jìn)行系統(tǒng)的移植;即使在同一品牌、同一系列的產(chǎn)品中也需要根據(jù)系統(tǒng)硬件的變化和增減不斷進(jìn)行修改;針對(duì)不同的任務(wù),往往需要對(duì)系統(tǒng)進(jìn)行較大更改,這種修改和通用軟件的“升級(jí)”是完全不同的概念;(3)系統(tǒng)精簡(jiǎn):嵌入式系統(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)存儲(chǔ),以提高速度。軟件代碼要求高質(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ā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開發(fā)時(shí)間,保障軟件質(zhì)量;(6)嵌入式系統(tǒng)需要開發(fā)工具和環(huán)境:其本身不具備自主開發(fā)能力,即使設(shè)計(jì)完成以后,用戶通常也是不能對(duì)其中的程序功能進(jìn)行修改,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)。
二、嵌入式系統(tǒng)的設(shè)計(jì)原則及開發(fā)方法:
1、軟硬件協(xié)同設(shè)計(jì)概念:基于體系結(jié)構(gòu),對(duì)系統(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ā)生命周期:(識(shí)別需求-提出解決方案-執(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)的基本功能,如輸入輸出信號(hào)、操作方式等;非功能需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。體系結(jié)構(gòu)設(shè)計(jì):描述系統(tǒng)如何實(shí)現(xiàn)所述的功能和非功能需求,包括對(duì)硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。一個(gè)好的體系結(jié)構(gòu)是設(shè)計(jì)成功與否的關(guān)鍵。硬件/軟件協(xié)同設(shè)計(jì):基于體系結(jié)構(gòu),對(duì)系統(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)測(cè)試:對(duì)設(shè)計(jì)好的系統(tǒng)進(jìn)行測(cè)試,看其是否滿足規(guī)格說明書中給定的功能要求。
三、ARM處理器體系結(jié)構(gòu):
1、馮·諾依曼體系結(jié)構(gòu):程序和數(shù)據(jù)共用一個(gè)存儲(chǔ)空間,CPU無法同時(shí)訪問程序和數(shù)據(jù);哈佛體系結(jié)構(gòu):程序和數(shù)據(jù)分開存放,CPU可以同時(shí)訪問程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。(2)CISC:復(fù)雜指令集,具有大量的指令和尋址方式;8/2原則:80%的程序只使用20%的指令;大多數(shù)程序只使用少量的指令就能夠運(yùn)行。RISC:精簡(jiǎn)指令集,在通道中只包含最有用的指令;確保數(shù)據(jù)通道快速執(zhí)行每一條指令;使CPU硬件結(jié)構(gòu)設(shè)計(jì)變得更為簡(jiǎn)單。(3)體系結(jié)構(gòu)與處理器的區(qū)別:知識(shí)產(chǎn)權(quán)核(IP核):電路或核是設(shè)計(jì)好并經(jīng)過驗(yàn)證的集成電路功能單元;IP復(fù)用意味著設(shè)計(jì)代價(jià)降低(時(shí)間,價(jià)格);ARM體系結(jié)構(gòu)是知識(shí)產(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ù)的處理器和存儲(chǔ)器。
2、ARM的七種基本工作模式:User用戶模式:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式*正常程序執(zhí)行的模式;FIQ快速中斷模式:當(dāng)一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式*高速數(shù)據(jù)傳輸和通道處理;IRQ外部中斷模式:當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式*通常的中斷處理;Supervisor管理模式:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會(huì)進(jìn)入這種模式*供操作系統(tǒng)使用的一種保護(hù)模式;Abort數(shù)據(jù)訪問中止模式: 當(dāng)存取異常時(shí)將會(huì)進(jìn)入這種模式*虛擬存儲(chǔ)及存儲(chǔ)保護(hù);Undef未定義指令中止模式: 當(dāng)執(zhí)行未定義指令時(shí)會(huì)進(jìn)入這種模式*軟件仿真硬件協(xié)處理器;System系統(tǒng)模式: 使用和User模式相同寄存器集的特權(quán)模式,特權(quán)級(jí)的操作系統(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 對(duì)齊;所以 pc值由bits [31:2]決定, bits [1:0] 未定義(所以指令不能halfword / byte對(duì)齊)。當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令 16 bits 寬;所有指令必須 halfword 對(duì)齊;所以 pc值由bits [31:1]決定, bits [0] 未定義(所以指令不能 byte對(duì)齊)。
3、ARM的異常:(1)異常定義:內(nèi)部或外部中斷源產(chǎn)生并引起處理器處理一個(gè)事件,如外部中斷或試圖執(zhí)行未定義指令都會(huì)引起異常。處理異常之前必須保留處理器的狀態(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快速中斷請(qǐng)求:當(dāng)快速中斷請(qǐng)求引腳有效,且CPSR中F=0,產(chǎn)生異常;IRQ外部中斷請(qǐng)求:當(dāng)外部中斷請(qǐng)求引腳有效,且且CPSR中I=0;PABT指令預(yù)取中止:若預(yù)取指令地址不存在或該地址不允許當(dāng)前的指令訪問,存儲(chǔ)器向處理器發(fā)出中止信號(hào),但是只有當(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),返回后自動(dòng)進(jìn)入Thumb):當(dāng)異常產(chǎn)生時(shí),處理器執(zhí)行以下動(dòng)作:改變處理器狀態(tài)進(jìn)入 ARM 態(tài);改變處理器模式進(jìn)入相應(yīng)的異常模式;保存返回地址到 LR_
IF
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í),自動(dòng)切換回到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級(jí)指令流水線技術(shù):幾個(gè)指令可以并行執(zhí)行,提高了CPU的運(yùn)行效率;內(nèi)部信息流要求通暢流動(dòng)(為了增加處理器指令流速度,提高運(yùn)行效率);允許多個(gè)操作同時(shí)處理,比逐條指令執(zhí)行要快;PC指向正被取指的指令,而非正在執(zhí)行的指令。(2)存儲(chǔ)器模式:大端模式(字?jǐn)?shù)據(jù)的高位字節(jié)存儲(chǔ)在低地址中,字?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),需要把指令從存儲(chǔ)器加載到寄存器,沒有專門的IO指令,故存在load/store結(jié)構(gòu)——從存儲(chǔ)器中讀某個(gè)值,操作完后再將其放回存儲(chǔ)器中。指令分類:a.數(shù)據(jù)處理指令–使用和改變寄存器的值;b.數(shù)據(jù)傳送指令–把存儲(chǔ)器的值拷貝到寄存器中(load)or 把寄存器中的值拷貝到存儲(chǔ)器中(store);c.控制流指令 :分支、分支和鏈接, 保存返回的地址,以恢復(fù)最先的次序、陷入系統(tǒng)代碼。
3、ARM與Thumb指令的關(guān)系:(1)Thumb指令的特點(diǎn):Thumb 指令的長度為 16 位,是針對(duì)代碼密度問題而提出的;所有的 Thumb 指令和編程模型與ARM指令和編程模型相對(duì)應(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 代碼所需的存儲(chǔ)空間約為ARM 代碼的60%~70%;Thumb 代碼使用的指令數(shù)比ARM 代碼多約30%~40%;若使用32 位的存儲(chǔ)器,ARM 代碼比Thumb 代碼快約40%;若使用16 位的存儲(chǔ)器,Thumb 代碼比ARM 代碼快約40%~50%;與ARM 代碼相比較,使用Thumb 代碼,存儲(chǔ)器的功耗會(huì)降低約30%。
五、典型的ARM核芯片結(jié)構(gòu):
1、LPC2000系列處理器結(jié)構(gòu):LPC2000系列微控制器將ARM7TDMI配置為小端模式;內(nèi)部存儲(chǔ)器包括無等待SRAM和Flash;系統(tǒng)功能包括維持芯片工作的一些基本功能,如系統(tǒng)時(shí)鐘、復(fù)位等;向量中斷控制器(VIC)可減少中斷響應(yīng)時(shí)間,最多可管理32個(gè)中斷請(qǐng)求;外部存儲(chǔ)器控制器(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)不同的場(chǎng)合,單邊沿/雙邊沿輸出方式,頻率、占空比可調(diào);實(shí)時(shí)時(shí)鐘,具可編程積存時(shí)鐘分頻器,以適應(yīng)不同的晶振頻率。
2、LPC處理器的啟動(dòng)過程:一般在32位ARM應(yīng)用系統(tǒng)中,大多數(shù)采用C語言進(jìn)行軟件編程,但是在運(yùn)行應(yīng)用代碼前需要進(jìn)行系統(tǒng)初始化,常用一匯編文件做啟動(dòng)代碼,它可以實(shí)現(xiàn)異常向量表定義、堆棧初始化、系統(tǒng)變量初始化、地址重映射等操作。
3、時(shí)鐘編程方法
4、存儲(chǔ)器映射控制原理:用于控制地址范圍為0x0000-0x0037存儲(chǔ)區(qū)域的重新映射,該區(qū)域存放著異常向量表,發(fā)生異常時(shí),程序總是跳轉(zhuǎn)到地址為0x0000-0x0037的對(duì)應(yīng)入口處,而實(shí)際異常向量表可能存在內(nèi)部Flash、SRAM、Boot Block,為了讓運(yùn)行在不同存儲(chǔ)器空間的程序?qū)Ξ惓_M(jìn)行控制,可通過存儲(chǔ)器映射控制,將位于不同存儲(chǔ)空間的異常向量表重新映射到固定地址0x0000-0x0037處,以實(shí)現(xiàn)異常向量表的來源控制,通過設(shè)置存儲(chǔ)器映射控制寄存器的值來實(shí)現(xiàn)。流程:內(nèi)核產(chǎn)生的地址0x0000-0x0037,經(jīng)過地址轉(zhuǎn)換器后,映射到物理存儲(chǔ)器的地址空間(0x80000000-0x80000037(外部存儲(chǔ)器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x40000000-0x40000037(內(nèi)部SRAM)/0x00000000-0x00000037(內(nèi)部Flash))。
5、存儲(chǔ)器加速模塊MAM
6、外部存儲(chǔ)器控制器(EMC):EMC模塊為AHB系統(tǒng)總線和外部存儲(chǔ)器件之間提供了一個(gè)接口;EMC支持4個(gè)獨(dú)立配置的存儲(chǔ)器組,每個(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)偏差將會(huì)引起嚴(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ái)系統(tǒng):或超循環(huán)系統(tǒng),應(yīng)用程序是一個(gè)無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺(tái)行為。中斷服務(wù)程序處理異步事件,這部分可以看成前臺(tái)行為。后臺(tái)也可以叫做任務(wù)級(jí)。前臺(tái)也叫中斷級(jí)。時(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)先級(jí)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)低,還暫時(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í)信號(hào)的到來以結(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)先級(jí)調(diào)度法的。每個(gè)任務(wù)根據(jù)其重要程度的不同被賦予一定的優(yōu)先級(jí)?;趦?yōu)先級(jí)的調(diào)度法指,CPU總是讓處在就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)先運(yùn)行。(13)不可剝奪型內(nèi)核:要求每個(gè)任務(wù)自我放棄CPU的所有權(quán)。異步事件還是由中斷服務(wù)來處理。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來被中斷了的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)先級(jí)的任務(wù)才能獲得CPU的使用權(quán)。優(yōu)點(diǎn)是響應(yīng)中斷快;幾乎不需要使用信號(hào)量保護(hù)共享數(shù)據(jù)。缺陷在于其響應(yīng)時(shí)間,高優(yōu)先級(jí)的任務(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)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。如果是中斷服務(wù)子程序使一個(gè)高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),中斷完成時(shí),中斷了的任務(wù)被掛起,優(yōu)先級(jí)高的那個(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ù)不會(huì)丟失??芍厝胄秃瘮?shù)或者只使用局部變量,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要予以保護(hù)。(16)時(shí)間片輪番調(diào)度法:當(dāng)兩個(gè)或兩個(gè)以上任務(wù)有同樣優(yōu)先級(jí),內(nèi)核允許一個(gè)任務(wù)運(yùn)行事先確定的一段時(shí)間,叫做時(shí)間額度,然后切換給另一個(gè)任務(wù)。(17)任務(wù)優(yōu)先級(jí):是表示任務(wù)被調(diào)度的優(yōu)先程度。每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高。(18)靜態(tài)優(yōu)先級(jí):應(yīng)用程序執(zhí)行過程中諸任務(wù)優(yōu)先級(jí)不變,在靜態(tài)優(yōu)先級(jí)系統(tǒng)中,諸任務(wù)以及它們的時(shí)間約束在程序編譯時(shí)是已知的。(19)動(dòng)態(tài)優(yōu)先級(jí):應(yīng)用程序執(zhí)行過程中,任務(wù)的優(yōu)先級(jí)是可變的,實(shí)時(shí)內(nèi)核應(yīng)當(dāng)避免出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)問題。(20)優(yōu)先級(jí)反轉(zhuǎn):優(yōu)先級(jí)高和優(yōu)先級(jí)低的任務(wù)在運(yùn)行時(shí),由于共享資源的占用問題,而出現(xiàn)的優(yōu)先級(jí)反轉(zhuǎn)問題,即在執(zhí)行過程中,優(yōu)先級(jí)高的任務(wù)反而要等優(yōu)先級(jí)低的任務(wù)先運(yùn)行完后,釋放共享資源,才能運(yùn)行。糾正的方法:提高正在使用共享資源的任務(wù)的優(yōu)先級(jí),但耗費(fèi)CPU時(shí)間;內(nèi)核能自動(dòng)變換任務(wù)的優(yōu)先級(jí),稱優(yōu)先級(jí)繼承,但是UCOSII不支持。(21)任務(wù)優(yōu)先級(jí)分配:?jiǎn)握{(diào)執(zhí)行率調(diào)度法RMS:基于哪個(gè)任務(wù)執(zhí)行的次數(shù)最頻繁,執(zhí)行最頻繁的任務(wù)優(yōu)先級(jí)最高(22)任務(wù)互斥:實(shí)現(xiàn)任務(wù)間通訊最簡(jiǎn)便到辦法是使用共享數(shù)據(jù)結(jié)構(gòu),但是必須保證每個(gè)任務(wù)在處理共享數(shù)據(jù)時(shí)的排它性,以避免競(jìng)爭(zhēng)和數(shù)據(jù)的破壞。與共享資源打交道時(shí),使之滿足互斥條件最一般的方法有:關(guān)中斷;使用測(cè)試并置位指令TAS;禁止做任務(wù)切換;利用信號(hào)量。(23)信號(hào)量:信號(hào)量實(shí)際上是一種約定機(jī)制,用于:控制共享資源的使用權(quán)(滿足互斥條件);標(biāo)志某事件的發(fā)生;使兩個(gè)任務(wù)的行為同步。注意:信號(hào),只取兩個(gè)值0和1的信號(hào)量;計(jì)數(shù)器型,值有多種形式。對(duì)信號(hào)量只能實(shí)施三種操作:初始化(INITIALIZE),也可稱作建立(CREATE);等信號(hào)(WAIT)也可稱作掛起(PEND);給信號(hào)(SIGNAL)或發(fā)信號(hào)(POST)。信號(hào)量初始化時(shí)要給信號(hào)量賦初值,等待信號(hào)量的任務(wù)表(Waiting list)應(yīng)清為空。P/V操作:P操作既是減1操作,任務(wù)執(zhí)行等待(WAIT)操作,有可能執(zhí)行P操作;V操作既是加1操作,任務(wù)以發(fā)信號(hào)操作(SIGNAL)釋放信號(hào)量。(24)死鎖:也稱作抱死,指兩個(gè)任務(wù)無限期地互相等待對(duì)方控制著的資源。最簡(jiǎn)單的防止發(fā)生死鎖的方法是讓每個(gè)任務(wù)都:先得到全部需要的資源再做下一步的工作;用同樣的順序去申請(qǐng)多個(gè)資源;釋放資源時(shí)使用相反的順序。(25)同步:可以利用信號(hào)量使某任務(wù)與中斷服務(wù)同步(或者是與另一個(gè)任務(wù)同步,這兩個(gè)任務(wù)間沒有數(shù)據(jù)交換)。單向同步:任務(wù)與中斷服務(wù)之間/兩任務(wù)之間;雙向同步:兩任務(wù)之間可以用信號(hào)量同步它們的行為,兩個(gè)任務(wù)需要互相等待對(duì)方執(zhí)行,等待自身所需的事件發(fā)生(信號(hào)量),同步執(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)中斷再開中斷,或使用信號(hào)量(如前面提到的那樣)。(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è)值的信號(hào)量來用。郵箱里有消息,表示資源可以使用,而空郵箱表示資源已被其它任務(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),絕不會(huì)返回的,但可通過調(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)行開始之前,也可以是動(dòng)態(tài)地被一個(gè)運(yùn)行著的任務(wù)建立。如果一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而這個(gè)任務(wù)的優(yōu)先級(jí)高于建立它的那個(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()可以啟動(dòng)多任務(wù)。OSStart()函數(shù)運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。就緒的任務(wù)只有當(dāng)所有優(yōu)先級(jí)高于這個(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í)最高的、并進(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)先級(jí)最高的任務(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ù)子程序可能會(huì)報(bào)告一個(gè)或多個(gè)事件的發(fā)生,而使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài)。在這種情況下,從中斷服務(wù)子程序返回之前,μC/OS-Ⅱ要判定,被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的。如果中斷服務(wù)子程序使一個(gè)優(yōu)先級(jí)更高的任務(wù)進(jìn)入了就緒態(tài),則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(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)先級(jí)的低三位用于確定任務(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)先級(jí)最高的任務(wù)
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];prio =(y << 3)+ x;
以上代碼將就緒任務(wù)表數(shù)組OSRdyTbl[]中相應(yīng)元素的相應(yīng)位清零,而對(duì)于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í)與查表得出的屏蔽字進(jìn)行邏輯操作,得出xy值,再對(duì)就緒表的相應(yīng)位進(jìn)行置位或清零操作,完成對(duì)就緒表的修改。利用屏蔽字是為了提高查找就緒表的速度。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)先級(jí)??臻e任務(wù)OSTaskIdle()什么也不做,只是在不停地給一個(gè)32位的名叫OSIdleCtr的計(jì)數(shù)器加1,統(tǒng)計(jì)任務(wù)使用這個(gè)計(jì)數(shù)器以確定現(xiàn)行應(yīng)用軟件實(shí)際消耗的CPU時(shí)間??臻e任務(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ù)就會(huì)建立。一旦得到了允許,OSTaskStat()每秒鐘運(yùn)行一次,計(jì)算當(dāng)前的CPU利用率。注意:在調(diào)用系統(tǒng)啟動(dò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ì)列表、空存儲(chǔ)區(qū)。先做好準(zhǔn)備,目的是為了保證CPU的運(yùn)行速度。注意:初始化后數(shù)據(jù)結(jié)構(gòu):包括就緒表、優(yōu)先級(jí)表、空閑任務(wù)和統(tǒng)計(jì)任務(wù)TCB、及其各自私有堆棧。
4、μC/OS-Ⅱ的啟動(dòng):程序清單初始化和啟動(dòng)μC/OS-Ⅱ: void main(void){
OSInit();/* 初始化uC/OS-II
*/..通過調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù);..OSStart();/* 開始多任務(wù)調(diào)度!OSStart()永遠(yuǎn)不會(huì)返回 */}
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),包含了事件本身的定義,如用于信號(hào)量的計(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)先級(jí),pevent是指向事件控制塊的指針。該算法的原理:任務(wù)優(yōu)先級(jí)的最低3位決定了該任務(wù)在相應(yīng)的.OSEventTbl[]中的位置,緊接著的3位則決定了該任務(wù)優(yōu)先級(jí)在.OSEventTbl[]中的字節(jié)索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實(shí)現(xiàn)。(1)在μC/OS-II中,事件控制塊的總數(shù)由用戶所需要的信號(hào)量、郵箱和消息隊(duì)列的總數(shù)決定。在調(diào)用OSInit()時(shí),所有事件控制塊被鏈接成一個(gè)單向鏈表——空閑事件控制塊鏈表。每當(dāng)建立一個(gè)信號(hào)量、郵箱或者消息隊(duì)列時(shí),就從該鏈表中取出一個(gè)空閑事件控制塊,并對(duì)它進(jìn)行初始化。因?yàn)樾盘?hào)量、郵箱和消息隊(duì)列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對(duì)于事件控制塊進(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ù)使事件簡(jiǎn)單化,任務(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ā)活動(dòng)。同時(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)一管理信息資源的一種軟件,管理文件的存儲(chǔ)、檢索、更新,提供安全可靠的共享和保護(hù)手段,并且方便用戶使用。功能:文件的構(gòu)造、命名、存取、保護(hù)等。(2)基于NAND FLASH的嵌入式文件系統(tǒng):FLASH讀寫的特點(diǎn):必須以Page為單位進(jìn)行讀寫;寫之前必須先擦除原有內(nèi)容;擦除操作必須對(duì)Block進(jìn)行,即一次至少擦除一個(gè)Block的內(nèi)容。針對(duì)這種情況,將Flash的一個(gè)Page定為1個(gè)扇區(qū),將其1個(gè)Block,32個(gè)扇區(qū)定為一個(gè)簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對(duì)簇大小的要求。(3)FLASH文件系統(tǒng)的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統(tǒng)管理結(jié)構(gòu)在FLASH存儲(chǔ)器上的空間消耗,該空間用于FS建立,而不能用于實(shí)際數(shù)據(jù)的存儲(chǔ),可以提高有用數(shù)據(jù)的存儲(chǔ)空間。(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:主要針對(duì)NOR型Flash存儲(chǔ)器設(shè)計(jì),提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實(shí)現(xiàn)移植。日志文件系統(tǒng);提供了更好的崩潰、掉電安全保護(hù);jffs2支持對(duì)flash的均勻磨損;在扇區(qū)級(jí)別上執(zhí)行閃存擦除/寫/讀操作功能較好;文件系統(tǒng)接近滿時(shí),JFFS2 會(huì)大大放慢運(yùn)行速度——垃圾收集。Nand上yaffs文件系統(tǒng)的優(yōu)勢(shì):專門為Nand flash設(shè)計(jì)的日志文件系統(tǒng);jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對(duì)于128MB的Nand大概需要4MB的空間來維護(hù)節(jié)點(diǎn);啟動(dòng)的時(shí)候需要掃描日志節(jié)點(diǎn),不適合大容量的Nand flash;FAT系統(tǒng)沒有日志。(6)
NAND和NOR——性能比較:NOR和NAND是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存技術(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)過程更為簡(jiǎn)單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128MB;NOR主要應(yīng)用在代碼存儲(chǔ)介質(zhì)中,NAND適合于數(shù)據(jù)存儲(chǔ);NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲(chǔ)卡市場(chǎng)上所占份額最大??煽啃院湍陀眯裕涸贜AND中每塊的最大擦寫次數(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ī)與其使用者之間的圖形化對(duì)話接口。GUI的主要特征:——Windows,采用窗口界面,每個(gè)窗口是用戶或系統(tǒng)的一個(gè)工作區(qū)域。一個(gè)屏幕上可以有多個(gè)窗口。——Icons,采用形象化的圖標(biāo)或圖符,易于操作者理解與操作?!狹enu,采用菜單,可供用戶選擇的功能提示?!狿ointing Devices,指鼠標(biāo)器、觸摸屏等,便于用戶直接對(duì)屏幕對(duì)象進(jìn)行操作。嵌入式GUI的特點(diǎn):體積小;功能強(qiáng);圖形算法簡(jiǎn)潔、快速,占用系統(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ù)字信號(hào)處理器(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所需的存儲(chǔ)器空間(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ù)有自己?jiǎn)为?dú)的棧,C/OS-II允許每個(gè)任務(wù)有不同的??臻g,以便壓低應(yīng)用程序?qū)AM的需求;系統(tǒng)服務(wù),C/OS-II提供很多系統(tǒng)服務(wù),例如郵箱、消息隊(duì)列、信號(hào)量、塊大小固定的內(nèi)存的申請(qǐng)與釋放、時(shí)間相關(guān)函數(shù)等;中斷管理,中斷可以使正在執(zhí)行的任務(wù)暫時(shí)掛起,如果優(yōu)先級(jí)更高的任務(wù)被該中斷喚醒,則高優(yōu)先級(jí)的任務(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()可啟動(dòng)多任務(wù),運(yùn)行進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(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 信號(hào)量 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è)信號(hào)量 OSTaskCreatExt();上述的擴(kuò)展版,更為靈活,9個(gè)參數(shù) OSSemPend();等待一個(gè)信號(hào)量 OSTaskChangPrio()改變?nèi)蝿?wù)優(yōu)先級(jí),不改變?nèi)蝿?wù)狀態(tài) OSSemPost();發(fā)送一個(gè)信號(hào)量
OSSemAcccept();無等待地請(qǐng)求一個(gè)信號(hào)量,若信號(hào)量暫時(shí)無OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)效,也可以讓任務(wù)簡(jiǎn)單返回而不是進(jìn)入睡眠狀態(tài) 消息隊(duì)列 OSSemQurery();查詢一個(gè)信號(hào)量的當(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存儲(chǔ)器的接口函數(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ì)列共可以存儲(chǔ)數(shù)據(jù)的數(shù)目 QueueWriteFront();先進(jìn)先出方式發(fā)送數(shù)據(jù) 串口驅(qū)動(dòng): QueueWrite();以后進(jìn)先出方式發(fā)送數(shù)據(jù) UART0Init();初始化UART0 QueueRead();獲取隊(duì)列中的數(shù)據(jù) UART0Putch();發(fā)送一個(gè)字節(jié) QueueFlush();清空隊(duì)列 UART0Write();發(fā)送多個(gè)字節(jié) QueueNData();獲取隊(duì)列中已存儲(chǔ)的數(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撥號(hào) 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)對(duì)硬件是否有要求?硬件支持軟件,如果CPU,沒有定時(shí)器,OS時(shí)間片管理就無法實(shí)現(xiàn);Linux的虛擬內(nèi)存功能,ARM上沒有該存儲(chǔ)器,就無法運(yùn)行Linux。
3、UCOSII操作系統(tǒng)的就緒表用何種機(jī)制保證其實(shí)時(shí)性不受任務(wù)個(gè)數(shù)的限制?UCOSII是占先式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級(jí)最高的任務(wù)準(zhǔn)備就緒則擁有CPU的所有權(quán),開始投入運(yùn)行;不支持時(shí)間片輪轉(zhuǎn)法,每個(gè)任務(wù)優(yōu)先級(jí)是唯一的,查找準(zhǔn)備就緒的最高優(yōu)先級(jí)的任務(wù)并執(zhí)行上下文切換;UCOSII任務(wù)調(diào)度所花的時(shí)間為常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。
消息機(jī)制對(duì)于多任務(wù)系統(tǒng)的意義?使兩個(gè)任務(wù)獨(dú)立性增強(qiáng),耦合比較松散。P(s){if(s<1)wait();s--}
V(s){s++;} 嵌入式系統(tǒng)的軟/硬件框架:硬件層、驅(qū)動(dòng)層、OS層、中間層和應(yīng)用層。