嵌入式系統復習_第1頁
嵌入式系統復習_第2頁
嵌入式系統復習_第3頁
嵌入式系統復習_第4頁
嵌入式系統復習_第5頁
已閱讀5頁,還剩70頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式系統復習考試說明時間:16周周四(12月19日)14:00—16:00地點:東教南202,203閉卷題型及分值填空30%選擇10%判斷10%術語解釋10%簡答+設計40%嵌入式系統的定義

“以應用為中心,計算機技術為基礎,軟硬件可裁剪,以適應應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。”嵌入式微處理器分類嵌入式操作系統的發展階段1、無操作系統的嵌入算法階段2、專用嵌入式實時操作系統3、通用嵌入式實時操作系統4、基于internet的嵌入式系統嵌入式開發環境(交叉開發環境)嵌入式系統通常是一個資源受限的系統,其開發需要交叉編譯和在線調試的開發環境,主要包括:宿主機目標機(評估電路板)基于JTAG的ICD仿真器、或調試監控軟件、或在線仿真器ICE運行于宿主機的交叉編譯器和鏈接器、以及開發工具鏈或軟件開發環境嵌入式操作系統交叉開發環境ARM公司提供的ADS和AXDADS:ArmDeveloperSuiteAXD:ArmeXtendedDebugger仿真驅動有兩種:ADP—硬件仿真驅動ARMUL—軟件仿真驅動ARM7處理器ARM7TDMI的含義:T:支持16位壓縮指令集Thumb;D:支持片上Debug;M:內嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上斷點和調試點;Samsung公司的S3C44B0X即屬于該系列的處理器。三級流水線(取指-譯碼-執行),由此導致:ARM狀態下指令讀出的pc值是指令地址值加8個字節;Thumb狀態下指令讀出的pc值是指令地址值加4個字節ARM處理器支持的數據類型字節(8位)--char,unsignedchar半字(16位)--short,unsignedshort字(32位)--int,unsigned

int其中,字需要4字節對齊(地址的低兩位為0)、半字需要2字節對齊(地址的最低位為0)。ARM體系結構可以用兩種方法存儲字數據:大端格式(big-endian):字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中。小端格式(little-endian):低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節。ARM7TDMI核的bigend引腳,s3c44b0xcpu的endian引腳的狀態將決定大端格式或小端格式。字數據0x783C1A24的存儲格式如下:ARM7TDMI處理器有兩種工作狀態(對應于2種指令集):ARM狀態Thumb狀態ARM7TDMI核的操作狀態可以通過BX指令在ARM狀態和Thumb狀態之間切換ARMThumbLDRr0,=label+1BXr0ThumbARMLDRr0,=labelBXr0ARM處理器有7種工作模式:用戶模式(usr)

-正常的程序執行模式快速中斷模式(fiq)

-支持高速數據傳輸或通道處理中斷模式(irq)

-用于通用中斷處理管理員模式(svc)

-操作系統的保護模式.中止模式(abt)

-支持虛擬內存和/或內存保護系統模式(sys)

-支持操作系統的特殊用戶模式(運行操作系統任務)未定義模式(und)

-支持硬件協處理器的軟件仿真

除了用戶模式外,其他模式均可視為特權模式;Usr/Sysmode不是異常模式,沒有SPSR。在這2種模式中使用讀寫SPSR的指令時,結果不可預知。

ARM狀態下的寄存器組織R0到

R15可以直接訪問R0到

R14是通用寄存器R13:堆棧指針

(sp)(通常)每種處理器模式都有單獨的堆棧R14:鏈接寄存器(lr)R15程序計數器

(PC)CPSR–當前程序狀態寄存器,包括代碼標志狀態和當前模式位5個SPSRs--(程序狀態保存寄存器)

當異常發生時保存CPSR狀態

程序狀態寄存器N,Z,CandV條件碼標志

可以在處理器中作為數學和邏輯操作改變

可以被所有的指令測試,以決定指令是否被執行

N:Negative.Z:Zero.C:Carry.V:oVerflowIandF位是中斷禁止位,T位反映處理器的運行狀態M0,M1,M2,M3andM4位是模式位N,Z,CandV條件碼標志

