欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      嵌入式復習總結a4

      時間:2019-05-12 13:50:18下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《嵌入式復習總結a4》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《嵌入式復習總結a4》。

      第一篇:嵌入式復習總結a4

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

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

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

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

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

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

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

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

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

      三、ARM處理器體系結構:

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

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

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

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

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

      四、ARM指令集:

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

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

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

      五、典型的ARM核芯片結構:

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

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

      3、時鐘編程方法

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

      5、存儲器加速模塊MAM

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

      7、GPIO:特性:可獨立控制每個GPIO的方向(輸入、輸出模式);可獨立設置每個GPIO的輸出狀態(tài);所有GPIO復位后,默認為輸入態(tài)。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

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

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

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

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

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

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

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

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

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

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

      y = OSUnMapTbl[OSRdyGrp];

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

      以上代碼將就緒任務表數(shù)組OSRdyTbl[]中相應元素的相應位清零,而對于OSRdyGrp,只有當被刪除任務所在任務組中全組任務一個都沒有進入就緒態(tài)時,才將相應位清零。算法理解:預先根據(jù)結構,先算好屏蔽字,做好準備,再利用二進制的特點,將優(yōu)先級與查表得出的屏蔽字進行邏輯操作,得出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-Ⅱ任務調度所花的時間是常數(shù),與應用程序中建立的任務數(shù)無關。

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

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

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

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

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

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

      5、任務數(shù)據(jù)結構: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:一個數(shù)據(jù)結構(類似TCB),包含了事件本身的定義,如用于信號量的計數(shù)器,用于指向郵箱的指針,以及指向消息隊列的指針數(shù)組等,還定義了等待該事件的所有任務的列表。分為OSEventGrp/OSEventTbl兩個變量。任務調度算法也和TCB相似。

      程序清單:將一個任務插入到事件的等待任務列表中

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

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

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

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

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

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

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

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

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

      OSSemAcccept();無等待地請求一個信號量,若信號量暫時無OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata)效,也可以讓任務簡單返回而不是進入睡眠狀態(tài) 消息隊列 OSSemQurery();查詢一個信號量的當前狀態(tài) OSQCreat(); 郵箱(函數(shù)意義同上)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存儲器的接口函數(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)相關接口函數(shù):

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

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

      I2C: ModemInit();初始化

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

      I2CWrite();

      I2CRead();

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

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

      SPIEND();訪問SPI結束

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

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

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

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

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

      第二篇:嵌入式復習總結

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

      2嵌入式與通用計算機

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

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

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

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

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

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

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

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

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

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

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

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

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

      RISC還有特點(1)芯片面積?。?)開發(fā)時間段(3)性能高 C.嵌入式處理器的結構(1)運算器

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

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

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

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

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

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

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

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

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

      5ARM處理器及實例 A.ARM處理器片內總線

      6嵌入式X86處理器及實例 7DSP處理器及實例

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

      9:嵌入式處理器的選擇

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

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

      1:計算機總線的基本概念

      2嵌入式系統(tǒng)總線的特點 A.機械結構上的差別

      B.嵌入式系統(tǒng)對總線標準功能的補充 3:ISA總線原理

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

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

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

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

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

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

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

      (3)設備控制寄存器(4)設備狀態(tài)寄存器(5)基址地址寄存器 5:PC/104系列總線標準

      6:CompactPCI總線

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

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

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

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

      B.復位與電源管理控制器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      d.共享資源的互斥訪問機制不同

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

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

      (3)評價實時操作系統(tǒng)的方面 a.任務調度機制 b.內存管理 c.最小內存開銷

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

      第三篇:嵌入式期末復習總結整理

      《嵌入式整理提綱》——YOYO左轉

      題型:

      1、選擇題:20分

      2、填空題:20分

      3、判斷題:8分

      4、簡答題:16分

      5、程序分析題:20分

      6、編程題16分

      第一章

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

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

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

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

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

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

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

      4、全稱:

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

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

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

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

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

      CISC(Complex Instruction Set Computer)。

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

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

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

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

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

      第二章

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

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

      2、復雜指令集計算機CISC和精簡指令集計算機RISC

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

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

      《嵌入式整理提綱》——YOYO左轉

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

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

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

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

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

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

      第三章

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

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

      2、PC的值:當前指令地址+8

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

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

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

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

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

      6、ARM處理器支持7種運行模式

      用戶模式(特權模式)

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

      管理模式

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

      系統(tǒng)模式(特權模式)

      《嵌入式整理提綱》——YOYO左轉

      未定義指令中止模式

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

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

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

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

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

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

      12、Bootloader的功能:

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

      第四章

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

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

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

      4、任務調度(課本P120-123重點)

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

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

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

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

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

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

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

      8、可重入式函數(shù):指一段代碼可用被多個任務同時調用,而不必擔心會破壞數(shù)據(jù)。

      9、堆棧增長方向設置:

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

      《嵌入式整理提綱》——YOYO左轉

      第五章

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

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

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

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

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

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

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

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

      第六章

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

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

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

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

      簡答題

      (一)兩種無操作系統(tǒng)的嵌入式軟件體系結構及其特點:

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

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

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

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

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

      (三)RISC體系結構的特點: ①一個大而統(tǒng)一的寄存器文件

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

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

      (五)Bootloader的功能:

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

      (六)Nand Flash和Nor Flash在性能上的區(qū)別: 1)NOR的讀速度比NAND稍快一些 2)NAND的寫入速度比NOR快很多?!肚度胧秸硖峋V》——YOYO左轉

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

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

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

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

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

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

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

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

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

      編程:

      1、流水燈;

      2、串口;

      3、信號量;

      4、Nand Flash 《嵌入式整理提綱》——YOYO左轉

      #include #define TASK_STK_SIZE

      OS_STK

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

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

      }

      void App1(void *pdata){

      pdata=pdata;{

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

      while(TRUE)OSInit();

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

      App2Stk[TASK_STK_SIZE];

      OSTaskCreate(App2,OSStart();

      /* Start multitasking */

      OSTimeDlyHMSM(0, 0, 3, 0);

      /* waiting for 3s */

      } }

      void App2(void *pdata){

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

      while(TRUE)

      《嵌入式整理提綱》——YOYO左轉

      }

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

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

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

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

      }

      第四篇:嵌入式系統(tǒng)復習總結

      嵌入式系統(tǒng)復習總結

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

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

      4.結構層次:應用程序、嵌入式系統(tǒng)實時操作系統(tǒng),硬件抽象層、嵌入式系統(tǒng)硬件工作平臺

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

      二、51單片機

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

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

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

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

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

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

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

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

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

      (3)邏輯類指令:

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

      (4)轉移類指令

      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.中斷系統(tǒng)

      兩個外部中斷INT0、1,兩個定時器中斷TI0、TI1,串口中斷

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

      中斷響應的條件:

      有中斷請求; EA=1;

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

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

      中斷響應的過程:

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

      ②由硬件自動生成一條長調用指令LCALL,將斷點地址(當前PC值)壓入堆棧加以保護;

      ③將中斷入口地址裝入PC,使程序轉向執(zhí)行中斷服務程序。中斷響應時間為3~8個機器周期

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

      定時器中斷自動清除標志位 外部中斷:

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

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

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

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

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

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

      ①設置TMOD控制字,確定工作方式;

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

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

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

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

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

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

      三、ARM單片機

      (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ù)訪問中止模式

      后五個屬于“異常模式”,后六屬于“特權模式”

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

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

      (4)存儲其結構(37個寄存器)

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

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

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

      (5)存儲類型;

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

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

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

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

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

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

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

      強行設置異常模式下CPSR的值;

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

      可以設置中斷禁止位;

      3.中斷的返回

      將返回的值寫入PC中

      恢復CPSR的值

      清除沖斷禁止位

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

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

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

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

      (8)尋址方式

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

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

      LDR R0, [R1,#8]?。ㄗ詣幼冎穼ぶ罚?; LDR R0, [R1], #2(后變址尋址)

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

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

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

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

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

      聲明變量:

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

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

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

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

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

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

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

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

      四、存儲器與接口技術

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

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

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

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

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

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

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

      5.MCS-51單片機

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

      鏈接程序存儲器數(shù)據(jù)存儲器復用時,將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(串行數(shù)據(jù))和SCL(串行時鐘),都是雙向傳輸線,通過電阻上拉到正電源,總線空閑時都是高電平5.I2S總線

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

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

      第五篇:嵌入式復習總結

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

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

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

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

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

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

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

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

      三、ARM處理器體系結構:

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

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

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

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

      四、ARM指令集:

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

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

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

      五、典型的ARM核芯片結構:

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

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

      3、時鐘編程方法:

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

      5、存儲器加速模塊MAM:

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

      7、GPIO:特性:可獨立控制每個GPIO的方向(輸入、輸出模式);可獨立設置每個GPIO的輸出狀態(tài);所有GPIO復位后,默認為輸入態(tài)。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

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

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

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

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

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

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

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

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

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

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

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

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

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

      prio =(y << 3)+ x;以上代碼將就緒任務表數(shù)組OSRdyTbl[]中相應元素的相應位清零,而對于OSRdyGrp,只有當被刪除任務所在任務組中全組任務一個都沒有進入就緒態(tài)時,才將相應位清零。算法理解:預先根據(jù)結構,先算好屏蔽字,做好準備,再利用二進制的特點,將優(yōu)先級與查表得出的屏蔽字進行邏輯操作,得出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-Ⅱ任務調度所花的時間是常數(shù),與應用程序中建立的任務數(shù)無關。

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

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

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

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

      8、任務數(shù)據(jù)結構: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);}

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

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

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

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

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

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

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

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

      initOSFile(char filename[],U32 OpenMode)

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

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

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

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

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

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

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

      ModemInit();初始化

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

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

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

      SPIInit();初始化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      r5 := mem32[r1 + 8]

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

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

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

      AREA Boot,CODE,READONLY

      ENTRY

      B Reset_handler B Undef_Handler B SWI_Handler

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

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

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

      4、消息機制對于多任務系統(tǒng)的意義?使兩個任務獨立性增強,耦合比較松散。

      5、內核涉及的數(shù)據(jù)結構(就緒表、TCB、優(yōu)先級表)。

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

      下載嵌入式復習總結a4word格式文檔
      下載嵌入式復習總結a4.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


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

      相關范文推薦

        ARM9嵌入式復習總結

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

        嵌入式系統(tǒng)復習總結

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

        ARM嵌入式技術復習總結

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

        嵌入式總結

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

        ARM嵌入式linux復習心得總結1

        2011.10.9 Evo楊 ARM嵌入式linux復習心得總結1: 一、Linux定制安裝: 從新安裝配置了一遍Linux,我使用的是Vmware7.0安裝RHEL5.5,對于Linux的安裝主要是要選擇定制安裝也就是Vmwa......

        ARM嵌入式linux復習心得總結1

        2011.10.9 Evo楊 ARM嵌入式linux復習心得總結1: 一、Linux定制安裝: 從新安裝配置了一遍Linux,我使用的是Vmware7.0安裝RHEL5.5,對于Linux的安裝主要是要選擇定制安裝也就是Vmwa......

        嵌入式linux復習2[合集5篇]

        判斷 1、 版本號為2.5 的linux內核比2.4的要更好更穩(wěn)定。(錯) 2、 bootloader就是uboot。(錯) 3、 啟動加載模式是bootloader的正常工作模式。(對) 4、 在目標機上遠程掛載nfs文件......

        嵌入式實驗總結

        如今,嵌入式系統(tǒng)已經(jīng)在眾多電氣電子產(chǎn)品上應用,有人預測今后5年發(fā)展形勢看好。嵌入式是典型的交叉學科,電信、電子、電氣、計算機、通信等等都有涉及。 嵌入式理論、實踐要求多......