第一篇:嵌入式系統復習總結
嵌入式系統復習總結
一、嵌入式系統的概述
1.嵌入式系統的定義:嵌入到對象中的專業計算機 2.三大特點:嵌入型、專業性、計算機系統 3.組成:軟件、硬件
4.結構層次:應用程序、嵌入式系統實時操作系統,硬件抽象層、嵌入式系統硬件工作平臺
5.分類:MCU、EMPU、DSP、CPLDFPGA、SoC
二、51單片機
1.單片機的特點:體積小、控制功能強、可靠性高、易擴展易產品化、性能價格比高、需要開發裝置
2.51單片機的組成:CPU、64KB數據存儲器、4KB程序存儲器、兩個16位定時計數器、5個中斷源、P0~P3 4個并行IO口、4個串行
3存儲其結構特點:內、外數據存儲器,內、外程序存儲器 程序存儲器,內外統一編制,地址重合區由EA決定,EA=1訪問外部,EA=0訪問內部,內部數據存儲器:00H~20H由32個寄存器組成,每八個一組,21H~2FH位尋址區,30H~FFH用戶存儲區,內外存儲地址有指令區分MOVSMOV SFR特殊功能寄存器:ACC、B、SP、DPTR、PSW、IO宿存器 4.CPU時序電路:振蕩周期(1)、狀態周期(2)、機器周期(12)、指令周期、CPU訪問指令時兩次讀指令,訪問外部程序存儲器是ALE兩次有效,S1P2S4P2,4.單片機的引腳功能:PSEN,ALEPROG,EA 5.輸入輸出口結構:p0準雙向口,每位可帶8個LSTTTL負載,輸出需要上拉電阻(準雙向原因:作為輸出口,要給鎖存器1,屏蔽兩個二極管)
p1、p2均為準雙向口,帶四個負載,p1也需要上拉電阻,p2自帶電阻,p2控制信號為1時輸出高八位地址 p3每個位有特殊定義 6.單片機的尋址方式:
直接尋址:SFR尋址均為直接尋址
寄存器尋址:乘法指令中B寄存器為寄存器尋 立即數尋址:
寄存器間接尋址:R0,R1 變址尋址:注意PC變址不改變PC值,DPTR變址可以隨意到任意位置取數
相對變址尋址:調轉指令 位尋址 7.單片機指令:(1)數據傳送類指令:MOVMOVXMOVC,XCHXCHDSWAP,PUSHPOP(2)數據傳送類指令:
ADDADDCINC,SUBBDEC,MUL(低位A,高位B),DIV(商A,余數B)
(3)邏輯類指令:
ANL,ORL,XRL, RL,RR,RLC,RRC, CPL(按位取反),CLR(請位)
(4)轉移類指令
AJMP,LJMP,SJMP,JMP.JZ.JNZ,CJNE,CJE,DJNZ(5)位轉移指令
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.程序設計:
冒泡法,BCD轉2進制,2進制轉BCD,ASCALL轉2進制 9.偽指令:ORG,EQU 10.中斷系統
兩個外部中斷INT0、1,兩個定時器中斷TI0、TI1,串口中斷
中斷系統的組成:TCON,SCON,IE,IP
中斷響應的條件:
有中斷請求; EA=1;
IE相應的中斷位為1;CPU執行指令最后一個周期;
CPU沒有執行同級或者更高級的中斷指令; CPU不執行RET,RETI或者讀取IEIP的指令
中斷響應的過程:
①置位相應的優先級狀態觸發器,清除相應的中斷請求標志(TI和RI除外);
②由硬件自動生成一條長調用指令LCALL,將斷點地址(當前PC值)壓入堆棧加以保護;
③將中斷入口地址裝入PC,使程序轉向執行中斷服務程序。中斷響應時間為3~8個機器周期
中斷相應返回時: 將優先狀態觸發器置0; 將返回地址送至PC返回
定時器中斷自動清除標志位 外部中斷:
(1)電平觸發外部清除,或者軟件清除(2)邊緣觸發自動清除 串行口中斷軟件清除
10.定時器中斷:TCON,80H設置(T0低位,T1高位)
工作方式0:13位計數TH位高八位TL低五位表示低五位,工作方式1:16位計數
工作方式2:8位計數,TL方初值,TH計數
工作方式3: TL0不變可做定時計數,用T0的一套,TH0只能定時用T1的一套。T1為方式3時不工作 11.利用定時中斷溢出編程
(1)產生方波信號(方波信號的嵌套)
①設置TMOD控制字,確定工作方式;
②計算計數初值并裝入計數值寄存器TH0(1)、TL0(1); ③若使用中斷系統,則開中斷EA=
1、ET0或ET1=1; ④啟動定時器/計數器工作(置TR0或TR1)。(2)外部中斷的擴展(查詢方式,將初值設置為最大)
禁止中斷;JBC 12.串行口波特率的計算
方式0:固有頻率的12分之一
方式1、3:與三相同與T
1fOSC2SMOD??的益處時間有關 3212?2n?x?? 方式2:固有頻率的64分之一
三、ARM單片機
(1)兩種工作狀態:ARM狀態(32位)、THUM狀態(16位)
工作狀態的切換:BX RN 寄存器最后一位是0切換ABM狀態,最后一位是1切換到THUM狀態
(2)七種工作模式:用戶模式、系統模式、管理模式、外部中斷模式、快速中斷模式、未定義指令模式、數據訪問中止模式
后五個屬于“異常模式”,后六屬于“特權模式”
(3)ARM7的流水式作業:取指——譯碼——執行
采用馮諾依曼存儲結構 ARM9流水式作業:取指——譯碼——執行——訪存——回寫 采用哈佛結構
(4)存儲其結構(37個寄存器)
31個通用寄存器、6個標志位寄存器 1.R0~R7八個通用寄存器(7種模式通用)2.R8~R12前六種公用,最后一種自己用一組 3.R13:堆棧指針
R14:子程序連接寄存器(子程序調用時自動將下一條地址送給R14),這兩個寄存器用戶模式、系統模式公用一組,異常模式每種各一組 4.R15,:PC計數器
5.CPSR:程序狀態寄存器 N.V.C.Z.Q.I.F.T.M4~M0 6.SPSR:程序狀態備用寄存器,調用子程序將當前CPSR復制給SPSR,用戶模式與系統模式沒有,異常模式每種一組。
(5)存儲類型;
數據類型三種:8位字節、16位半字、32位字
指令類型:16位THUM、32位ARM 大端格式:與正常存儲方式相反
小端格式:高字節對應高地址,低字節對應低地址(6)多級存儲形式:寄存器組、片上RAM、CASHE、主存儲器
(7)異常:(其中異常模式類似于中斷)1.種類:按優先級排列
復位、數據中止、FIQ、IRQ、指令預取終止、未定義指令終止、SWI(軟件中止)2.異常的相應過程:
保護返回地址:將下一條地址復制到LR子程序連接寄存器中;
保護當前狀態寄存器的值:復制CPSR至將要執行模式的SPSR;
強行設置異常模式下CPSR的值;
強制PC從中斷向量地址取出指令執行;
可以設置中斷禁止位;
3.中斷的返回
將返回的值寫入PC中
恢復CPSR的值
清除沖斷禁止位
4.異常返回地址的確定(LR 在復制時已自動減4)
(1)軟件中止:直接返回(2)未定義指令:直接返回
(3)FIQ、IRQ、指令預取中止:均減四返回
(4)數據中止:減八返回
(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種類型的堆棧操作)塊復制尋址:LDMIA R1!,{R2-R4,R5}(4種塊復制尋址操作)
相對尋址:BL SUBR(9)指令集: 數據傳送:MOV、MVN 算術運算:ADD、ADC、SUB、SBC、RSB、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 邏輯運算:AND、ORR、EOR、BIC 比較和測試:CMP、CMN ARM程序狀態訪問指令:MSR ARM存儲器訪問指令
單一數據:LDR、STR、LDRB、STRB 批量數據:LDM、STM(IA、IB、DA、DB)數據交換:SWP ARM分支指令:B、BL、BX(10)偽指令與程序設計 1.偽指令
ADR:小范圍加載指令,將相對偏移量加載到某個寄存器中,只能用一條指令來實現,若不能用一條指令來實現則編譯錯誤
ADRL:中范圍加載指令,將PC的相對偏移量加載到某個寄存器中,必須用兩條指令來實現,LDR:將某個32位偏移量加載到寄存器中
聲明變量:
全局變量:GBLA,GBLL,GBLS 局部變量:LCLA,LCLL,LCLS 變量賦值:SETA,SETL,SETS 聲明寄存器列表:RLIST 數據定義偽指令:DCB DCDU DCWU 分配一塊字節內存單元偽操作SPACE(%)格式:標號 SPACE expr 或 標號 % expr 聲明數據緩沖池(文字池)偽操作LTORG 格式: LTORG 段指示偽操作AREA 格式:AREA 段名 {,屬性1} {,屬性2}… 程序入口偽操作ENTRY 格式:ENTRY(11)基本ATPCS規則
1.子程序調用過程中寄存器的使用規則
子程序間通過寄存器R0~R3來傳遞參數
在子程序中,使用寄存器R4~R11來保存局部變量 寄存器R12用作子程序內部調用的scratch寄存器 寄存器R13用作數據棧指針,記作sp或SP 寄存器R14用作鏈接寄存器,記作lr或LR 寄存器R15是程序計數器,記作pc或PC。2.數據棧的使用規則;
數據棧為滿遞減FD類型,并對數據棧的操作是8字節對齊的
3.參數的傳遞規則。
(a)參數個數可變的子程序參數傳遞規則
(b)參數個數固定的子程序參數傳遞規則(c)子程序結果返回規則
四、存儲器與接口技術
1.SRAM:靜態隨機訪問存儲
(1)組成:地址線、數據線、讀寫控制、片選信號線(2)工作原理:讀寫均先輸送地址,在進行數據的輸入和輸出
(3)SRAM與CPU的鏈接: 2.DRAM:
有行地址和列地址,工作時有地址鎖存器,先輸送行地址在輸送列地址,選中單元后輸送單元,讀數據時需要刷新電路
3.SDRAM:與SRAM相比多了同步時鐘信號,同時增添了BLOCK,地址分行地址、列地址,也需要刷新電路,BLOCK為最大讀寫單元,引腳BA選擇塊兒 4.FLASH:
(1)NOR FLASH:存儲容量絞小,讀速度較快,采用線性尋址,可直接找到存儲位置
(2)HAND FLASH:存儲密度大,寫入和擦除速度較快,有BLOCK存儲單元,有塊兒地址,頁地址,頁內地址,數據地址線復用,傳送地址需要四個周期
5.MCS-51單片機
P0口作為地址線低八位和數據線,所以需要地址鎖存器,p0口分時復用,由ALE管理,P2輸出地址高八位,PSEN接程序存儲器使能端OE 進行存儲其擴展時可用與門或者先選來鏈接存儲器片選信號進行擴展。
鏈接程序存儲器數據存儲器復用時,將PSEN 與RD相與和選通相連連 6.ARM(S3C2410)存儲機制:
(1)與SRAM、DRAM相連(2)高速存儲機制:CASHE(3)NMUI 接口設計:
(1)HAND FLASH啟動:將地址前4KB 的代碼作為啟動代碼
(2)ROM啟動: 可選擇16位或者32位的存儲器,通過M1、M0進行選擇 在與存儲器進行連接時,注意地址線,若存儲器為8位直接位位對應,16位是錯開一位,32位時錯開兩位 7.接口 1.RS-232C 信號電平與邏輯
RS-232C信號采用負邏輯,即以+12V電平視為邏輯“0”,-12V電平視為邏輯“1”
串行接口電路中需要在TTL標準與RS-232C標準之間進行電平轉換 2.SPI接口
總線定義及信號線構成 傳輸技術:同步、全雙工
SPI采用同步、全雙工串行傳輸技術,也稱為同步串行總線接口;SPI總線(Serial Peripheral Interface)稱為串行外圍設備接口 3.USB 總線定義及信號線構成,半雙工傳輸 三種設備Host、Device和HUB USB(Universal Serial Bus)即通用串行總線,主要用于PC與外圍設備互連。USB的輸出特性是差分驅動、支持半雙工方式,接收采用差分接收 USB體系結構中包括三種設備 Host(即主控制器)Device(設備)
HUB(集線器,也是設備)4.I2C總線
總線定義及信號線構成,信號線連接方式 總線仲裁
I2C總線定義了兩根傳輸線:SDA(串行數據)和SCL(串行時鐘),都是雙向傳輸線,通過電阻上拉到正電源,總線空閑時都是高電平5.I2S總線
總線定義及信號線構成 數據傳輸格式
I2S總線(Inter-IC Sound Bus集成電路內置音頻總線 串行數據高位MSB在先,發送器和接收器可以有不同的字長無論有多少位有效數據,最高位MSB總是出現在IISLRCK變化后的第二個IISCLK脈沖處。MSB位置固定,LSB位置取決于字長。這就使得接收端與發送端可以不同的有效位數。如果接收端能處理的有效位數少于發送端的,則可以放棄數據幀中多余的低位數據;如果接收端能處理的有效位數多于發送端的,則剩余低位自行補0。這種同步機制使得數字音頻設備的互連更加方便,而且不會造成數據錯位
第二篇:嵌入式系統復習總結
一、嵌入式系統定義:以應用中心,以計算機技術為基礎,軟件硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
二、硬件設計的步驟:1需求和功能分析,這是系統設計的首要任務和依據。2設計方案的規劃,主要操作有構造系統體系結構;軟硬件功能劃分;性能指標評估;可維護性;3核心部件選型,核心部件通常指系統的處理器、微控制器或DSP等;4主要部件選型,主要部件有存儲器、測試接口、外設接口等;5 基礎部件選型,基礎部件指系統設計所需的電源電路、時鐘電路、復位電路、低功耗電路等;6 原理圖設計;7 PCB設計;8 系統調試;9產品維護和升級。
三、嵌入式操作系統EOS(Embedded Operating System):嵌入式應用軟件的基礎和開發平臺,它是一段嵌入在目標硬件中的軟件,用戶的其他應用程序都建立在嵌入式操作系統之上。目前有:linux、uClinux、WinCE、Uc/OS-II、VxWorks等,它們具有實時性高、可靠性好、可裁剪、體積小等特性。實時系統是指一個能夠在指定或者確定的時間內完成系統功能以及對外部或內部、同步或異步時間作出響應的系統。嵌入式實時操作系統(Real Time Embedded Operating System)是一種實時的、支持嵌入式系統應用的操作系統,是嵌入式系統(包括硬、軟件系統)極為重要的組成部分。
四、S3C44B0X:功能:
? 2.5V ARM7TDMI內核,帶有8K高速緩存器(SAMBAII? 1通道多主IIC-BUS控制器;
總線體系結構); ? 1通道IIS-BUS控制器;
? 外部存儲器控制器(FP/EDO/SDRAM控制,片選邏? 5個PWM定時器核1通道內部定時器;
輯); ? 看門狗定時器;
? LCD控制器(最大支持256色STN,LCD具有專用? 71個通用I/O口8通道外部中斷源;
DMA); ? 功耗控制:具有普通、慢速、空閑核停止模式; ? 2通道通用DMA、2通道外設DMA并具有外部請求? 8通道10位ADC;
引腳; ? 具有日歷功能的RTC;
? 2通道UART,帶有握手協議1通道SIO; ? 具有PLL的片上時鐘發生器。
5種模式:
正常模式:正常運行模式;低速模式:不加PLL 的低時鐘頻率模式;
空閑模式:只停止CPU 的時鐘;停止模式:停止所有的時鐘;
LCD的SL空閑模式:SL 空閑模式的進入將導致 LCD 控制器開始工作。此時,CPU和除LCD控制器外的所有外設都停止工作。
五、嵌入式最小系統是指由保證嵌入式微處理器可靠工作所必需的基本電路組成的系統,通常包括處理器單元、時鐘單元、復位單元、存儲器單元、供電單元和調試接口。基于ARM的嵌入式最小系統基本組成主要包括:基于ARM核的微處理器、電源電路、復位電路、時鐘電路、存儲器電路(FLASH和SDRAM)、UART接口電路和JTAG調試接口。
六、異常處理的基本步驟:1將下一條指令的地址存入相應連接寄存器
LR,將CPSR復制到相應的SPSR中。2根據異常類型,強制設置CPSR的運行模式位。3強制PC從相關的異常向量地址取下一條指令執行,從而跳轉到相應的異常處理程序處。如果異常發生時,處理器處于Thumb狀態,則當異常向量地址加載入PC時,處理器自動切換到ARM狀態。
異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回:1將連接寄存器LR的值減去相應的偏移量后送到PC中。2將SPSR復制回CPSR中。若在進入異常處理時設置了中斷禁止位,要在此清除。
七、調用:
1、匯編訪問C變量全局:匯編可通過地址間接訪問在C語言中聲明過的全局變量。通過使用important關鍵詞引入全局變量,并利用ldr
與str指令根據全局變量的地址訪問他們。
2、C語言調用匯編:匯編語言設計首先遵守atpcs。首先在匯編文件需要使用EXPORT為操作來聲明,使得本程序可以被其他程序調用。
同時要在C程序調用匯編程序之前要在C程序中使用extern關鍵字作為引入的匯編程序的聲明;
3、匯編調用C:匯編語言設計首先遵守atpcs。需要在匯編中使用IMPORT偽操作來聲明對應的C語言程序。在匯編語言程序中通過BL
指令來調用子程序。
八、嵌入式系統特點:1“專用”計算機系統,2運行環境差異很大,3比通用PC資源少,4功耗低、體積小、集成度高、成本低,5具有完整的系統測試和可靠性評估體系,6具有較長的生命周期7需要專用開發工具和方法進行設計,8包含專用調試電路,9多學科知識集成系統。應用范圍:1汽車;2工業控制;3通信設備;4消費電子5商業終端6航空航天、軍事需求。
嵌入式應用的多樣性,造就了嵌入式微處理器的多樣性,32位嵌入式RISC處理器產品主要有MIPS公司的MIPS,IBM公司的PowerPC系列,Sun公司的Sparc和ARM公司的基于ARM核系列。
九、嵌入式系統的設計過程:(1)系統定義與需求分析(2)系統設計方案的初步確立(3)初步設計方案性價比評估與方案評審論證(4)完善初步方案、初步方案實施(5)軟硬件集成測試(6)系統功能性能測試及可靠性測試ARM微處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理器執行32位的字對齊的ARM指令;第二種為Thumb狀態,此時處理器執行16位的、半字對齊的Thumb指令。在程序的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,并且,處理器工作狀態的轉變并不影響處理器的工作模式和相應寄存器中的內容。但ARM微處理器在開始執行代碼時,應該處于ARM狀態。
十、ARM微處理器:7種運行模式
用戶模式(usr):ARM處理器正常的程序執行狀態。
快速中斷模式(fiq):用于高速數據傳輸或通道處理。
外部中斷模式(irq):用于通用的中斷處理。
管理模式(svc):操作系統使用的保護模式。
數據訪問終止模式(abt)當數據或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護。
系統模式(sys):運行具有特權的操作系統任務。
未定義(und):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真。除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權模式;其中除去用戶模式和系統模式以外的5種又稱為異常模式,常用于處理中斷或異常,以及需要訪問受保護的系統資源等情況。工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理器執行32位的字對齊的ARM指令;第二種為Thumb狀態,此時處理器執行16位的、半字對齊的Thumb指令。處理器工作狀態的轉變并不影響處理器的工作模式和相應寄存器中的內容。但ARM微處理器在開始執行代碼時,應該處于ARM狀態。
十一、ARM寄存器: ARM處理器共有37個寄存器。其中包括:31個通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。以及6個32位狀態寄存器。
ARM指令集可以分為6大類:數據處理指令(算術運算指令;邏輯運算指令;數據傳送指令;比較指令;測試指令;乘法指令);Load/Store指令;跳轉指令;程序狀態寄存器處理指令;協處理器指令;異常產生指令。
ARM處理器支持的基本尋址方式有7種:立即尋址;寄存器尋址;寄存器間接尋址;基址加偏址尋址;堆棧尋址;快拷貝尋址;相對尋址。
兩種常見的ARM開發環境及其特點:ADS/SDT IDE開發環境:它由ARM公司開發,使用了CodeWarrior公司的編譯器; 集成了GNU開發工具的IDE開發環境:它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。
十二、Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。BootLoader是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們仍然可以對BootLoader歸納出一些通用的概念來,以指導用戶特定的 Boot Loader 設計與實現。
BootLoader包含兩種不同的操作模式:啟動加載(Boot loading)模式:Boot Loader 從目標機上的某個固態存儲設備上將操作系統加載到 RAM 中運行,整個過程并沒有用戶的介入。下載(Downloading)模式:Boot Loader 將通過串口連接或網絡連接等通信手段從主機(Host)下載文件
嵌入式系統的發展趨勢:
1即將迎來以ARM為核心的32位浪潮
嵌入式系統應用的高低端 :以4位、8位單片機或為控制器(MCU)為核心的嵌入式系統,早已廣泛的應用于工業控制、軍事、航空航天、家電等各個領域,極大地推動了IT技術的發展。目前這些屬于最低端應用的嵌入式系統。這些低端應用市場范圍非常廣泛,局部帶動了低端應用。
即將來臨的32位浪潮:隨著嵌入式系統的不斷發展,當應用越來越復雜、使用范圍越來越廣時,8位處理器已經無法滿足的需要,此時32位SoC為高性能嵌入式系統開發提供了功能豐富的硬件平臺,也為實時嵌入式操作系統的廣泛應用提供了硬件基礎。因此,以32位處理器作為高性能嵌入式系統開發的核心已是嵌入式技術發展的必然趨勢。
32位向ARM 轉移,形成ARM市場主導地位:在嵌入式微處理器中,雖然有多種嵌入式處理器可供選擇,但是ARM處理器核以其低功耗、高性能等突出優點已在32位嵌入式應用中穩居第一。ARM已成為移動通信、手持計算、多媒體數字消費等嵌入式解決方案事實上的標準。優良的性能和廣泛的市場定位極大地增加和豐富了ARM的資源,加速了ARM處理器面向各種應用的系統芯片的開發和發展。
2嵌入式系統與Internet的融合:
為適應嵌入式分布處理結構和應用上網需求,面向21世紀的嵌入式系統要求配備標準的一種或多種網絡通信接口。針對外部聯網要求,嵌入設備必需配有通信接口,相應需要TCP/IP協議簇軟件支持;由于家用電器相互關聯(如防盜報警、燈光能源控制、影視設備和信息終端交換信息)及實驗現場儀器的協調工作等要求,新一代嵌入式設備還需具備IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同時也需要提供相應的通信組網協議軟件和物理層驅動軟件。為了支持應用軟件的特定編程模式,如Web或無線Web編程模式,還需要相應的瀏覽器,如HTML、WML等。3未來嵌入式系統的發展趨勢
近幾年,在消費電子、工業應用、軍事國防、網絡設備等領域的嵌入式應用,為中提供了難得的發展機遇。另外,嵌入式技術又不斷地刺激新的技術的產生——信息家電、醫療電子病歷、微小型智能武器等方面應用也日益廣泛,應用深度也進一步加強。
互聯網的普及、微電子加工工藝的提高、3C技術的普遍融合、使用者需求的增多、信息服務應用的生活化、技術的滲透性和融合性、設備的關聯性以及個性化服務的普遍需求。因而,移動化處理信息,即隨時隨地的獲取信息、處理信息等,成為信息社會把握先機而制勝的必然武器。日益發展的嵌入式已能夠滿足人們隨時隨地利用任何設備和手段來接收、處理和發布信息的需求。低成本、低功耗的消費電子和寬帶、無線通信以及處理運算的高效計算結合技術將進一步刺激和加速嵌入式技術的發展,造就更廣闊的市場空間。
第三篇:嵌入式復習總結
一:嵌入式系統概述 1嵌入式定義
2嵌入式與通用計算機
A.嵌入式系統具有應用針對性
B.嵌入式系統硬件一般對擴展能力要求不高
C.嵌入式一般采用專門針對嵌入式應用設計的處理器 D.嵌入式不一定有操作系統 E.嵌入式一般有實時性要求
F.嵌入式一般有較高的成本控制要求 G.嵌入式系統軟件一般有固化的要求
H.嵌入式系統軟件一般采用交叉開發的模式
I.嵌入式在體積,功耗,可靠性和環境適應性上一般有特殊要求 J.嵌入式標準化程度不高 3嵌入式系統的組成
嵌入式系統包括硬件和軟件兩個組成部分
嵌入式系統硬件部分一嵌入式處理器為核心,擴展存儲器和外部設備控制器 嵌入式系統軟件運行在硬件平臺之上,硬件抽象層向下管理硬件資源,向上為操作系統提供一個虛擬硬件平臺,是操作系統支持多硬件平臺的關鍵 4嵌入式的分類
A.按處理器位寬分類 B.按有無操作系統
C.按實時性(硬實時:一定,軟實時:從統計角度)D.按應用分類
二:嵌入式處理器 1嵌入式處理器的原理
A.嵌入式的指令系統(一條完整的指令包括操作碼和操作數)B.嵌入式處理器的類型
根據結構可分為哈弗結構(數據指令分開存儲,使用兩套彼此獨立的存儲總線,故可以同時訪問程序和指令)和馮諾依曼結構(程序指令和數據采用統一的存儲器,尋址不能同時進行)根據指令格式的不同可以分為復雜指令計算機處理器(CISC)和精簡指令計算機處理器(RISC)RISC的最大特點是指令長度固定,指令種類少,尋址方式種類少,大多數是簡單指令且都能在一個時鐘周期內完成,易于設計高性能的流水線。
RISC還有特點(1)芯片面積小(2)開發時間段(3)性能高 C.嵌入式處理器的結構(1)運算器
包括算數邏輯單元,累加器,暫存器及標志寄存器等(2)控制器
指令寄存器,指令譯碼器,邏輯控制電路(3)寄存器陣列及連接各部分的內部總線 D.大端方式和小端方式
E.影響嵌入式處理器性能的因素(1)主頻
(2)指令效率與單指令執行所需要的時間(3)處理器的字長(4)內存總線速度(5)高緩存設計
(6)CPU的系統構架 2.嵌入式處理器的分類(1)嵌入式微處理器(2)嵌入式微控制器(3)嵌入式DSP(4)嵌入式片上系統 3.嵌入式處理器的特點
(1)嵌入式處理器種類繁多,功能多樣且性能跨度大(2)嵌入式處理器功耗低
(3)提供靈活的地址空間尋址能力(4)支持靈活的功耗控制
(5)功能密集,提供豐富的外部接口 4.8051單片機
(1)采用哈弗結構,除了一個8位處理器核心外,還集成了中斷控制器,RAM,ROM,定時器和通用異步收發器。(2)主要特征:
5ARM處理器及實例 A.ARM處理器片內總線
6嵌入式X86處理器及實例 7DSP處理器及實例
實際應用中有兩種形式:一:一種是作為主處理器的協處理器,,,8SOC處理器及實例
9:嵌入式處理器的選擇
10:嵌入式處理器的JTAG調試接口 它在嵌入式開發過程中的重要作用 A.硬件基本功能的測試 B.軟件下載 C.軟件調試 D.Flash燒寫
三:嵌入式系統總線
1:計算機總線的基本概念
2嵌入式系統總線的特點 A.機械結構上的差別
B.嵌入式系統對總線標準功能的補充 3:ISA總線原理
ISA總線最初是IMB公司為PC機制定的總線標準,采用8位數據寬度,能尋址1MB的地址空間。1984年IBM推出PC/AT系統,ISA從8位擴充到16位,地址線從20擴充到24條,可尋址空間達到16MB,16位ISA總線時鐘頻率為8MHz,峰值數據傳輸速率為8MB/S。A:ISA總線信號(1)地址信號(2)數據信號(3)總線命令信號(4)時序控制信號(5)DMA相關信號(6)中斷相關信號
(7)總線數據寬度控制信號(8)其他信號 4:PCI總線原理
在嵌入式中以PC/104,CompactPCI,miniPCI等形式出現 A:pci總線的特點(1)高性能
(2)資源豐富且成本低(3)易于使用(4)可擴展性好(5)支持不同的平臺 B:PCI總線信號(1)系統信號
(2)地址與數據信號(3)接口控制信號(4)總線仲裁信號(5)錯誤告信號(6)中斷信號(7)附加信號
(8)64位總線擴展信號(9)JTAG邊界掃描信號 C:PCI設備的配置空間
PCI配置空間是PCI設備上一組256字節的特殊功能寄存器,用于存儲與設備相關的信息,計算機系統根據配置空間實現對PCI總線設備的管理。(1)配置空間的功能與組織(2)設備標識
(3)設備控制寄存器(4)設備狀態寄存器(5)基址地址寄存器 5:PC/104系列總線標準
6:CompactPCI總線
CompactPCI是PCI總線的另一種工業版本,采用Eurocard結構標準,主要應用在工業,軍事,電信等行業。除了兼容桌面PCI總線所有的硬件和軟件資源外,還有一個重要特點——支持熱插拔,該技術對實現高可靠的計算機系統至關重要。四:嵌入式系統常見電路
系統復位與電源監控,I2C總線,實時時鐘和RS-232串行接口是嵌入式系統最常見的四種基本電路
1系統復位與電源監控 A.復位有四種類型(1)上電自動復位(2)手動復位(3)看門狗復位
看門狗是一種定時器,必須由軟件定期對該定時器進行清零,否則計時器到期將產生系統復位信號,看門狗可以使系統在軟件崩潰/死機后自動復位。(4)系統異常復位
B.復位與電源管理控制器
為了產生更可靠的系統復位,可以用專用復位管理控制器如MAX705 2I2C總線原理
I2C是一種簡單的只有兩條信號線的串行總線,在嵌入式中應用很廣泛,盡管簡單,她仍然能支持多主設備,并且具有總線仲裁的功能。3.實時時鐘 4.RS-232接口 RS-232串行接口是實現計算機與計算機以及計算機與外圍設備連接的一種簡單且成本低的方法,除了實現一般的數據通信外,在系統調試中還常用于實現程序下載和系統控制臺的功能。
RS-232接口支持全雙工傳輸方式,可同時收,發數據,接受方的接收比特率與發送方必須相同。
是串行接口,采用負邏輯。第五章:嵌入式系統存儲器 1靜態隨機存儲器
SRAM容量小,成本高,在PC機中已經不作為主存使用,但他的接口簡單,在嵌入式系統中還有很多應用,常與單片機,DSP等處理器配套使用。比如
IDT7146靜態RAM存儲器 2雙端口存儲器(DPRAM)雙端口RAM是一種很特殊的存儲器,有兩套讀寫端口,可以同時被兩個處理器訪問,在嵌入式系統中常用于實現兩個處理期間的緊耦合數據通信,相當于一個共享存儲區。3同步動態隨機存儲器(DRAM)DRAM容量大,成本低,在嵌入式系統應用很廣泛 4NOR Flash Flash是嵌入式系統中常用的一類非易失性存儲器分為NOR flash和NAND flash兩類 5NAND flash 廣泛應用于手機,PDA,數碼相機,MP3播放器等 6串行EEPROM 小型價格低廉的EEPROM可作為flash的替代品
六嵌入式系統引導程序
引導程序是計算機系統上電或復位后,實現系統初始化,將系統引入一個可運行的狀態,并將操作系統加載到系統RAM中運行的程序。1.PC機中的引導程序
BIOS的主要功能是為計算機提供最底層,最直接的硬件設置和控制,包括硬件初始化,上電自測試,I/O設備管理,中斷服務,引導加載操作系統等。
BIOS并不直接加載操作系統,而是加載操作系統引導程序,再把執行權交給引導程序,由引導程序繼續完成操作系統的后續加載任務。2.嵌入式系統中的引導程序 典型的嵌入式系統中,軟件分為4個部分:引導程序,操作系統內核,文件系統和應用程序。應用程序和操作系統內核之間可能包括嵌入式圖形用戶界面。
在有操作系統的嵌入式計算機中,引導程序是必備的軟件,完成上電初始化,加載操作系統并最終啟動應用系統,在嵌入式系統中,通常由引導程序獨立完成硬件初始化,上電自測試及操作系統加載啟動等任務。A.嵌入式系統引導程序的主要功能(1)硬件初始化
(2)加載啟動嵌入式操作系統(3)提供人機交互命令
(4)支持目標機與開發機之間的通信(5)支持FLASH燒寫
B.引導程序有兩種模式:啟動加載模式和下載模式,系統的最終用戶只關心啟動加載模式,而下載模式對系統的開發與維護有很重要的作用。3.嵌入式系統引導程序的啟動過程
A.引導程序的執行過程可分為兩個階段:階段1和階段2.階段1完成硬件初始化,工作模式設置等與硬件平臺密切相關的操作,該階段的程序代碼一般用匯編語言編寫,階段2完成一些相對高級,復雜的功能,如通信,文件下載,FLASH燒寫,該階段的程序代碼一般由C語言實現。B.階段1(1)硬件設備初始化
(2)為加載引導程序的階段2代碼準備RAM空間(3)將階段2二進制代碼復制到RAM空間中(4)設置好堆棧指針(5)執行階段2程序代碼 C.階段2(1)其他硬件設備的初始化(2)檢測系統內存映射
(3)將操作系統內核映像及文件系統映像從FLASH讀取到系統RAM中(4)為內核設置啟動參數(5)調用內核 4.U-Boot 是一種應用廣泛的嵌入式引導程序 七嵌入式操作系統
嵌入式實時操作系統具有模塊化,可移植,可定制,高實時,高可靠等特點。,1概述 A.與桌面 操作系統相比,嵌入式操作系統一下特點:(1)模塊化,可定制(2)實時性強(3)資源占用少(4)穩定性要求高(5)代碼有固化要求
(6)具有良好的硬件適應性,便于移植 2.嵌入式操作系統硬件抽象層 3嵌入式操作系統實時性 A.實時系統具有以下特點
(1)實時系統具有復雜的約束性(2)實時任務的執行具有可預測性(3)實時系統具有高可靠性的要求(4)實時系統需要與外部環境進行交互(5)實時系統需要滿足一定的峰值負荷要求 B.嵌入式系統實時性 C.裸機中的實時軟件設計 D.嵌入式實時操作系統
(1)通用操作系統與嵌入式操作系統差異 a.任務調度策略不同 b.內存管理方式不同 c.中斷處理方式不同
d.共享資源的互斥訪問機制不同
e.系統調用和系統內部操作的時間開銷有差別 f.系統的可重入性 g.輔助工具
(2)實時操作系統的一些要求 a.直接訪問存儲 b.高速緩存
(3)評價實時操作系統的方面 a.任務調度機制 b.內存管理 c.最小內存開銷
d.中斷禁止時間與中斷延遲時間 e.任務切換時間 4.嵌入式Linux A.嵌入式Linux的特點(1)支持多硬件平臺(2)高效穩定的系統內核(3)開放源碼,軟件豐富(4)完善的開發工具(5)完善的網絡通信(6)支持多種文件系統(7)支持多種圖形用戶界面 B.常見的嵌入式Linux操作系統(1)RTLinux(2)uCLinux(3)EOSunx和Midnux(4)
第四篇:嵌入式系統相關知識點總結
嵌入式系統的定義及特點
定義:嵌入式系統是以應用為中心、以計算機技術為基礎,軟、硬件可裁剪,適應于應用系統對功能、可靠性、成本、體積、功耗等方面有特殊要求的專用計算機系統。
特點:(1)嵌入式系統是面向特定應用的。嵌入式系統中的CPU是專門為特定應用設計的,具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由板卡完成的任務集成在芯片內部,從而有利于整個系統設計趨于小型化。
(2)嵌入式系統涉及先進的計算機技術、半導體技術、電子技術、通信和軟件等各個行業。是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。
(3)嵌入式系統的硬件和軟件都必須具備高度可定制性。
(4)嵌入式系統的生命周期相當長。嵌入式系統和具體應用有機地結合在一起,其升級換代也是和具體產品同步進行的。
(5)嵌入式系統本身并不具備在其上進行進一步開發的能力。在設計完成以后,用戶如果需要修改其中的程序功能,必須借助于一套專門的開發工具和環境。
(6)為了提高執行速度和系統可靠性,嵌入式系統中的軟件一般都固化在存儲器芯片或單片機中,而不是存貯于磁盤等載體中。
特點也可答:1.系統內核小。2.專用性強。3.系統精簡。4.高實時性的系統軟件(OS)是嵌入式軟件的基本要求。5.嵌入式軟件開發要想走向標準化,就必須使用多任務的操作系統。6.嵌入式系統開發需要開發工具和環境。7.嵌入式系統與具體應用有機結合在一起,升級換代也是同步進行,所以具有較長的生命周期。8.為了提高運行速度和系統可靠性,嵌入式系統中的軟件一般都固化在存儲器芯片中。
操作系統在嵌入式系統中所起的作用(四個)
嵌入式操作系統(嵌入式linux學習)的功能
嵌入式操作系統除具備了一般操作系統(嵌入式linux系統)最基本的功能,如任務調度、同步機制、中斷處理、文件處理等外,還有以下兩個方面的功能:
1.構成一個易于編程的虛擬機平臺
嵌入式操作系統構成一個虛擬機平臺,EOS把底層的硬件細節封裝起來,為運行在它上面的軟件(如中間件軟件和各種應用軟件)提供了一個抽象的編程接口。軟件開發在這個編程接口的上進行,而不直接與機器硬件層打交道。
2.系統資源的管理者
嵌入式操作系統是一個系統資源的管理者,負責管理系統當中的各種軟硬件資源,如處理器、內存、各種I/O設備、文件和數據等,使得整個系統能夠高效、可靠地運轉。
嵌入式操作系統負責嵌入式系統的全部軟、硬件資源的分配、調度、控制、協調并發活動。它必須體現其所在系統的特征,能夠通過裝卸某些模塊來達到系統所要求的功能。
嵌入式操作系統是嵌入式系統應用的核心.嵌入式操作系統,大大地提高了嵌入式系統硬件工作效率,并為應用軟件開發提供了極大的便利。
操作系統的作用主要體現在兩方面:
1.屏蔽硬件物理特性和操作細節,為用戶使用計算機提供了便利 2.有效管理系統資源,提高系統資源使用效率
Linux與嵌入式使用的uclinux操作系統的關系
Linux與UNIX系統兼容,開放源代碼。現在廣泛應用于服務器領域。而更大的影響在于它正逐漸的應用于嵌入式設備。uClinux正是在這種氛圍下產生的。所以uClinux就是Micro-Control-Linux,字面上的理解就是“針對微控制領域而設計的Linux系統”。
uClinux是針對控制領域的嵌入式linux操作系統,它從Linux 2.0/2.4內核派生而來,沿襲了主流Linux的絕大部分特性。uClinux同標準Linux的最大區別就在于內存管理。標準Linux是針對有MMU的處理器設計的。在這種處理器上,虛擬地址被送到MMU,MMU把虛擬地址映射為物理地址。通過賦予每個任務不同的虛擬—物理地址轉換映射,支持不同任務之間的保護。對于uCLinux來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬內存管理技術,仍然采用存儲器的分頁管理。
什么是內核?
內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內核決定一個程序在什么時候對某部分硬件操作多長時間。內核,是一個操作系統的核心。是基于硬件的第一層軟件擴充,提供操作系統的最基本的功能,是操作系統工作的基礎,它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。
什么是Bootlonder? 答案一搜狗百科:啟動程序(英語:boot loader,也稱啟動加載器,引導程序)位于電腦或其他計算機應用上,是指引導操作系統啟動的程序。引導程序啟動方式及程序視應用機型種類而不同。BIOS開機完成后,bootloader就接手初始化硬件設備、創建存儲器空間的映射,以便為操作系統內核準備好正確的軟硬件環境。BootLoader是依賴于硬件而實現的,特別是在嵌入式領域,為嵌入式系統建立一個通用的BootLoader是很困難的。
答案二百度百科:Boot Loader 是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。通常,Boot Loader 是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導用戶特定的 Boot Loader 設計與實現。
使用帶uclinux操作系統的嵌入式系統應該注意什么問題?
uClinux的內存管理
uClinux同標準Linux的最大區別就在于內存管理。對于uCLinux來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬內存管理技術,仍采用存儲器的分頁管理,系統在啟動時把實際存儲器進行分頁。在加載應用程序時程序分頁加載。這一點影響了系統工作的很多方面。
uClinux系統對于內存的訪問是直接的,所有程序中訪問的地址都是實際的物理地址。操作系統對內存空間沒有保護,各個進程實際上共享一個運行空間。由于應用程序加載時必須分配連續的地址空間,而針對不同硬件平臺的可一次成塊,分配內存大小限制是不同,所以開發人員在開發應用程序時必須考慮內存的分配情況并關注應用程序需要運行空間的大小。另外由于采用實存儲器管理策略,用戶程序同內核以及其它用戶程序在一個地址空間,程序開發時要保證不侵犯其它程序的地址空間,以使得程序不至于破壞系統的正常工作,或導致其它程序的運行異常。
從內存的訪問角度來看,開發人員的權利增大了(開發人員在編程時可以訪問任意的地址空間),但與此同時系統的安全性也大為下降。uClinux的多進程處理
uClinux沒有MMU管理存儲器,在實現多個進程時(fork調用生成子進程)需要實現數據保護。uClinux的這種多進程實現機制同它的內存管理緊密相關。uClinux針對沒有mmu處理器開發,所以被迫使用一種flat方式的內存管理模式,啟動新的應用程序時系統必須為應用程序分配存儲空間,并立即把應用程序加載到內存。缺少了MMU的內存重映射機制,uClinux必須在可執行文件加載階段對可執行文件reloc處理,使得程序執行時能夠直接使用物理內存。
編程實現五個點的中值濾波和均值濾波
clear all;t=0:0.01:1;f2=5;%生成一個正弦信號y; y1=1*sin(2*pi*f2*t);%y1=square(2*pi*f2*t);%向y中加入噪聲信號生成x;x1=y1+0.1*randn(1,101);figure(1)subplot(2,1,1);plot(t,y1,'r');title('生成一個正弦信號y');grid;legend y;subplot(2,1,2);plot(t, x1,'r');title('向y中加入噪聲信號生成x');grid;legend x;X=1:length(x1)for X=1:length(x1)z2=smooth(x1,5);%M=5時的均值濾波 end for X=1:length(x1)figure(2)plot(t,z1,'r');title('M=5時的均值濾波處理后的信號');grid;legend y;for X=1:length(x1)L2= median(x1,5);end figure(3)plot(t,L2,'r');title('M=5時的中值濾波處理后的信號');grid;legend y;
第五篇:嵌入式復習總結a4
一、嵌入式系統基本知識
1、什么是嵌入式系統、分層結構:根據IEEE(國際電氣和電子工程師協會)的定義:嵌入式系統是“用于控制、監視或者輔助操作機器和設備的裝置”,此定義是從應用上考慮的,嵌入式系統是軟件和硬件的綜合體,還可以涵蓋機電等附屬裝置;一般定義:“以應用為中心、以計算機技術為基礎、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統”;微機學會的定義:嵌入式系統是以嵌入式應用為目的的計算機系統。可分為系統級、板級、片級(系統級:各種類型的工控器、PC104模塊;板級:各種類型的帶CPU的主板及OEM產品;片級:各種以單片機、DSP、微處理器為核心的產品)。分層結構:嵌入式系統:硬件、驅動、操作系統、中間件、應用。
2、嵌入式系統與單片機、PC系統的區別:(單片機與嵌入式系統比較,一般沒有操作系統,就沒有辦法同時運行多個任務,單片機總是運行單個任務)目前嵌入式系統的主流是以32位嵌入式微處理器為核心的硬件設計和基于實時操作系統(RTOS)的軟件設計;單片機系統多為4位、8位、16位機,不適合運行操作系統,難以進行復雜的運算及處理功能;嵌入式系統強調基于平臺的設計、軟硬件協同設計,單片機大多采用軟硬件流水設計;嵌入式系統設計的核心是軟件設計(占70%左右的工作量),單片機系統軟硬件設計所占比例基本相同;單片機學習一般從硬件入手,從硬件體系結構、匯編語言到硬件設計、軟件設計;嵌入式系統學習可以從軟件入手,從應用層編程到操作系統移植、硬件平臺設計較好,按單片機設計的學習流程較難掌握。嵌入式系統與pc系統區別:嵌入式系統一般是專用系統,而PC是通用計算平臺;嵌入式系統的資源比PC少得多;嵌入式系統軟件故障帶來的后果比PC機大得多;嵌入式系統一般采用實時操作系統;嵌入式系統大都有成本、功耗的要求;嵌入式系統得到多種微處理體系的支持;嵌入式系統需要專用的開發工具。
3、常見的嵌入式操作系統有哪些?可分為商用型和免費型。免費型:實時操作系統在價格方面具有優勢,目前主要有Linux和μC/OS,穩定性與服務性存在挑戰。Linux:是開放源碼的,不存在黑箱技術,遍布全球的眾多Linux愛好者又是Linux開發的強大技術后盾;Linux的內核小、功能強大、運行穩定、系統健壯、效率高,易于定制剪裁,在價格上極具競爭力;Linux不僅支持x86 CPU,還可以支持其他數十種CPU芯片。嵌入式Linux是指對Linux經過小型化裁剪后,能夠固化在容量只有幾百K字節或幾兆字節的存儲器芯片或單片機中,應用于特定嵌入式場合的專用Linux操作系統。主要有RTLinux和CLinux。商用型:實時操作系統功能穩定、可靠,有完善的技術支持和售后服務,但往往價格昂貴,如Vxworks、QNX、WinCE、Palm OS等。VxWorks,是一種嵌入式實時操作系統,具有良好的持續發展能力、高性能的內核以及友好的用戶開發環境,在嵌入式實時操作系統領域牢牢占據著一席之地。特點是:可靠性、實時性和可裁減性;它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS、POWER PC等。Windows CE 3.0:一種針對小容量、移動式、智能化、32位、連接設備的模塊化實時嵌入式操作系統;針對掌上設備、無線設備的動態應用程序和服務提供了一種功能豐富的操作系統平臺,WindowsCE嵌入但不夠實時,屬于軟實時操作系統;由于其Windows背景,界面比較統一認可;操作系統的基本內核需要至少200K的ROM。
4、嵌入式系統的特點:(1)系統內核小:由于嵌入式系統一般是應用于小型電子裝置的,系統資源相對有限;(2)專用性強:嵌入式系統個性化很強,其中的軟件系統和硬件的結合非常緊密,一般要針對硬件進行系統的移植;即使在同一品牌、同一系列的產品中也需要根據系統硬件的變化和增減不斷進行修改;針對不同的任務,往往需要對系統進行較大更改,這種修改和通用軟件的“升級”是完全不同的概念;(3)系統精簡:嵌入式系統一般沒有系統軟件和應用軟件的明顯區分,不要求其功能設計及實現上過于復雜,這樣一方面利于控制系統成本,同時也利于實現系統安全;(4)高實時性OS:這是嵌入式軟件的基本要求,而且軟件要求固態存儲,以提高速度。軟件代碼要求高質量和高可靠性、實時性;(5)嵌入式軟件開發走向標準化:嵌入式系統的應用程序可以沒有操作系統直接在芯片上運行。為了合理地調度多任務、利用系統資源、系統函數以及和專家庫函數接口,用戶必須自行選配RTOS開發平臺,這樣才能保證程序執行的實時性、可靠性,并減少開發時間,保障軟件質量;(6)嵌入式系統需要開發工具和環境:其本身不具備自主開發能力,即使設計完成以后,用戶通常也是不能對其中的程序功能進行修改,必須有一套開發工具和環境才能進行開發。
二、嵌入式系統的設計原則及開發方法:
1、軟硬件協同設計概念:基于體系結構,對系統的軟件、硬件進行詳細設計,為了縮短產品開發周期,設計往往是并行的(既是先從邏輯入手,設計出功能模塊,最后再區分是由硬件還是軟件來實現該功能)。舉例:SOC系統:嵌入式片上系統,結合許多功能區塊,將功能坐在一個芯片上,微處理器核心是通信接口單元等。SOC是追求產品系統最大包容的集成器件,最大特點是成功實現了軟硬件無縫結合,直接在處理器片內嵌入操作系統的代碼模塊,運用VHDL等硬件描述語言,不需要像傳統系統設計一樣,繪制龐大復雜的電路板,一點一點的連接焊制,只需使用精確的語言,綜合時序設計,直接在器件庫中調用各種通用處理器標準,通過仿真后,可交付芯片廠家進行生產。
2、項目開發生命周期:(識別需求-提出解決方案-執行項目-結束項目)。系統開發步驟:系統需求分析(規格說明書):確定設計任務和目標,并提煉出設計規格說明書,作為正式設計指導和驗收的標準。系統的需求一般分功能性需求和非功能性需求兩方面。功能性需求是系統的基本功能,如輸入輸出信號、操作方式等;非功能需求包括系統性能、成本、功耗、體積、重量等因素。體系結構設計:描述系統如何實現所述的功能和非功能需求,包括對硬件、軟件和執行裝置的功能劃分以及系統的軟件、硬件選型等。一個好的體系結構是設計成功與否的關鍵。硬件/軟件協同設計:基于體系結構,對系統的軟件、硬件進行詳細設計。為了縮短產品開發周期,設計往往是并行的。
系統集成:把系統的軟件、硬件和執行裝置集成在一起,進行調試,發現并改進單元設計過程中的錯誤。系統測試:對設計好的系統進行測試,看其是否滿足規格說明書中給定的功能要求。
三、ARM處理器體系結構:
1、馮·諾依曼體系結構:程序和數據共用一個存儲空間,CPU無法同時訪問程序和數據;哈佛體系結構:程序和數據分開存放,CPU可以同時訪問程序存儲器和數據存儲器。(2)CISC:復雜指令集,具有大量的指令和尋址方式;8/2原則:80%的程序只使用20%的指令;大多數程序只使用少量的指令就能夠運行。RISC:精簡指令集,在通道中只包含最有用的指令;確保數據通道快速執行每一條指令;使CPU硬件結構設計變得更為簡單。(3)體系結構與處理器的區別:知識產權核(IP核):電路或核是設計好并經過驗證的集成電路功能單元;IP復用意味著設計代價降低(時間,價格);ARM體系結構是知識產權,是IP核的一種,并不是某一具體的芯片,而微處理器一般指與RAM、ROM等硬件固化在一起的某一類芯片。(4)IP核的種類:Soft Cores(“code”)(軟核):HDL語言描述;靈活度高,可修改;與工藝獨立,可根據具體的加工工藝重新綜合;IP很難保護。Firm cores(“code+structure”)(固核):邏輯綜合后的描述,與工藝相關。Hard cores(“physical”)(硬核):物理綜合后的描述,準備流片,包含工藝相關的布局和時序信息,IP很容易保護,多數的處理器和存儲器。
2、ARM的七種基本工作模式:User用戶模式:非特權模式,大部分任務執行在這種模式*正常程序執行的模式;FIQ快速中斷模式:當一個高優先級(fast)中斷產生時將會進入這種模式*高速數據傳輸和通道處理;IRQ外部中斷模式:當一個低優先級(normal)中斷產生時將會進入這種模式*通常的中斷處理;Supervisor管理模式:當復位或軟中斷指令執行時將會進入這種模式*供操作系統使用的一種保護模式;Abort數據訪問中止模式: 當存取異常時將會進入這種模式*虛擬存儲及存儲保護;Undef未定義指令中止模式: 當執行未定義指令時會進入這種模式*軟件仿真硬件協處理器;System系統模式: 使用和User模式相同寄存器集的特權模式,特權級的操作系統任務。注意:模式之間的轉換實際上是寄存器組之間的切換,當使用某種寄存器組,就進入了某種相應的工作模式。(1)寄存器組織(37 寄存器):31 個通用32位寄存器,包括未分組寄器R0-R7、分組寄存器R8-R14、程序計數器PC(R15);6 個狀態寄存器。15個通用寄存器(R0 to R14), 以及1或者2個狀態寄存器和程序計數器在任何時候都是可以訪問的;可訪問的寄存器取決于處理器的模式;其它寄存器的狀態在支持IRQ, FIQ, 管理員, 中止和未定義模式處理時被切換。*FIR要求速度要快,故其專用的寄存器最多。(2)R0 到 R15 可以直接訪問;R0 到 R14 是通用寄存器;R13: 堆棧指針(sp)(通常);每種處理器模式都有單獨的堆棧;R14: 鏈接寄存器(lr);R15 包含程序計數器(PC);CPSR:當前程序狀態寄存器,包括代碼標志狀態和當前模式位;5個SPSRs(程序狀態保存寄存器):當異常發生時保存CPSR狀態;SPSR和CPSR的功能是:保存ALU當前操作信息、控制允許和禁止中斷、設置處理器操作模式。(3)程序狀態寄存器:*條件位:N = 1-結果為負,0-結果為正或0;Z = 1-結果為0,0-結果不為0;C =1-進位,0-借位;V =1-結果溢出,0結果沒溢出。*中斷禁止位:I=1:禁止IRQ;F=1:禁止FIQ。*T Bit:僅ARM xT架構支持;T = 0:處理器處于ARM狀態;T=1:處理器處于Thumb狀態。*Mode位(處理器模式位):0b10000 User;0b10001 FIQ;0b10010 IRQ;0b10011 Supervisor;0b10111 Abort;0b11011 Undefined;0b11111 System。(4)程序指針PC(r15):當處理器執行在ARM狀態:所有指令 32 bits 寬;所有指令必須 word 對齊;所以 pc值由bits [31:2]決定, bits [1:0] 未定義(所以指令不能halfword / byte對齊)。當處理器執行在Thumb狀態:所有指令 16 bits 寬;所有指令必須 halfword 對齊;所以 pc值由bits [31:1]決定, bits [0] 未定義(所以指令不能 byte對齊)。
3、ARM的異常:(1)異常定義:內部或外部中斷源產生并引起處理器處理一個事件,如外部中斷或試圖執行未定義指令都會引起異常。處理異常之前必須保留處理器的狀態。(2)異常的類型:復位RESET:當處理器的復位電平有效時,產生復位異常,程序跳轉到復位異常的處理程序處執行;DABT數據中止:若處理器數據訪問指令地址不存在或該地址不允許當前指令訪問,產生異常;FIQ快速中斷請求:當快速中斷請求引腳有效,且CPSR中F=0,產生異常;IRQ外部中斷請求:當外部中斷請求引腳有效,且且CPSR中I=0;PABT指令預取中止:若預取指令地址不存在或該地址不允許當前的指令訪問,存儲器向處理器發出中止信號,但是只有當取指的指令被執行時,才產生異常;UDEF未定義指令:當處理器或協處理器遇到不能處理的指令時產生該異常,可利用該機制進行軟件仿真;SWI軟件中斷:由執行SWI指令產生,用于用戶模式下的程序調用特權操作指令,利用該異常機制實現系統功能調用。(3)異常處理過程(只能在ARM態執行,若進入異常前是Thumb態,進入異常后轉為ARM態,返回后自動進入Thumb):當異常產生時,處理器執行以下動作:改變處理器狀態進入 ARM 態;改變處理器模式進入相應的異常模式;保存返回地址到 LR_
IF
5、ARM狀態和Thumb狀態關系:在程序的執行過程中,微處理器可以隨時地在兩種工作狀態之間切換且不影響處理器的工作模式和相應寄存器的內容。Thumb狀態是ARM狀態的一個映射,最終也要映射成ARM指令來執行,但字長較小,提高空間利用率,低功耗,節省代碼空間,用于便捷設備,不能用于異常模式;ARM微處理器在開始執行代碼時,應該處于ARM態。進入Thumb態操作:當操作數寄存器的狀態位為1時,執行BX指令,從ARM態進入Thumb態。當處于Thumb態時發生異常,則異常返回時,自動切換回到Thumb態。進入ARM態操作:當操作數寄存器的狀態位為0時,執行BX指令進入ARM態。此外當進行異常處理時,把PC指針放入異常模式鏈接寄存器R14中,并從異常向量地址開始執行程序,也能切換到ARM態;Thumb狀態下的寄存器集是ARM狀態下寄存器集的一個子集。
四、ARM指令集:
1、ARM編程模型:(1)3級指令流水線技術:幾個指令可以并行執行,提高了CPU的運行效率;內部信息流要求通暢流動(為了增加處理器指令流速度,提高運行效率);允許多個操作同時處理,比逐條指令執行要快;PC指向正被取指的指令,而非正在執行的指令。(2)存儲器模式:大端模式(字數據的高位字節存儲在低地址中,字數據的低字節則存放在高地址中)和小端模式。(3)數據和指令類型:ARM采用32位架構;ARM約定:字節8位,半字16位,字32位;大部分ARM核提供ARM指令集和Thumb指令集(T變種);Jazelle 核支持Java bytecode(J變種,4TEJ),所有指令8位寬,處理器執行字存取,一次取4條指令。
2、指令結構:采用馮?諾依曼體系結構,需要把指令從存儲器加載到寄存器,沒有專門的IO指令,故存在load/store結構——從存儲器中讀某個值,操作完后再將其放回存儲器中。指令分類:a.數據處理指令–使用和改變寄存器的值;b.數據傳送指令–把存儲器的值拷貝到寄存器中(load)or 把寄存器中的值拷貝到存儲器中(store);c.控制流指令 :分支、分支和鏈接, 保存返回的地址,以恢復最先的次序、陷入系統代碼。
3、ARM與Thumb指令的關系:(1)Thumb指令的特點:Thumb 指令的長度為 16 位,是針對代碼密度問題而提出的;所有的 Thumb 指令和編程模型與ARM指令和編程模型相對應;Thumb 子程序和 ARM 子程序就可以互相調用;Thumb 指令集中的操作數和指令地址仍為32 位 ;大多數的 Thumb指令是無條件執行的,而幾乎所有的 ARM 指令都是有條件執行的;Thumb不是一個完整的體系結構,不能指望處理器只執行Thumb指令集而不支持ARM指令集。(2)Thumb 指令與ARM 指令的時間效率和空間效率關系 :Thumb 代碼所需的存儲空間約為ARM 代碼的60%~70%;Thumb 代碼使用的指令數比ARM 代碼多約30%~40%;若使用32 位的存儲器,ARM 代碼比Thumb 代碼快約40%;若使用16 位的存儲器,Thumb 代碼比ARM 代碼快約40%~50%;與ARM 代碼相比較,使用Thumb 代碼,存儲器的功耗會降低約30%。
五、典型的ARM核芯片結構:
1、LPC2000系列處理器結構:LPC2000系列微控制器將ARM7TDMI配置為小端模式;內部存儲器包括無等待SRAM和Flash;系統功能包括維持芯片工作的一些基本功能,如系統時鐘、復位等;向量中斷控制器(VIC)可減少中斷響應時間,最多可管理32個中斷請求;外部存儲器控制器(EMC)支持4個BANK的外部SRAM和Flash,每個BANK最大16MB;I2C串行接口為標準I2C總線接口,支持最大速度400KB;具有兩個完全獨立的SPI控制器;具有兩個UART接口,均包含16字節的接受/發送FIFO,內置波特率發生器,UART1具調制解調接口功能;LPC2119/2129/2290/2292包含CAN總線接口;看門狗定時器;通用IO,可受5V電壓,每個IO口可獨立設置為輸入輸出模式;PWMO脈寬調制器,可靈活設置,以適應不同的場合,單邊沿/雙邊沿輸出方式,頻率、占空比可調;實時時鐘,具可編程積存時鐘分頻器,以適應不同的晶振頻率。
2、LPC處理器的啟動過程:一般在32位ARM應用系統中,大多數采用C語言進行軟件編程,但是在運行應用代碼前需要進行系統初始化,常用一匯編文件做啟動代碼,它可以實現異常向量表定義、堆棧初始化、系統變量初始化、地址重映射等操作。
3、時鐘編程方法
4、存儲器映射控制原理:用于控制地址范圍為0x0000-0x0037存儲區域的重新映射,該區域存放著異常向量表,發生異常時,程序總是跳轉到地址為0x0000-0x0037的對應入口處,而實際異常向量表可能存在內部Flash、SRAM、Boot Block,為了讓運行在不同存儲器空間的程序對異常進行控制,可通過存儲器映射控制,將位于不同存儲空間的異常向量表重新映射到固定地址0x0000-0x0037處,以實現異常向量表的來源控制,通過設置存儲器映射控制寄存器的值來實現。流程:內核產生的地址0x0000-0x0037,經過地址轉換器后,映射到物理存儲器的地址空間(0x80000000-0x80000037(外部存儲器)/0x7FFFE000-0x7FFFE037(Boot Block)/0x40000000-0x40000037(內部SRAM)/0x00000000-0x00000037(內部Flash))。
5、存儲器加速模塊MAM
6、外部存儲器控制器(EMC):EMC模塊為AHB系統總線和外部存儲器件之間提供了一個接口;EMC支持4個獨立配置的存儲器組,每個最大支持16MB,支持字節定位讀取。
7、GPIO:特性:可獨立控制每個GPIO的方向(輸入、輸出模式);可獨立設置每個GPIO的輸出狀態;所有GPIO復位后,默認為輸入態。IOxPIN[0-31]: GPIO引腳值;IOxDIR[0-31]:
方向控制位,寫入1-輸出,0-輸入; IOxSET[0-31]: 輸出置位,寫入1-高電平,0-無效;IOxCLR[0-31]:寫入1-清零,0-無效。示例:設置P0.0輸出高電平代碼:PINSEL0 &=0xFFFFFFFC;//設置引腳連接模塊,P0.0為GPIO IO0DIR |=0x00000001;IO0SET=0x00000001;
8、UART0
六、實時操作系統概念及操作系統原理:
1、概念:(1)實時系統:(指任務要求在限定時間內完成)如果邏輯和時序出現偏差將會引起嚴重后果的系統。(2)軟實時系統:系統的宗旨是使各個任務運行得越快越好,并不要求限定某一任務必須在多長時間內完成。(3)硬實時系統:各任務不僅要執行無誤而且要做到準時。(4)前后臺系統:或超循環系統,應用程序是一個無限的循環,循環中調用相應的函數完成相應的操作,這部分可以看成后臺行為。中斷服務程序處理異步事件,這部分可以看成前臺行為。后臺也可以叫做任務級。前臺也叫中斷級。時間相關性很強的關鍵操作一定是靠中斷服務來保證的。(5)代碼的臨界段:也稱為臨界區,指處理時不可分割的代碼。一旦這部分代碼開始執行,則不允許任何中斷打入。為確保臨界段代碼的執行,在進入臨界段之前要關中斷,而臨界段代碼執行完以后要立即開中斷。(6)資源:任何為任務所占用的實體都可稱為資源。資源可以是輸入輸出設備或一個變量,結構,數組等。(7)共享資源:可以被一個以上任務使用的資源叫做共享資源。為了防止數據被破壞,每個任務在與共享資源打交道時,必須獨占該資源,這叫做互斥。(8)多任務:多任務運行的實現實際上是靠CPU(中央處理單元)在許多任務之間轉換、調度。CPU只有一個,輪番服務于一系列任務中的某一個。多任務運行使CPU的利用率得到最大的發揮,并使應用程序模塊化。在實時應用中,多任務化的最大特點是,開發人員可以將很復雜的應用程序層次化。使用多任務,應用程序將更容易設計與維護。(9)任務狀態:典型地、每個任務都是一個無限的循環。每個任務都處在以下5種狀態之一的狀態下,這5種狀態是休眠態,就緒態、運行態、掛起態(等待某一事件發生)和被中斷態。休眠態相當于該任務駐留在內存中,但并不被多任務內核所調度。就緒意味著該任務已經準備好,可以運行了,但由于該任務的優先級比正在運行的任務的優先級低,還暫時不能運行。運行態的任務是指該任務掌握了CPU的控制權,正在運行中。掛起狀態也可以叫做等待事件態WAITING,指該任務在等待,等待某一事件的發生,(例如等待某外設的I/O操作,等待某共享資源由暫不能使用變成能使用狀態,等待定時脈沖的到來或等待超時信號的到來以結束目前的等待,等等)。最后,發生中斷時,CPU提供相應的中斷服務,原來正在運行的任務暫不能運行,就進入了被中斷狀態。(10)任務切換:當多任務內核決定運行另外的任務時,它保存正在運行任務的當前狀態,即CPU寄存器中的全部內容。這些內容保存在任務的當前狀況保存區,也就是任務自己的棧區之中。入棧工作完成以后,就是把下一個將要運行的任務的當前狀況從該任務的棧中重新裝入CPU的寄存器,并開始下一個任務的運行。(11)內核:多任務系統中,內核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通訊。內核提供的基本服務是任務切換。(12)調度:是內核的主要職責之一,就是要決定該輪到哪個任務運行了。多數實時內核是基于優先級調度法的。每個任務根據其重要程度的不同被賦予一定的優先級。基于優先級的調度法指,CPU總是讓處在就緒態的優先級最高的任務先運行。(13)不可剝奪型內核:要求每個任務自我放棄CPU的所有權。異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態。但中斷服務以后控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優先級的任務才能獲得CPU的使用權。優點是響應中斷快;幾乎不需要使用信號量保護共享數據。缺陷在于其響應時間,高優先級的任務已經進入就緒態,但還不能運行,要等,也許要等很長時間,直到當前運行著的任務釋放CPU。無法保證系統的實時性。(14)可剝奪型內核:最高優先級的任務一旦就緒,總能得到CPU的控制權。當一個運行著的任務使一個比它優先級高的任務進入了就緒態,當前任務的CPU使用權就被剝奪了。如果是中斷服務子程序使一個高優先級的任務進入就緒態,中斷完成時,中斷了的任務被掛起,優先級高的那個任務開始運行。保證了系統的實時性。(15)可重入型函數:可以被一個以上的任務調用,而不必擔心數據的破壞。可重入型函數任何時候都可以被中斷,一段時間以后又可以運行,而相應數據不會丟失。可重入型函數或者只使用局部變量,即變量保存在CPU寄存器中或堆棧中。如果使用全局變量,則要予以保護。(16)時間片輪番調度法:當兩個或兩個以上任務有同樣優先級,內核允許一個任務運行事先確定的一段時間,叫做時間額度,然后切換給另一個任務。(17)任務優先級:是表示任務被調度的優先程度。每個任務都有其優先級。任務越重要,賦予的優先級應越高。(18)靜態優先級:應用程序執行過程中諸任務優先級不變,在靜態優先級系統中,諸任務以及它們的時間約束在程序編譯時是已知的。(19)動態優先級:應用程序執行過程中,任務的優先級是可變的,實時內核應當避免出現優先級反轉問題。(20)優先級反轉:優先級高和優先級低的任務在運行時,由于共享資源的占用問題,而出現的優先級反轉問題,即在執行過程中,優先級高的任務反而要等優先級低的任務先運行完后,釋放共享資源,才能運行。糾正的方法:提高正在使用共享資源的任務的優先級,但耗費CPU時間;內核能自動變換任務的優先級,稱優先級繼承,但是UCOSII不支持。(21)任務優先級分配:單調執行率調度法RMS:基于哪個任務執行的次數最頻繁,執行最頻繁的任務優先級最高(22)任務互斥:實現任務間通訊最簡便到辦法是使用共享數據結構,但是必須保證每個任務在處理共享數據時的排它性,以避免競爭和數據的破壞。與共享資源打交道時,使之滿足互斥條件最一般的方法有:關中斷;使用測試并置位指令TAS;禁止做任務切換;利用信號量。(23)信號量:信號量實際上是一種約定機制,用于:控制共享資源的使用權(滿足互斥條件);標志某事件的發生;使兩個任務的行為同步。注意:信號,只取兩個值0和1的信號量;計數器型,值有多種形式。對信號量只能實施三種操作:初始化(INITIALIZE),也可稱作建立(CREATE);等信號(WAIT)也可稱作掛起(PEND);給信號(SIGNAL)或發信號(POST)。信號量初始化時要給信號量賦初值,等待信號量的任務表(Waiting list)應清為空。P/V操作:P操作既是減1操作,任務執行等待(WAIT)操作,有可能執行P操作;V操作既是加1操作,任務以發信號操作(SIGNAL)釋放信號量。(24)死鎖:也稱作抱死,指兩個任務無限期地互相等待對方控制著的資源。最簡單的防止發生死鎖的方法是讓每個任務都:先得到全部需要的資源再做下一步的工作;用同樣的順序去申請多個資源;釋放資源時使用相反的順序。(25)同步:可以利用信號量使某任務與中斷服務同步(或者是與另一個任務同步,這兩個任務間沒有數據交換)。單向同步:任務與中斷服務之間/兩任務之間;雙向同步:兩任務之間可以用信號量同步它們的行為,兩個任務需要互相等待對方執行,等待自身所需的事件發生(信號量),同步執行。(26)任務間的通訊:有時很需要任務間的或中斷服務與任務間的通訊。任務間信息的傳遞有兩個途徑:通過全程變量或發消息給另一個任務。用全程變量時,必須保證每個任務或中斷服務程序獨享該變量。中斷服務中保證獨享的唯一辦法是關中斷。如果兩個任務共享某變量,各任務實現獨享該變量的辦法可以是關中斷再開中斷,或使用信號量(如前面提到的那樣)。(27)消息郵箱:通過內核服務可以給任務發送消息。典型的消息郵箱也稱作交換消息,是用一個指針型變量,通過內核服務,一個任務或一個中斷服務程序可以把一則消息(即一個指針)放到郵箱里去。同樣,一個或多個任務可以通過內核服務接收這則消息。發送消息的任務和接收消息的任務約定,該指針指向的內容就是那則消息。內核一般提供以下郵箱服務:郵箱內消息的內容初始化,郵箱里最初可以有,也可以沒有消息;將消息放入郵箱(POST);等待有消息進入郵箱(PEND);如果郵箱內有消息,就接受這則消息。如果郵箱里沒有消息,則任務并不被掛起(ACCEPT),用返回代碼表示調用結果,是收到了消息還是沒有收到消息。消息郵箱也可以當作只取兩個值的信號量來用。郵箱里有消息,表示資源可以使用,而空郵箱表示資源已被其它任務占用。(28)消息隊列:消息隊列用于給任務發消息。消息隊列實際上是郵箱陣列。通常,先進入消息隊列的消息先傳給任務,也就是說,任務先得到的是最先進入消息隊列的消息,即先進先出原則(FIFO)。然而μC/OS-Ⅱ也允許使用后進先出方式(LIFO)。內核提供的消息隊列服務如下:消息隊列初始化。隊列初始化時總是清為空;放一則消息到隊列中去(Post);等待一則消息的到來(Pend);如果隊列中有消息則任務可以得到消息,但如果此時隊列為空,內核并不將該任務掛起(Accept)。如果有消息,則消息從隊列中取走。沒有消息則用特別的返回代碼通知調用者,隊列中沒有消息。
2、任務的組成:代碼、TCB、私有堆棧。一個任務通常是一個無限的循環,絕不會返回的,但可通過調用函數自我刪除,也可建立新任務。
3、OS的內核原理:(1)任務狀態圖(任務狀態的切換過程):睡眠態(DORMANT)指任務駐留在程序空間之中,還沒有交給μC/OS-Ⅱ管理,把任務交給μC/OS-Ⅱ是通過調用下述兩個函數之一:OSTaskCreate()或OSTaskCreateExt()。當任務一旦建立,這個任務就進入就緒態準備運行。任務的建立可以是在多任務運行開始之前,也可以是動態地被一個運行著的任務建立。如果一個任務是被另一個任務建立的,而這個任務的優先級高于建立它的那個任務,則這個剛剛建立的任務將立即得到CPU的控制權。一個任務可以通過調用OSTaskDel()返回到睡眠態,或通過調用該函數讓另一個任務進入睡眠態。調用OSStart()可以啟動多任務。OSStart()函數運行進入就緒態的優先級最高的任務。就緒的任務只有當所有優先級高于這個任務的任務轉為等待狀態,或者是被刪除了,才能進入運行態。
正在運行的任務可以通過調用兩個函數之一將自身延遲一段時間,這兩個函數是OSTimeDly()或OSTimeDlyHMSM()。這個任務于是進入等待狀態,等待這段時間過去,下一個優先級最高的、并進入了就緒態的任務立刻被賦予了CPU的控制權。等待的時間過去以后,系統服務函數OSTimeTick()使延遲了的任務進入就緒態。正在運行的任務期待某一事件的發生時也要等待,手段是調用以下3個函數之一:OSSemPend(),OSMboxPend(),或OSQPend()。調用后任務進入了等待狀態(WAITING)。當任務因等待事件被掛起(Pend),下一個優先級最高的任務立即得到了CPU的控制權。當事件發生了,被掛起的任務進入就緒態。事件發生的報告可能來自另一個任務,也可能來自中斷服務子程序。正在運行的任務是可以被中斷的,除非該任務將中斷關了,或者μC/OS-Ⅱ將中斷關了。被中斷了的任務就進入了中斷服務態(ISR)。響應中斷時,正在執行的任務被掛起,中斷服務子程序控制了CPU的使用權。中斷服務子程序可能會報告一個或多個事件的發生,而使一個或多個任務進入就緒態。在這種情況下,從中斷服務子程序返回之前,μC/OS-Ⅱ要判定,被中斷的任務是否還是就緒態任務中優先級最高的。如果中斷服務子程序使一個優先級更高的任務進入了就緒態,則新進入就緒態的這個優先級更高的任務將得以運行,否則原來被中斷了的任務才能繼續運行。當所有的任務都在等待事件發生或等待延遲時間結束,μC/OS-Ⅱ執行空閑任務(idle task),執行OSTaskIdle()函數。(2)局部結構——任務控制塊TCB:一旦任務建立了,任務控制塊OS_TCBs將被賦值。任務控制塊是一個數據結構,當任務的CPU使用權被剝奪時,μC/OS-Ⅱ用它來保存該任務的狀態。當任務重新得到CPU使用權時,任務控制塊能確保任務從當時被中斷的那一點絲毫不差地繼續執行。實際上,任務狀態的改變就是修改TCB的過程,OS_TCBs全部駐留在RAM中。任務建立的時候,OS_TCBs就被初始化了。
應用程序中可以有的最多任務數(OS_MAX_TASKS)是在文件OS_CFG.H中定義的。這個最多任務數也是μC/OS-Ⅱ分配給用戶程序的最多任務控制塊OS_TCBs的數目。將OS_MAX_TASKS的數目設置為用戶應用程序實際需要的任務數可以減小RAM的需求量。所有的任務控制塊OS_TCBs都是放在任務控制塊列表數組OSTCBTbl[]中的。μC/OS-Ⅱ分配給系統任務OS_N_SYS_TASKS若干個任務控制塊,供其內部使用。目前,一個用于空閑任務,另一個用于任務統計。在μC/OS-Ⅱ初始化的時候,所有任務控制塊OS_TCBs
被鏈接成單向空任務鏈表。當任務一旦建立,空任務控制塊指針OSTCBFreeList指向的任務控制塊便賦給了該任務,然后OSTCBFreeList的值調整為指向下鏈表中下一個空的任務控制塊。一旦任務被刪除,任務控制塊就還給空任務鏈表。(3)全局結構——就緒表:將任務放入就緒表程序清單: OSRdyGrp |= OSMapTbl[prio >> 3];OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
任務優先級的低三位用于確定任務在總就緒表OSRdyTbl[]中的所在位。接下去的三位用于確定是在OSRdyTbl[]數組的第幾個元素。OSMapTbl[]是在ROM中的屏蔽字,用于限制OSRdyTbl[]數組的元素下標在0到7之間。程序清單:從就緒表中刪除一個任務
if((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07])== 0)OSRdyGrp &= ~OSMapTbl[prio >> 3];
程序清單:找出進入就緒態的優先級最高的任務
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];prio =(y << 3)+ x;
以上代碼將就緒任務表數組OSRdyTbl[]中相應元素的相應位清零,而對于OSRdyGrp,只有當被刪除任務所在任務組中全組任務一個都沒有進入就緒態時,才將相應位清零。算法理解:預先根據結構,先算好屏蔽字,做好準備,再利用二進制的特點,將優先級與查表得出的屏蔽字進行邏輯操作,得出xy值,再對就緒表的相應位進行置位或清零操作,完成對就緒表的修改。利用屏蔽字是為了提高查找就緒表的速度。4)任務調度算法 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-Ⅱ任務調度所花的時間是常數,與應用程序中建立的任務數無關。
4、空閑任務(Idle Task):μC/OS-Ⅱ總是建立一個空閑任務,這個任務在沒有其它任務進入就緒態時投入運行。空閑任務[OSTaskIdle()]永遠設為最低優先級。空閑任務OSTaskIdle()什么也不做,只是在不停地給一個32位的名叫OSIdleCtr的計數器加1,統計任務使用這個計數器以確定現行應用軟件實際消耗的CPU時間。空閑任務不可能被應用軟件刪除,但可以通過時間中斷喚醒其他任務進入就緒態后,退出空閑任務。
5、統計任務:提供運行時間統計的任務,叫做OSTaskStat(),如果用戶將系統定義常數OS_TASK_STAT_EN設為1,這個任務就會建立。一旦得到了允許,OSTaskStat()每秒鐘運行一次,計算當前的CPU利用率。注意:在調用系統啟動函數OSStart()之前,用戶初始代碼必須先建立一個任務,在這個任務中調用系統統計初始化函數OSStatInit(),然后再建立應用程序中的其它任務。
6、μC/OS-Ⅱ初始化:μC/OS-Ⅱ要求用戶首先調用系統初始化函數OSIint()。OSIint()初始化μC/OS-Ⅱ所有的變量和數據結構。OSInit()建立空閑任務idle task,統計任務OSTaskStat()并且讓其進入就緒態。以上兩個任務的任務控制塊(OS_TCBs)是用雙向鏈表鏈接在一起的。還初始化了4個空數據結構緩沖區:空任務控制塊緩沖區、空事件表、空隊列表、空存儲區。先做好準備,目的是為了保證CPU的運行速度。注意:初始化后數據結構:包括就緒表、優先級表、空閑任務和統計任務TCB、及其各自私有堆棧。
4、μC/OS-Ⅱ的啟動:程序清單初始化和啟動μC/OS-Ⅱ: void main(void){
OSInit();/* 初始化uC/OS-II
*/..通過調用OSTaskCreate()或OSTaskCreateExt()創建至少一個任務;..OSStart();/* 開始多任務調度!OSStart()永遠不會返回 */}
5、任務數據結構:void YourTask(void *pdata){ for(;;){
/* 用戶代碼 */ 調用μC/OS-Ⅱ的服務例程之一: OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);
OSTimeDly();OSTimeDlyHMSM();/* 用戶代碼 */ } } 或void YourTask(void *pdata){
/* 用戶代碼 */ OSTaskDel(OS_PRIO_SELF);}
6、事件控制塊ECB:一個數據結構(類似TCB),包含了事件本身的定義,如用于信號量的計數器,用于指向郵箱的指針,以及指向消息隊列的指針數組等,還定義了等待該事件的所有任務的列表。分為OSEventGrp/OSEventTbl兩個變量。任務調度算法也和TCB相似。
程序清單:將一個任務插入到事件的等待任務列表中
pevent->OSEventGrp |= OSMapTbl[prio >> 3];pevent->OSEventTbl[prio >> 3] |= OSMapTbl[prio & 0x07];
其中,prio是任務的優先級,pevent是指向事件控制塊的指針。該算法的原理:任務優先級的最低3位決定了該任務在相應的.OSEventTbl[]中的位置,緊接著的3位則決定了該任務優先級在.OSEventTbl[]中的字節索引。該算法中用到的查找表OSMapTbl[]一般在ROM中實現。(1)在μC/OS-II中,事件控制塊的總數由用戶所需要的信號量、郵箱和消息隊列的總數決定。在調用OSInit()時,所有事件控制塊被鏈接成一個單向鏈表——空閑事件控制塊鏈表。每當建立一個信號量、郵箱或者消息隊列時,就從該鏈表中取出一個空閑事件控制塊,并對它進行初始化。因為信號量、郵箱和消息隊列一旦建立就不能刪除,所以事件控制塊也不能放回到空閑事件控制塊鏈表中。(2)對于事件控制塊進行的一些通用操作包括:初始化一個事件控制塊;使一個任務進入就緒態;使一個任務進入等待該事件的狀態;因為等待超時而使一個任務進入就緒態。為了避免代碼重復和減短程代碼長度,μC/OS-II將上面的操作用4個系統函數實現,它們是:OSEventWaitListInit(),OSEventTaskRdy(),OSEventWait()和OSEventTO()。
7、μC/OS-II系統多任務的意義:多任務使事件簡單化,任務與任務之間的關系使松耦合而不是緊耦合,每個任務只要考慮當前事件,而不需考慮全局事件,全局事件由操作系統來考慮,利用操作系統的一些通訊機制,將多個任務聯系起來共同完成一個功能,同時采用多人機制,OS可以同時運行多個應用程序,提高了CPU的使用效率。
8、操作系統在嵌入式系統中的地位:操作系統在嵌入式系統中扮演管理者的角色,主要任務使完成多任務之間的調度和同步,同時也是上層應用軟件和底層硬件的接口,負責全部軟硬件資源的分配和回收、控制與協調等并發活動。同時嵌入式實時操作系統提高了系統的可靠性;提高了開發效率,縮短了開發周期,嵌入式RTOS充分發揮了32位CPU的多任務潛力。
9、文件系統:(定義)處理文件的操作系統的部分稱為文件系統.是操作系統中統一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護手段,并且方便用戶使用。功能:文件的構造、命名、存取、保護等。(2)基于NAND FLASH的嵌入式文件系統:FLASH讀寫的特點:必須以Page為單位進行讀寫;寫之前必須先擦除原有內容;擦除操作必須對Block進行,即一次至少擦除一個Block的內容。針對這種情況,將Flash的一個Page定為1個扇區,將其1個Block,32個扇區定為一個簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求。(3)FLASH文件系統的要求:掉電安全、平均使用、高效垃圾回收、低空間消耗:指文件系統管理結構在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實際數據的存儲,可以提高有用數據的存儲空間。(4)FLASH文件系統的分類:集中管理文件系統、線性文件系統、日志文件系統。(5)幾種開源文件系統:TFS(Tiny File System):線性結構的文件系統,優點:TFS提供了掉電安全機制和垃圾回收機制。需要額外的輔助空間,用于垃圾回收時的文件緩存和過程狀態,如果出現終止,系統根據輔助空間的信息進行文件系統的恢復。缺點:文件的插入、剪切和個性需要較大的運行開銷,即使是很小的修改,也要求將整個文件重寫。JFFS:主要針對NOR型Flash存儲器設計,提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實現移植。日志文件系統;提供了更好的崩潰、掉電安全保護;jffs2支持對flash的均勻磨損;在扇區級別上執行閃存擦除/寫/讀操作功能較好;文件系統接近滿時,JFFS2 會大大放慢運行速度——垃圾收集。Nand上yaffs文件系統的優勢:專門為Nand flash設計的日志文件系統;jffs/jffs2不適合大容量的Nand flash;jffs的日志通過jffs_node建立在RAM中,占用RAM空間:對于128MB的Nand大概需要4MB的空間來維護節點;啟動的時候需要掃描日志節點,不適合大容量的Nand flash;FAT系統沒有日志。(6)
NAND和NOR——性能比較:NOR和NAND是現在市場上兩種主要的非易失閃存技術。NOR的讀速度比NAND稍快一些;NAND的寫入速度比NOR快很多;NAND的擦除速度遠比NOR的快;大多數寫入操作需要先進行擦除操作;NAND的擦除單元更小,相應的擦除電路更少。接口差別:NOR flash帶有SRAM接口,線性尋址,可以很容易地存取其內部的每一個字節;NAND flash使用復用接口和控制IO多次尋址存取數據;NAND讀和寫操作采用512字節的塊,這一點有點像硬盤管理此類操作易于取代硬盤等類似的塊設備。容量和成本:NAND flash生產過程更為簡單,成本低;常見的NOR flash為128KB~16MB,而NANDflash通常有8~128MB;NOR主要應用在代碼存儲介質中,NAND適合于數據存儲;NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲卡市場上所占份額最大。可靠性和耐用性:在NAND中每塊的最大擦寫次數是100萬次,而NOR的擦寫次數是10萬次;位交換的問題NAND flash中更突出,需要ECC糾錯;NAND flash中壞塊隨機分布,需要通過軟件標定——產品量產的問題。(7)FAT:FAT32容量:位數,32位;最大簇數目,268,453,456;每簇大小4KB-32KB;最大磁盤容量,2^41(2T)。FAT文件系統基本結構:保留區 Reserved region,存放引導記錄,BIOS信息等;FAT 區,FAT信息列表(12/16/32 bits);根目錄區,目錄信息列表(32 bytes);文件和目錄區,存放簇信息。典型FLASH文件系統的結構:系統記錄-文件分配表-文件登記表-數據區域。文件系統的操作流程:打開文件OpenOSFile-操作文件ReadOSFile/WriteOSFile-關閉文件CloseOSFile。
10、GUI技術:GUI的定義:Graphics User Interface, 是指計算機與其使用者之間的圖形化對話接口。GUI的主要特征:——Windows,采用窗口界面,每個窗口是用戶或系統的一個工作區域。一個屏幕上可以有多個窗口。——Icons,采用形象化的圖標或圖符,易于操作者理解與操作。——Menu,采用菜單,可供用戶選擇的功能提示。——Pointing Devices,指鼠標器、觸摸屏等,便于用戶直接對屏幕對象進行操作。嵌入式GUI的特點:體積小;功能強;圖形算法簡潔、快速,占用系統資源少;可靠性高;模塊結構,便于移植和定制。MiniGUI:支持 GB2312 與 BIG5 字集;支持多種格式字體,例如:TrueType、Adobe Type1等;GUI函數(MoveTo、LineTo、FillBox、Rectangle、Circle、TextOut、DrawText..等)。
11、C/OS的性能特點:公開源代碼;可移植性(Portable),絕大部分? C/OS-II的源碼是用移植性很強的ANSI C寫的。和微處理器硬件相關的那部分是用匯編語言寫的。匯編語言寫的部分已經壓到最低限度,使得 C/OS-II便于移植到其他微處理器上。C/OS-II可以在絕大多數8位、16位、32位以至64位微處理器、微控制器、數字信號處理器(DSP)上運行;可固化(ROMable),C/OS-II是為嵌入式應用而設計的,這就意味著,只要讀者有固化手段(C編譯、連接、下載和固化),C/OS-II可以嵌入到讀者的產品中成為產品的一部分;可裁剪(Scalable),可以只使用C/OS-II中應用程序需要的那些系統服務。也就是說某產品可以只使用很少幾個C/OS-II調用,而另一個產品則使用了幾乎所有? C/OS-II的功能,這樣可以減少產品中的C/OS-II所需的存儲器空間(RAM和ROM)。這種可剪裁性是靠條件編譯實現的;占先式(Preemptive);多任務,C/OS-II可以管理64個任務,然而,目前這一版本保留8個給系統。應用程序最多可以有56個任務;可確定性,全部C/OS-II的函數調用與服務的執行時間具有可確定性;任務棧,每個任務有自己單獨的棧,C/OS-II允許每個任務有不同的棧空間,以便壓低應用程序對RAM的需求;系統服務,C/OS-II提供很多系統服務,例如郵箱、消息隊列、信號量、塊大小固定的內存的申請與釋放、時間相關函數等;中斷管理,中斷可以使正在執行的任務暫時掛起,如果優先級更高的任務被該中斷喚醒,則高優先級的任務在中斷嵌套全部退出后立即執行,中斷嵌套層數可達255層;穩定性與可靠性。相關系統函數:
OS_ENTER_CRITICAL()進入臨界區,關中斷 OSTaskResume(INT8U prio);恢復任務 OS_EXIT_CRITICAL()退出臨界區,開中斷 OSTaskQurery();獲得有關任務的信息 OSInit()系統初始化 OSTaskSuspend(INT8U prio);掛起任務,只能通過OSStart()可啟動多任務,運行進入就緒態的優先級最高的任務 OSTaskResume()來恢復 OSIntEnter()時間: OSIntExit()OSTimeDly();任務延時一定的時鐘節拍 OSSchedLock()給任務調度上鎖 OSTimeDlyHMSM();任務延時一定毫秒、秒、分、小時 OSSchedUnlock()給任務調度解鎖 OSTimeDlyResume();取消延時,若原先任務調用延時函數,OSTaskIdle()該函數可讓任務進入就緒態,而不必等到等待期滿 任務: OSTimeGet()/OSTimeSet();系統時鐘獲取和設置 OSTaskDel(INT8U prio);非空閑任務刪除,使被刪除任務返回OSTimeTick();時鐘節拍函數 并處于休眠態,釋放TCB 信號量 OSTaskCreat(*task)(void *pd), void *pdata, OS_STK *ptos, OSSemCreat(void *addr, INT32U nblks ,INT32U blksize, INT8U INT8U prio);建立任務4個參數,不能由中斷服務來建立任務 *err);建立一個信號量 OSTaskCreatExt();上述的擴展版,更為靈活,9個參數 OSSemPend();等待一個信號量 OSTaskChangPrio()改變任務優先級,不改變任務狀態 OSSemPost();發送一個信號量
OSSemAcccept();無等待地請求一個信號量,若信號量暫時無OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)效,也可以讓任務簡單返回而不是進入睡眠狀態 消息隊列 OSSemQurery();查詢一個信號量的當前狀態 OSQCreat(); 郵箱(函數意義同上)OSQPost();先進先出原則 OSMBoxCreat(void *msg)OSQPend()OSMBoxPost(OS_EVENT *pevent, void *msg)
OSQPostFront();后進先出原則 OSMBoxAcccept(OS_EVENT *pevent)
OSQFlush();清空一個消息隊列 OSMBoxPend(OS_EVENT *pevent, INT16U timeout, int8u OSQAcccept();
OSQQurery()*err);
與FLASH存儲器的接口函數:
塊擦除: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)文件系統相關接口函數:
初始化文件系統:Void initOSFile(char filename[],U32 OpenMode)讀文件到緩沖區:U32ReadOSFile(FILE *pfile,U8 *Read Buffer, U32 n Readbyte)把緩沖區內容寫入文件:U32WriteOSFile(FILE *pfile,U8 *Write Buffer, U32 n Writebyte)關閉文件,釋放緩沖區:Void CloseOSFile(FILE *pfile)常見API函數: 數據隊列:
QueueCreat();建立數據隊列 QueueSize();獲取隊列共可以存儲數據的數目 QueueWriteFront();先進先出方式發送數據 串口驅動: QueueWrite();以后進先出方式發送數據 UART0Init();初始化UART0 QueueRead();獲取隊列中的數據 UART0Putch();發送一個字節 QueueFlush();清空隊列 UART0Write();發送多個字節 QueueNData();獲取隊列中已存儲的數據的數目 UART0Getch();接受一個字節 調制解調器模塊
I2C: ModemInit();初始化
GetModemState();獲取Modem狀態 I2CInit();
I2CWrite();
I2CRead();
SPI: ModemWrite();通過Modem發送多個字節數據
ModemGetch();從Modem獲取一個字節數據 SPIInit();初始化 ModemDiaUp();通過Modem撥號 GetSPI Flag();獲取SPI狀態 ModemDiaDown();掛斷Modem SPIStart();開始訪問SPI SPIRW();通過SPI發送并接受一個數據
SPIEND();訪問SPI結束
為了保證系統實時性,UCOII采用了哪些策略?答:占先式內核、準備工作、就緒表機制。
2、你認為設計嵌入式操作系統對硬件是否有要求?硬件支持軟件,如果CPU,沒有定時器,OS時間片管理就無法實現;Linux的虛擬內存功能,ARM上沒有該存儲器,就無法運行Linux。
3、UCOSII操作系統的就緒表用何種機制保證其實時性不受任務個數的限制?UCOSII是占先式實時多任務內核,優先級最高的任務準備就緒則擁有CPU的所有權,開始投入運行;不支持時間片輪轉法,每個任務優先級是唯一的,查找準備就緒的最高優先級的任務并執行上下文切換;UCOSII任務調度所花的時間為常數,與應用程序中建立的任務數無關。
消息機制對于多任務系統的意義?使兩個任務獨立性增強,耦合比較松散。P(s){if(s<1)wait();s--}
V(s){s++;} 嵌入式系統的軟/硬件框架:硬件層、驅動層、OS層、中間層和應用層。