可以在處理器中作為數學和邏輯操作改變

可以被所有的指令測試,以決定指令是否被執行

N:Negative.Z:Zero.C:Carry.V:oVerflow注意借位的設置:

減法運算發生借位時c=0,否則c=1

指令SBC,RSC的操作能感受到此種設置的影響IandF位是中斷禁止位

I=1禁止IRQ,I=0允許IRQT位反映處理器的運行狀態

T=1指示Thumb狀態,T=0指示ARM狀態與BX指令有聯系ARM體系的異常異常:由內部或外部源產生并引起處理器處理的一個事件異常向量表占據內存最低端的32個字節(0—0x1F)注意異常類型和處理器模式的關系地址異常進入時的模式進入時I的狀態進入時F的狀態0x00000000復位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷異常管理禁止F0x0000000C中止(預取)中止IF0x00000010中止(數據)中止IF0x00000014保留保留--0x00000018IRQ中斷禁止F0x0000001CFIQ快速中斷禁止禁止注:表中的I和F表示不對該位有影響,保留原來的值。ARM指令集和尋址方式理解:幾乎所有指令都可條件執行指令寫法上的變化可以控制是否影響標志位C代碼:if(a>b)a++;elseb++;對應的匯編代碼:CMP R0,R1;R0與R1比較ADDHIR0,R0,#1;若R0>R1,則R0=R0+1ADDLSR1,R1,#1;若R0≤R1,則R1=R1+1示例:條件碼SWP指令操作圖解C語言代碼為:int

gcd(inta,intb){while(a!=b){if(a>b)a=a-b;elseb=b-a;}returna;}

對應的ARM匯編代碼段。(代碼執行前R0中存放a,R1中存放b;代碼執行后R0中存放最大公約數。gcdCMPR0,R1;比較a和b的大小

SUBGTR0,R0,R1;if(a>b)a=a-bSUBLTR1,R1,R0;if(b>a)b=b-aBNEgcd

;if(a!=b)跳轉到gcd繼續執行

MOVPC,LR;子程序結束,返回實現類似于C語言中的if-else功能的代碼段。下例的功能為求最大公約數。

例:編寫一具有完整匯編格式的程序,實現冒泡法排序功能。設無符號字數據存放在從0x400004開始的區域,字數據的數目字存放在0x400000中。AREASORT,CODE,READONLY ENTRYSTART

MOV R0,#0x400000

ldrr1,[r0];counterLP SUBS R1,R1,#1 BEQ EXIT MOV R7,R1 LDR R0,=0x400004LP1 LDR R2,[R0],#4 LDR R3,[R0] CMP R2,R3STRLOR3,[R0,#-4] STRLOR2,[R0] SUBSR7,R7,#1 BNE LP1 B LPEXIT END

S3C44B0X構成最小系統S3C44B0X+電源電路+晶振電路+復位電路+JTAG接口電路可構成真正意義上的最小系統程序可運行于S3C44B0X內部的8KBRAM中,可運行的程序大小有限,且掉電后無法保存,只能通過JTAG接口調試程序S3C44B0X擴展系統S3C44B0X最小系統(S3C44B0X+電源電路+晶振電路+復位電路+JTAG接口電路)+SDRAM+FLASH電路可構成一個完全的嵌入式系統可運行于SDRAM中的程序,也可以運行NORFLASH中的程序,可運行較大的程序,如果將程序保存到FLASH中,掉電后不會丟失,因此,既可以通過JTAG接口調試程序,也可以將程序燒寫到FLASH,然后運行FLASH中的程序在此基礎上加入必要的接口及其他電路,就構成了具體的S3C44B0X應用系統S3C44B0x的存儲分配S3C44B0X內置存儲器控制器支持最多8個存儲器Bank,每個Bank最多支持32MB啟動代碼必須安排在Bank0Bank0處0x01c00000~0x02000000地址區間為特殊功能寄存器(SFR)。事實上,這就是I/O空間。ARM架構中,I/O和存儲器統一編址(或稱I/O是存儲器映射式的)11/29/202327通過C語言訪問內存或I/O的典型寫法通過指針定義用宏簡化#definerBANKSIZE (*(volatileunsigned*)0x1c80028)讀存儲器或IOaa=rBANKSIZE;寫存儲器或IOrBANKSIZE=32;NORFlashvs.NANDFlash項目NORflashNANDflash特點芯片內執行代碼拷至系統RAM中傳輸效率高中寫入/擦除操作的典型時間5s4ms擦除器件時塊大小64~128KB8~32KB接口SRAM接口I/O口存儲密度

低高

NORFLASH適合存儲程序,NANDFLASH適合存儲數據,實驗平臺up-netARM3000中有2MNORFLASH+16MNANDFLASHBootloader的作用BootLoader是在嵌入式系統復位啟動時,操作系統內核運行前,執行的第一段程序。通過BootLoader,初始化硬件設備,建立內存和I/O空間映射圖,為最終加載操作系統內核調整好適當的系統軟硬件環境。Bootloader中的異常向量表

ENTRYbResetHandler;fordebugbHandlerUndef;handlerUndefbHandlerSWI;SWIinterrupthandlerbHandlerPabort;handlerPAbortbHandlerDabort;handlerDAbortb. ;handlerReserved;************************************bHandlerIRQbHandlerFIQBootloader中指向用戶程序的鏈接IMPORT__main[:LNOT:THUMBCODE BL __main ;Don'tusemain()because...... B . ]μc/OS-II實時操作系統基于優先級的搶先式調度,不支持時間片輪轉調度,總是讓處在就緒狀態的優先級最高的任務先運行最多64個任務,任務編號0—63,0號優先級最高,63號優先級最低不可剝奪型內核(非占先式Non-Preemptive)低優先級任務ISR高優先級任務(1)(2)(3)(4)(5)(6)(7)中斷服務程序使高優先級任務就緒低優先級任務釋放CPU使用權TIME

非占先式內核要求每個任務自我放棄CPU的所有權。非占先式調度法也稱作合作型多任務,各個任務彼此合作共享一個CPU。異步事件還是由中斷服務來處理。中斷服務可以使一個高優先級的任務由掛起狀態變為就緒狀態。但中斷服務以后控制權還是回到原來被中斷了的那個任務,直到該任務主動放棄CPU的使用權時,那個高優先級的任務才能獲得CPU的使用權。——非占先式內核可剝奪型內核(占先式Preemptive)低優先級任務ISR高優先級任務(1)(2)(3)(4)(5)(6)中斷服務程序使高優先級任務就緒高優先級任務得到CPU使用權TIME

當系統響應時間很重要時,要使用占先式內核。因此絕大多數商業上銷售的實時內核都是占先式內核。最高優先級的任務一旦就緒,總能得到CPU的控制權。當一個運行著的任務使一個比它優先級高的任務進入了就緒狀態,當前任務的CPU使用權就被剝奪了,或者說被掛起了,那個高優先級的任務立刻得到了CPU的控制權。如果是中斷服務子程序使一個高優先級的任務進入就緒態,中斷完成時,中斷了的任務被掛起,優先級高的那個任務開始運行。——占先式內核任務設計

在基于實時操作系統的應用程序設計中,任務設計是整個應用程序的基礎,其它軟件設計工作都是圍繞任務設計來展開。任務設計應用程序設計“任務函數”和相關的數據結構其他軟件工作任務的分類任務單次執行類事件觸發類周期執行類按照執行方式分類任務(task)

典型的任務(除了單次執行的任務以外):一個無限循環,無返回值voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}}任務完成后的自我刪除當任務完成后,任務可以自我刪除任務代碼并非真的刪除了,系統只是簡單地不再理會這個任務這個任務的代碼也不會再運行了,即使任務調用了OSTaskDel(),這個任務也絕不會返回

voidYourTask(void*pdata)

{

/*用戶代碼*/

OSTaskDel(OS_PRIO_SELF);

}任務狀態在任一給定的時刻,任務的狀態一定是以下五種狀態之一:睡眠態(taskdormant)就緒態(taskready)運行態(taskrunning)等待狀態(taskwaiting)中斷服務態(ISRrunning)睡眠態(taskdormant)指任務駐留在程序空間(ROM或RAM),還沒有交給系統來管理的狀態任務交給系統通過調用以下函數之一來實現:OSTaskCreate()OSTaskCreateExt()告知系統:任務的起始地址任務建立時,用戶給任務賦予的優先級任務要使用的棧空間大小等就緒態(taskready)任務一旦創建就進入就緒態,準備運行任務的創建可以是在多任務開始之前,也可以動態地由一個運行著的任務創建若剛創建任務的優先級高于創建它的任務的優先級,它將立即獲得cpu的使用權任務可通過OSTaskDel()返回睡眠態;或調用該函數讓另一個任務進入睡眠態運行態(taskrunning)就緒的任務只有當所有優先級高于它的任務都轉為等待狀態,或被刪除后,才能進入運行態任何時刻只有一個任務處于運行態調用OSStart()可以啟動多任務。該函數只能在啟動時調用一次OSStart()運行用戶初始化代碼中已經建立的、進入就緒態的優先級最高的任務等待狀態(taskwaiting)正在運行的任務可以通過下面的調用進入等待狀態。延遲時間到,立即強制執行任務切換,讓下一個優先級最高、并進入就緒態的任務執行。OSTimeDly()OSTimeDlyHMSM()等待時間過去后,系統服務(內部)函數OSTimeTick()使延遲了的任務進入就緒態用戶無需在應用程序代碼中調用這個函數等待狀態(續)正在運行的任務可能需要通過調用函數等待某一事件(標志、信號量、互斥信號量、消息郵箱)發生。如果該事件并未發生,任務就進入等待狀態OSFlagPend();OSMutexPend()OSSemPend();OSMboxPend()當事件發生或等待超時,被掛起的任務就進入就緒態中斷服務態(ISRrunning)正在執行的任務是可以被中斷的,除非該任務將中斷關閉,或系統將中斷關閉。被中斷的任務便進入了中斷服務態響應中斷后,正在運行的任務被掛起,中斷服務子程序控制了CPU的使用權中斷服務態(ISRrunning)中斷服務子程序可能會報告一個或多個事件的發生,而使一個或多個任務進入就緒態上述情況下,從中斷服務子程序返回之前,

C/OS–II

要判定:被中斷的任務是否還是就緒態任務中優先級最高的如果中斷服務子程序使另一個優先級更高的任務進入了就緒態,則新進入就緒態的這個優先級更高的任務將得以運行;否則,原來被中斷了的任務將繼續運行。任務狀態當所有的任務都在等待時間發生或等待延遲時間結束時,

C/OS–II執行被稱為空閑任務(IdleTask)的內部函數,即:OSTaskIdle()任務狀態任務的CPU使用權被剝奪中斷恢復任務關于μC/OS的移植要使μC/OS-Ⅱ能正常運行,處理器必須具備的條件是:1、處理器的C編譯器能產生可重入代碼2、處理器支持中斷,并且能產生定時中斷3、用C語言就可以打開或者關閉中斷4、處理器支持能夠容納一定量數據的硬件堆棧5、處理器有將堆棧指針和其他CPU寄存器讀出,并保存到堆棧或內存中去的指令對于實驗平臺up-netARM3000而言,S3C44B0XCPU可以滿足第2、4、5點要求,使用ADS1.2的C編譯器可以滿足第1、3點要求什么是可重入代碼

可重入的代碼指的是一段可以被多個任務同時調用,而不必擔心會破壞數據的代碼(比如:一個函數)即:可重入型函數在任何時候都可以被中斷執行,過一段時間以后又可以繼續運行,而不會因為在函數中斷的時候被其他的任務重新調用,而影響函數中的數據可重入代碼舉例 程序1:可重入型函數

voidswap(int*x,int*y) {

inttemp; temp=*x; *x=*y; *y=temp; }非可重入代碼舉例程序2:非可重入型函數

inttemp; voidswap(int*x,int*y) { temp=*x; *x=*y; *y=temp; }不可重入函數被中斷破壞如何使函數具有可重入性

使Swap()函數具有可重入性的條件:把Temp定義為局部變量調用Swap()函數之前關中斷,調用后再開中斷用信號量禁止該函數在使用過程中被再次調用任務設計

在基于實時操作系統的應用程序設計中,任務設計是整個應用程序的基礎,其它軟件設計工作都是圍繞任務設計來展開。任務設計應用程序設計“任務函數”和相關的數據結構其他軟件工作任務設計|電腦自動打鈴器設計與實現任務的劃分

對一個嵌入式應用系統進行“任務劃分”,是實時操作系統應用軟件設計的關鍵,任務劃分是否合理將直接影響軟件設計的質量。以CPU為中心“關鍵”功能“緊迫”功能消耗機時關系密切相同事件觸發運行周期相同任務劃分固定順序執行任務劃分原則如下:首先,以CPU為中心,將與各種輸入/輸出設備(或端口)相關的功能分別劃分為獨立的任務發現“關鍵”功能,將其最“關鍵”部分“剝離”出來,用一個獨立任務(或ISR)完成,剩余部分用另外一個任務實現,兩者之間通過通信機制溝通發現“緊迫”功能,將其最“緊迫”部分“剝離”出來,用一個獨立的高優先級任務(或ISR)完成,剩余部分用另外一個任務實現,兩者之間通過通信機制溝通將消耗機時較多的數據處理功能劃分出來,封裝為低優先級任務對于既“關鍵”又“緊迫”的功能,按“緊迫”功能處理將關系密切的若干功能組合成為一個任務,達到功能聚合的效果將由相同事件觸發的若干功能組合成為一個任務,從而免除事件分發機制將運行周期相同的功能組合成為一個任務,從而免除時間事件分發機制將若干按固定順序執行的功能組合成為一個任務,從而免除同步接力通信的麻煩電腦自動打鈴器功能需求:具有實時時鐘功能,能顯示時分秒,年月日星期(采用8位數碼管顯示)具有鍵盤輸入功能可以設置若干個鬧鐘,以及鬧鐘的禁止與使能可設置每個鬧鐘發生時的輸出動作(一共四路輸出,可獨立設置每路輸出的時間和電平狀態)電腦自動打鈴器

LPC2000系列ARM具有RTC功能,RTC掉電后仍可使用電池繼續運行,從而保證了系統掉電后時鐘的準確性。ZLG7290是一款鍵盤和LED驅動芯片,最多支持64個按鍵和8個共陰極數碼管。系統框圖:任務的劃分電腦自動打鈴器任務劃分如下:RTC中斷顯示任務鍵盤任務輸出控制任務電腦打鈴器電腦自動打鈴器具有鍵盤輸入功能,用于設置時鐘和鬧鐘,因此需要一個鍵盤任務。電腦自動打鈴器需要有顯示功能,用來顯示時鐘和鬧鐘,因此需要一個顯示任務。電腦自動打鈴器需要一個輸出控制任務,用來控制鬧鐘時間到后各路的輸出。電腦自動打鈴器具有實時時鐘功能,需要一個RTC中斷。任務設計|電腦自動打鈴器設計與實現任務的優先級設計人機接口,實時性低鍵盤任務1輸出控制任務3顯示任務2RTC中斷4電腦自動打鈴器控制接口,實時性高任務的優先級設計鍵盤任務1輸出控制任務3顯示任務2RTC中斷4電腦自動打鈴器優先級:6優先級:12優先級:13多任務之間的同步與互斥資源互斥在電腦自動打鈴器的設計中,ZLG7290是通過I2C總線與cpu連接的,I2C總線是鍵盤任務和顯示任務的共享資源,必須遵循資源互斥的原則進行訪問,二者之間使用信號量進行資源互斥。鍵盤任務顯示任務信號量申請I2C資源釋放I2C資源申請I2C資源釋放I2C資源多任務之間的信息傳遞全局變量

在任務的數據結構設計中,我們設計了時鐘和鬧鐘兩個數據結構,并定義了時鐘和鬧鐘兩個全局變量。鍵盤任務,顯示任務和RTC中斷通過它們傳遞信息。全局變量(時鐘和鬧鐘)鍵盤任務顯示任務RTC中斷更新時鐘檢測鬧鐘設置時鐘和鬧鐘顯示時鐘和鬧鐘任務設計|電腦自動打鈴器設計與實現多任務之間的信息傳遞消息郵箱

RTC中斷檢測鬧鐘,鬧鐘到就向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論