第一篇:嵌入式系統(tǒng)設(shè)計的最后知識點總結(jié)
系統(tǒng)概念
1、嵌入式系統(tǒng)的定義?
以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ)、軟硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)?!扒度搿?、“專用”、“計算機”
2、嵌入式系統(tǒng)的軟、硬件組成?以及主要特點?
軟件:從底層到上層:bootloader等系統(tǒng)初始化引導(dǎo)程序、設(shè)備驅(qū)動層(包括驅(qū)動程序、板級支持包BSP等)、操作系統(tǒng)、用戶應(yīng)用程序。(底層為上層提供服務(wù))開發(fā)軟件:即集成開發(fā)環(huán)境(asemmbler&&compiler&&linker&&debugger&&loader)硬件組成:核心板+外圍板+外設(shè)(核心板:微控制器(CPU和外設(shè)接口、外設(shè)控制器)、電源、時鐘、復(fù)位、SDRAM、flash。外圍板面向外圍設(shè)備,一般是引腳的集合、電平轉(zhuǎn)換電路。外圍設(shè)備。),當(dāng)然也可以將核心板和外圍板放在一起。
硬件特點:通常由嵌入式處理器和嵌入式外圍設(shè)備組成,高度集成,常采用SOC設(shè)計方法,對功耗、體積等有嚴格要求,定制性決定了它的可裁剪性,沒有像計算機領(lǐng)域的壟斷,解決方案不唯一。
軟件特點:采用交叉開發(fā)方式,系統(tǒng)軟件層次分明,操作系統(tǒng)為用戶程序提供標(biāo)準API,提供圖形接口和文件系統(tǒng)。用戶調(diào)用系統(tǒng)服務(wù),系統(tǒng)調(diào)用設(shè)備驅(qū)動從而操縱硬件。
3、嵌入式系統(tǒng)產(chǎn)品設(shè)計的基本流程?
需求分析
功能性需求是系統(tǒng)的基本功能,如輸入輸出信號、操作方式等;
非功能性需求包括系統(tǒng)性能、成本、功耗、體積、重量等因素。規(guī)格說明
精確地反映客戶的需求并且作為設(shè)計時必須明確遵循的要求。體系結(jié)構(gòu)設(shè)計
描述系統(tǒng)如何實現(xiàn)所述的功能和非功能需求,包括對硬件、軟件和執(zhí)行裝置的功能劃分以及系統(tǒng)的軟件、硬件選型等。
軟硬件設(shè)計
基于體系結(jié)構(gòu),對系統(tǒng)的軟件、硬件進行詳細設(shè)計。系統(tǒng)集成
把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進行調(diào)試,發(fā)現(xiàn)并改進單元設(shè)計過程中的錯誤。系統(tǒng)測試
對設(shè)計好的系統(tǒng)進行測試,看其是否滿足規(guī)格說明書中給定的功能要求。
4、處理器及操作系統(tǒng)的選型主要考慮哪些方面?
① 操作系統(tǒng)本身所提供的開發(fā)工具。② 操作系統(tǒng)向硬件接口移植難度。
③ 操作系統(tǒng)的內(nèi)存要求。④ 開發(fā)人員是否熟悉此操作系統(tǒng)及其提供的系統(tǒng)API。⑤ 操作系統(tǒng)是否提供硬件的驅(qū)動程序,如網(wǎng)卡驅(qū)動程序等。⑥ 操作系統(tǒng)的是否具有可剪裁性。⑦ 操作系統(tǒng)是否具有實時性能。
5、交叉開發(fā)、交叉開發(fā)環(huán)境?為何需要交叉開發(fā)環(huán)境? 在一臺通用計算機(宿主機)上進行軟件的編輯編譯,然后下載到嵌入式設(shè)備(目標(biāo)機)中運行調(diào)試的開發(fā)方式
交叉開發(fā)環(huán)境一般由運行于宿主機上的交叉開發(fā)軟件(assembler&&compiler&&linker&&debugger&&loader)、宿主機到目標(biāo)機的調(diào)試通道組成 需要交叉開發(fā)環(huán)境是因為目標(biāo)機一般對體積、功耗等有嚴格限制,資源也面向應(yīng)用,較為緊張,要求僅僅能流暢運行代碼即可,而將用戶開發(fā)軟件(包括各種庫、工具)放置在主機上,而且現(xiàn)在的集成開發(fā)環(huán)境提供了各種修改好的功能庫,用起來也方便。
6、嵌入式集成開發(fā)環(huán)境的主要功能?
這是由其組成決定的。Assembler將.c源代碼匯編,compiler形成目標(biāo)文件,linker根據(jù)鏈接描述文件將各個目標(biāo)代碼鏈接定位生成可執(zhí)行代碼。Debugger有些交叉開發(fā)工具提供了仿真調(diào)試通道。Loader可以將目標(biāo)文件燒錄進設(shè)備中(有時需要內(nèi)部引導(dǎo)代碼的配合)
7、嵌入式Linux 開發(fā)主要流程?
搭建開發(fā)環(huán)境--燒寫bootloader--燒寫內(nèi)核--燒寫根文件系統(tǒng)--燒寫應(yīng)用程序。
開發(fā)環(huán)境:REDHAT-LINUX、下載相應(yīng)的GCC 交叉編譯器進行安裝、配置開發(fā)主機(配置MINICOM和配置網(wǎng)絡(luò),MINICOM 軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具,配置網(wǎng)絡(luò)主要是配置IP地址、NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻)
燒寫bootloader 下載一些公開源代碼的BOOTLOADER根據(jù)自己具體芯片進行移植修改。下載時,有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的ARM7、ARM9 系列芯片,這樣就需要編寫燒寫開發(fā)板上flash 的燒寫程序。
或者網(wǎng)絡(luò)上有免費下載的WINDOWS 下通過JTAG 并口簡易仿真器燒寫ARM 外圍flash 芯片的程序。也有LINUX 下公開源代碼的J-FLASH 程序。
下載內(nèi)核
如果有專門針對你所使用的CPU 移植好的LINUX 操作系統(tǒng)那是再好不過,下載后再添加自己的特定硬件的驅(qū)動程序,進行調(diào)試修改。下載根文件系統(tǒng)
從004km.cnplete...*/
OSIntExitY
= OSUnMapTbl[OSRdyGrp];
/*...and not locked.*/
OSPrioHighRdy
=
(INT8U)((OSIntExitY
<<
3)
+ OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if(OSPrioHighRdy!= OSPrioCur){
/* No Ctx Sw if current task is highest rdy
*/
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];//找就緒態(tài)的最高優(yōu)先級,并找到相應(yīng)TCB。
OSCtxIntCtr++;
/* Keep track of the number of context switches */
OSIntCtxSw();
//調(diào)用中斷級的任務(wù)調(diào)度函數(shù)
/* Perform interrupt level context switch
*/
}
}
OS_EXIT_CRITICAL();}
中斷級任務(wù)切換函數(shù)
執(zhí)行出棧指令之后還用中斷返回指令?沒有包含關(guān)系?模式(代碼分析)?
OSIntCtxSw;post FIQ Context switcher.This is called from OSIntExit when a hooked ISR;wants to return in the context of another task.We load the new tasks context;(from OSPrioHighRdy)and do the return from interrupt.;;Get pointer to stack where ISR_FiqHandler saved interrupted context
;ISR entry only saves
找到異常模式堆棧,它只保存了.first seven regs and LR
#16?
add
r7, sp, #16
;save pointer to register file(point to r0)LDR
sp, =IRQStack;FIQ_STACK;test to del it意義?
;Change ARM CPU to SVC mode for stack operations.將CPU切換至管理模式,以操作不同模式的堆棧。
;This gets the CPU off the interrupt stack and back to the
;interrupted task's stack, which is the one we want to alter.;mrs
r1, SPSR
;get suspended PSR orr
r1, r1, #0xC0
;disable IRQ, FIQ.msr
CPSR_cxsf, r1
;switch mode(shold be SVC_MODE)
;PSR, SP, LR regs are now restored to the interrupted SVC_MODE.;now set up the task's stack frame as OS_TASK_SW does...將進入IRQ異常的時候保存的上下文,從IRQ棧中賦值到SVC棧中
ldr
r0, [r7, #52]
;get IRQ's LR(tasks PC)from IRQ stack
sub
r0, r0, #4
;Actual PC address is(saved_LR-4)STMFD
sp!, {r0}
;save task PC放入管理模式棧中 STMFD
sp!, {lr}
;save LR
mov
lr, r7
;save FIQ stack ptr in LR(going to nuke r7)
ldmfd
lr!, {r0-r12}
;get saved registers from FIQ stack STMFD
sp!, {r0-r12}
;save registers on task stack
;save PSR and PSR for task on task's stack MRS
r4, CPSR
;OSPrioCur = OSPrioHighRdy
// change the current process LDR
r4, addr_OSPrioCur LDR
r5, addr_OSPrioHighRdy bic
r4, r4, #0xC0;leave interrupt bits in enabled mode STMFD
sp!, {r4} MRS
r4, SPSR STMFD
sp!, {r4}
;save task's current PSR;SPSR too
LDRB
r6, [r5] STRB
r6, [r4]
;Get preempted tasks's TCB LDR
r4, addr_OSTCBCur LDR
r5, [r4]
;store sp in preempted tasks's TCB STR
sp, [r5]
;Get new task TCB address LDR LDR LDR
r6, addr_OSTCBHighRdy
r6, [r6]
sp, [r6]
;get new task's stack pointer;OSTCBCur = OSTCBHighRdy STR r6, [r4]
;set new current task TCB address
LDMFD sp!, {r4} MSR
SPSR, r4 LDMFD sp!, {r4} BIC
r4,r4,#0xC0;we must exit to new task with ints enabled MSR
CPSR, r4
LDMFD
sp!, {r0-r12, lr, pc}
時鐘節(jié)拍中斷服務(wù)子程序
Void OSTickISR(void){
保存處理器寄存器的值;
調(diào)用OSIntEnter(),或是將OSIntNesting加1
if(OSIntNesting==1){
OSTCBCur->OSTCBStkPtr=SP;
}
調(diào)用OSTimeTick();
功能根據(jù)鏈表遍歷每個TCB,將非零的延時值--,有減到零,若非suspend狀態(tài),則置就緒位。
清發(fā)出中斷設(shè)備的中斷;
重新允許中斷(可選用)
調(diào)用OSIntExit();
恢復(fù)處理器寄存器的值;
執(zhí)行中斷返回指令;
} 中斷節(jié)拍函數(shù) void OSTimeTick(void){
OS_TCB *ptcb;
OSTimeTickHook();
/*OS_CFG中#define OS_CPU_HOOKS_EN
1*/
ptcb = OSTCBList;
(2)
while(ptcb->OSTCBPrio!= OS_IDLE_PRIO){
(3)
OS_ENTER_CRITICAL();
if(ptcb->OSTCBDly!= 0){
if(--ptcb->OSTCBDly == 0){
if(!(ptcb->OSTCBStat & OS_STAT_SUSPEND)){
(4)/ SUSPEND,則不能就緒,OSRdyGrp
|= ptcb->OSTCBBitY;
(5)
否則就緒到
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else {
ptcb->OSTCBDly = 1;
}
}
}
ptcb = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
}
OS_ENTER_CRITICAL();
(6)
OSTime++;
(7)累加從開機以來的時間,用的是一個無符號32位變量
OS_EXIT_CRITICAL();}
任務(wù)控制塊初始化函數(shù)OS_TCBInit()在創(chuàng)建任務(wù)時調(diào)用,它獲得TCB控制塊并對其進行初始化,并讓對應(yīng)任務(wù)就緒,完成任務(wù)創(chuàng)建的大部分任務(wù)。
Delay()和節(jié)拍中斷的對應(yīng)關(guān)系
Delay函數(shù)是自行掛起,等待延時時間到的函數(shù),它的功能就設(shè)置TCB中的延時值,清除自己的就緒位。而在每個節(jié)拍中斷處理函數(shù)中,會將延時值--。減到零時重新就緒。并在中斷退出時進行任務(wù)切換,有可能再次得到CPU的運行權(quán)。
若
是
第二篇:嵌入式系統(tǒng)相關(guān)知識點總結(jié)
嵌入式系統(tǒng)的定義及特點
定義:嵌入式系統(tǒng)是以應(yīng)用為中心、以計算機技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗等方面有特殊要求的專用計算機系統(tǒng)。
特點:(1)嵌入式系統(tǒng)是面向特定應(yīng)用的。嵌入式系統(tǒng)中的CPU是專門為特定應(yīng)用設(shè)計的,具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有利于整個系統(tǒng)設(shè)計趨于小型化。
(2)嵌入式系統(tǒng)涉及先進的計算機技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)、通信和軟件等各個行業(yè)。是一個技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。
(3)嵌入式系統(tǒng)的硬件和軟件都必須具備高度可定制性。
(4)嵌入式系統(tǒng)的生命周期相當(dāng)長。嵌入式系統(tǒng)和具體應(yīng)用有機地結(jié)合在一起,其升級換代也是和具體產(chǎn)品同步進行的。
(5)嵌入式系統(tǒng)本身并不具備在其上進行進一步開發(fā)的能力。在設(shè)計完成以后,用戶如果需要修改其中的程序功能,必須借助于一套專門的開發(fā)工具和環(huán)境。
(6)為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機中,而不是存貯于磁盤等載體中。
特點也可答:1.系統(tǒng)內(nèi)核小。2.專用性強。3.系統(tǒng)精簡。4.高實時性的系統(tǒng)軟件(OS)是嵌入式軟件的基本要求。5.嵌入式軟件開發(fā)要想走向標(biāo)準化,就必須使用多任務(wù)的操作系統(tǒng)。6.嵌入式系統(tǒng)開發(fā)需要開發(fā)工具和環(huán)境。7.嵌入式系統(tǒng)與具體應(yīng)用有機結(jié)合在一起,升級換代也是同步進行,所以具有較長的生命周期。8.為了提高運行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片中。
操作系統(tǒng)在嵌入式系統(tǒng)中所起的作用(四個)
嵌入式操作系統(tǒng)(嵌入式linux學(xué)習(xí))的功能
嵌入式操作系統(tǒng)除具備了一般操作系統(tǒng)(嵌入式linux系統(tǒng))最基本的功能,如任務(wù)調(diào)度、同步機制、中斷處理、文件處理等外,還有以下兩個方面的功能:
1.構(gòu)成一個易于編程的虛擬機平臺
嵌入式操作系統(tǒng)構(gòu)成一個虛擬機平臺,EOS把底層的硬件細節(jié)封裝起來,為運行在它上面的軟件(如中間件軟件和各種應(yīng)用軟件)提供了一個抽象的編程接口。軟件開發(fā)在這個編程接口的上進行,而不直接與機器硬件層打交道。
2.系統(tǒng)資源的管理者
嵌入式操作系統(tǒng)是一個系統(tǒng)資源的管理者,負責(zé)管理系統(tǒng)當(dāng)中的各種軟硬件資源,如處理器、內(nèi)存、各種I/O設(shè)備、文件和數(shù)據(jù)等,使得整個系統(tǒng)能夠高效、可靠地運轉(zhuǎn)。
嵌入式操作系統(tǒng)負責(zé)嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度、控制、協(xié)調(diào)并發(fā)活動。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能。
嵌入式操作系統(tǒng)是嵌入式系統(tǒng)應(yīng)用的核心.嵌入式操作系統(tǒng),大大地提高了嵌入式系統(tǒng)硬件工作效率,并為應(yīng)用軟件開發(fā)提供了極大的便利。
操作系統(tǒng)的作用主要體現(xiàn)在兩方面:
1.屏蔽硬件物理特性和操作細節(jié),為用戶使用計算機提供了便利 2.有效管理系統(tǒng)資源,提高系統(tǒng)資源使用效率
Linux與嵌入式使用的uclinux操作系統(tǒng)的關(guān)系
Linux與UNIX系統(tǒng)兼容,開放源代碼?,F(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正逐漸的應(yīng)用于嵌入式設(shè)備。uClinux正是在這種氛圍下產(chǎn)生的。所以uClinux就是Micro-Control-Linux,字面上的理解就是“針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng)”。
uClinux是針對控制領(lǐng)域的嵌入式linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。uClinux同標(biāo)準Linux的最大區(qū)別就在于內(nèi)存管理。標(biāo)準Linux是針對有MMU的處理器設(shè)計的。在這種處理器上,虛擬地址被送到MMU,MMU把虛擬地址映射為物理地址。通過賦予每個任務(wù)不同的虛擬—物理地址轉(zhuǎn)換映射,支持不同任務(wù)之間的保護。對于uCLinux來說,其設(shè)計針對沒有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù),仍然采用存儲器的分頁管理。
什么是內(nèi)核?
內(nèi)核是操作系統(tǒng)最基本的部分。它是為眾多應(yīng)用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內(nèi)核決定一個程序在什么時候?qū)δ巢糠钟布僮鞫嚅L時間。內(nèi)核,是一個操作系統(tǒng)的核心。是基于硬件的第一層軟件擴充,提供操作系統(tǒng)的最基本的功能,是操作系統(tǒng)工作的基礎(chǔ),它負責(zé)管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。
什么是Bootlonder? 答案一搜狗百科:啟動程序(英語:boot loader,也稱啟動加載器,引導(dǎo)程序)位于電腦或其他計算機應(yīng)用上,是指引導(dǎo)操作系統(tǒng)啟動的程序。引導(dǎo)程序啟動方式及程序視應(yīng)用機型種類而不同。BIOS開機完成后,bootloader就接手初始化硬件設(shè)備、創(chuàng)建存儲器空間的映射,以便為操作系統(tǒng)內(nèi)核準備好正確的軟硬件環(huán)境。BootLoader是依賴于硬件而實現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個通用的BootLoader是很困難的。
答案二百度百科:Boot Loader 是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。通常,Boot Loader 是嚴重地依賴于硬件而實現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?Boot Loader 歸納出一些通用的概念來,以指導(dǎo)用戶特定的 Boot Loader 設(shè)計與實現(xiàn)。
使用帶uclinux操作系統(tǒng)的嵌入式系統(tǒng)應(yīng)該注意什么問題?
uClinux的內(nèi)存管理
uClinux同標(biāo)準Linux的最大區(qū)別就在于內(nèi)存管理。對于uCLinux來說,其設(shè)計針對沒有MMU的處理器,不能使用處理器的虛擬內(nèi)存管理技術(shù),仍采用存儲器的分頁管理,系統(tǒng)在啟動時把實際存儲器進行分頁。在加載應(yīng)用程序時程序分頁加載。這一點影響了系統(tǒng)工作的很多方面。
uClinux系統(tǒng)對于內(nèi)存的訪問是直接的,所有程序中訪問的地址都是實際的物理地址。操作系統(tǒng)對內(nèi)存空間沒有保護,各個進程實際上共享一個運行空間。由于應(yīng)用程序加載時必須分配連續(xù)的地址空間,而針對不同硬件平臺的可一次成塊,分配內(nèi)存大小限制是不同,所以開發(fā)人員在開發(fā)應(yīng)用程序時必須考慮內(nèi)存的分配情況并關(guān)注應(yīng)用程序需要運行空間的大小。另外由于采用實存儲器管理策略,用戶程序同內(nèi)核以及其它用戶程序在一個地址空間,程序開發(fā)時要保證不侵犯其它程序的地址空間,以使得程序不至于破壞系統(tǒng)的正常工作,或?qū)е缕渌绦虻倪\行異常。
從內(nèi)存的訪問角度來看,開發(fā)人員的權(quán)利增大了(開發(fā)人員在編程時可以訪問任意的地址空間),但與此同時系統(tǒng)的安全性也大為下降。uClinux的多進程處理
uClinux沒有MMU管理存儲器,在實現(xiàn)多個進程時(fork調(diào)用生成子進程)需要實現(xiàn)數(shù)據(jù)保護。uClinux的這種多進程實現(xiàn)機制同它的內(nèi)存管理緊密相關(guān)。uClinux針對沒有mmu處理器開發(fā),所以被迫使用一種flat方式的內(nèi)存管理模式,啟動新的應(yīng)用程序時系統(tǒng)必須為應(yīng)用程序分配存儲空間,并立即把應(yīng)用程序加載到內(nèi)存。缺少了MMU的內(nèi)存重映射機制,uClinux必須在可執(zhí)行文件加載階段對可執(zhí)行文件reloc處理,使得程序執(zhí)行時能夠直接使用物理內(nèi)存。
編程實現(xiàn)五個點的中值濾波和均值濾波
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;
第三篇:嵌入式 知識點總結(jié)
1、嵌入式系統(tǒng)的特點:
(1).嵌入式系統(tǒng)的個性化很強,軟件系統(tǒng)和硬件在不同的應(yīng)用中均有差異;(2).由通用計算機系統(tǒng)發(fā)展而來,根據(jù)應(yīng)用對軟硬件進行裁剪;(3).高的可靠性,強的實用性;
(4).高的耗電量直接影響系統(tǒng)的成本及電源壽命;
2、什么是嵌入式系統(tǒng)?
嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),采用可剪裁硬件,適用于對功能,可靠性,成本,體積,功耗等有嚴格要求的專用計算機系統(tǒng)。
3、采用RISC架構(gòu)的ARM微處理器一般具有如下特點:(1).體積小、功耗低、成本低、性能高;
(2).支持Thumb(16位)/ARM(3位)雙指令集,能很好地兼容8位/16位器件;(3).大量使用寄存器,指令執(zhí)行速度快;(4).大多數(shù)數(shù)據(jù)操作都在寄存器中完成;(5).尋址方式靈活簡單,執(zhí)行效率高;(6).采用固定長度的指令格式;
4、嵌入式系統(tǒng)開發(fā)流程:
選擇嵌入式處理器(硬件平臺)---選擇嵌入式操作系統(tǒng)(軟件平臺)-----開發(fā)嵌入式應(yīng)用軟件-----測試通過---(是)---系統(tǒng)測試-----開發(fā)結(jié)束
5、嵌入式系統(tǒng)軟件設(shè)計流程:
代碼編程(C/匯編源程序)-----交叉編譯(OBJ文件)-----交叉函數(shù)庫----交叉鏈接(系統(tǒng)映像文件)---(重定向與下載)---目標(biāo)板----調(diào)試;
6、ARM9E處理器有獨立的指令緩存(ICACHE)和數(shù)據(jù)緩存(DCACHE);
7、ARM9系列處理器共有37個寄存器,其中31個屬于通用寄存器,6個為ARM處理器;
8、ARM總共有7種不同的處理器模式,分別是:用戶模式,快速中斷模式,外部中斷模式,管理模式,數(shù)據(jù)訪問中止模式,未定義指令中止模式,系統(tǒng)模式
9、R13一般作為棧指針SP;R14被稱為連接寄存器LR,作用:一是在通過BL或者BLX指令調(diào)用子程序時存放當(dāng)前子程序的返回地址;二是在發(fā)生異常時用來保存該模式基于PC的返回地址;R15是程序計數(shù)器PC,用來保存處理器取值的地址;
10、流水線技術(shù)的工作原理:
ARM7采用的是3級流水線:FETCH/DECODE/EXECUTE.此時在EXECUTE階段要完成大量的工作,包括寄存器和存儲器的讀寫操作、移位操作、ALU操作等,這導(dǎo)致在執(zhí)行階段往往需要多個時鐘周期,從而成為系統(tǒng)性能的瓶頸。
ARM9采用5級流水線技術(shù),分別是FETCH/DECODE/EXECUTE/MEMORY/WRITE.FETCH階段和之前功能相同,即從指令存儲器中取值;DECODE階段除了譯碼之外,還讀取寄存器操作數(shù);EXECUTE階段執(zhí)行運算,產(chǎn)生ALU運算結(jié)果或產(chǎn)生存儲器地址;MEMORY階段進行存儲器的讀寫操作;WRITE階段將結(jié)果寫回寄存器;
11、ARM9使用一個統(tǒng)一的TLB來緩存頁表信息,TLB主頁分為兩個部分:主TLB和鎖定TLB;
12、ARM總共有7種處理器異常:復(fù)位異常、未定義指令異常、軟件中斷異常、指令預(yù)取終止異常、數(shù)據(jù)訪問終止異常、外部訪問終止異常、快速中斷請求異常
13、(1).復(fù)位異常和軟件中斷異常時,處理器進入管理模式;(2).未定義指令異常時,處理器進入未定義模式;
(3).指令預(yù)取終止異常和數(shù)據(jù)訪問終止異常時,處理器進入中止模式;(4).外部中斷請求時,處理器進入外部中斷模式;(5).快速中斷請求時,處理器進入快速中斷模式; 14.ARM運行狀態(tài):ARM狀態(tài)和Thumb狀態(tài);ARM指令必須在ARM狀態(tài)下執(zhí)行,同樣,Thumb指令也必須處于Thumb狀態(tài)下執(zhí)行。
15.ARM狀態(tài)和Thumb狀態(tài)切換可以通過BX指令來實現(xiàn)。
16.ARM指令集有5種形式的位移操作:LSL:邏輯左移;LSR:邏輯右移;ASR:算術(shù)右移;ROR:循環(huán)右移;RRX:帶擴展的循環(huán)右移;
17.立即數(shù)并不是任意數(shù)都是合法的,在立即數(shù)尋址中,分配給立即數(shù)的空間是12位,8位用于保存一個常數(shù),4位用于保存循環(huán)右移基數(shù),而循環(huán)右移每次需要移動偶數(shù)位,即右移的位數(shù)是基數(shù)*2;假設(shè)常數(shù)為A,循環(huán)右移位數(shù)為N,則最后得到的立即數(shù)=A循環(huán)右移(N*2位);
18.ARM指令的尋址方式及特點:(1)立即尋址;
(2).寄存器偏移尋址;(3).寄存器偏移尋址;(4).寄存器間接尋址;(5).基址變址尋址;(6).多寄存器尋址;
(7).堆棧尋址:滿遞增堆棧、空遞增堆棧、滿遞減堆棧、空遞減堆棧; 19.LDR和STR LDR指令:從內(nèi)存讀取數(shù)據(jù)裝入寄存器; STR指令:將寄存器中的數(shù)據(jù)存入內(nèi)存;
20.CDP:是協(xié)處理器數(shù)據(jù)處理指令:用來執(zhí)行特定的數(shù)據(jù)操作; MCR:將ARM寄存器中的數(shù)據(jù)傳輸?shù)絽f(xié)處理器寄存器中;
MRC:數(shù)據(jù)傳輸方向與MCR指令相反,它將協(xié)處理器寄存器中的數(shù)據(jù)傳送到ARM處理器寄存器中;
21.ADR:小范圍的地址讀取偽指令,主要用來讀取基于PC相對偏移的地址或基于寄存器相對偏移的地址;
LDR:大范圍偽地址讀取偽指令,用于加載32位的立即數(shù)或是一個地址值; 22.Thumb跳轉(zhuǎn)指令:
B:是Thumb指令中唯一可以條件執(zhí)行的指令; BL:帶鏈接的長跳轉(zhuǎn);
BX:指令在跳轉(zhuǎn)的同時,會選擇性的切換指令集; BLX:帶鏈接的跳轉(zhuǎn),并選擇性的切換指令集;
23.MMU:其作用主要有2個方面:一是地址映射,負責(zé)將虛擬地址映射成物理地址;二是對地址訪問的保護和限制;提供硬件機制的內(nèi)存訪問授權(quán),大多數(shù)使用虛擬存儲器的系統(tǒng)都使用一種稱為分頁機制,虛擬地址空間劃分成大小相同的一組頁,每個頁有一個用來標(biāo)記它的頁號,而相應(yīng)的物理地址空間也被進行劃分,單位幀、頁和頁幀的大小必須相同,虛擬地址被送往MMU,MMU將虛擬地址轉(zhuǎn)化為物理地址。
24.進程調(diào)度策略可分為:“搶占式調(diào)度”和”非搶占式調(diào)度”;
25.在用戶空間中,進程是由進程標(biāo)識符(PID)表示的,一個PID在進程的整個生命期間不會更改,但PID可以在進程進行銷毀后重新使用;對用戶來說,PID是唯一標(biāo)識一個進程的數(shù)字值;
26.Linux進程還可以通過exec系統(tǒng)調(diào)用產(chǎn)生; 27.Linux操作系統(tǒng)有三種進程調(diào)度策略:(1).分時調(diào)度策略;(2).先到先服務(wù)的實時調(diào)度策略;(3).時間片輪的實時調(diào)度策略; 28.嵌入式文件系統(tǒng)分類:(1).基于Flash的文件系統(tǒng):
JFFS2文件系統(tǒng);YAFFS文件系統(tǒng);Cramfs;Romfs;其他文件系統(tǒng);
(2).基于RAM的文件系統(tǒng): RamDisk;Ramfs/Tmpfs(3).網(wǎng)絡(luò)文件系統(tǒng)NFS 29.Boot Loader 階段一:1.基本的硬件初始化:a.屏蔽所有中斷;b.設(shè)置CPU的速度和時鐘頻率;c.RAM初始化;d.初始化LED;30.ARM-Linux內(nèi)存管理原理:從兩方面入手:一是Linux內(nèi)核對內(nèi)存的管理(包括最重要的地址映射、內(nèi)存空間的分配以及地址訪問的限制,即保護機制);二是體系對內(nèi)存管理方面的特殊性;
31.Linux虛擬內(nèi)存的實現(xiàn)需要6種機制的支持:地址映射機制、請求頁機制、內(nèi)存分配回收機制、緩存和刷新機制、交換機制和內(nèi)存共享機制; 32.Linux虛擬內(nèi)存實現(xiàn)機制間的相互關(guān)系:
地址映射機制----請求頁機制----內(nèi)存分配和回收機制---交換機制----緩存和刷新機制
33.進程,又稱作任務(wù),是一個動態(tài)的執(zhí)行過程,是處于執(zhí)行期的程序,進程是系統(tǒng)資源分配的最小單位。
34.在Linux系統(tǒng)中,所有的進程都是fork出來的,它們有個共同的祖先:0號進程;
35.init是內(nèi)核啟動的第一個用戶級進程,也是系統(tǒng)的第一個真正的進程,是其他所有進程的父進程,所以init內(nèi)核線程(或進程)的標(biāo)識符為1,init有很多重要的任務(wù),負責(zé)完成系統(tǒng)的一些初始化設(shè)置任務(wù),以及執(zhí)行系統(tǒng)初始化程序,init程序使用/etc/inittab作為腳本文件來創(chuàng)建系統(tǒng)中的新進程;
36.進程的銷毀通過以下三個事件驅(qū)動:正常的進程結(jié)束、信號、exit函數(shù)的調(diào)用;
37.進程調(diào)度時機可分為:主動調(diào)度和被動調(diào)度;按細分的話:(1)進程狀態(tài)轉(zhuǎn)換;(2)當(dāng)前進程的時間片用完;(3)設(shè)備驅(qū)動程序;(4)進程從中斷、異常以及系統(tǒng)調(diào)用返回到用戶態(tài); 38.選擇進程的依據(jù):policy、priority、counter、rt_priority; 39.內(nèi)核模塊全稱為動態(tài)可加載內(nèi)核模塊,是Linux內(nèi)核向外部提供的一個插口,簡稱為模塊; 40.加載模塊有兩種方法:第一種是通過insmod命令手工將module載入內(nèi)核;第二種是根據(jù)需要載入module;kerneld的主要功能是module載入內(nèi)核和將它卸載出內(nèi)核; 41.中斷是一個流程,一般經(jīng)過三個環(huán)節(jié):中斷相應(yīng)、中斷處理、中斷返回;
42.ARM-Linux的系統(tǒng)調(diào)用原理:系統(tǒng)調(diào)用的過程和中斷有類似之處,當(dāng)CPU遇到自陷指令后,跳轉(zhuǎn)到內(nèi)核態(tài),操作系統(tǒng)首先保存當(dāng)前運行的信息,然后根據(jù)系統(tǒng)調(diào)用號來查找相應(yīng)的函數(shù)去執(zhí)行,執(zhí)行完了以后恢復(fù)原先保存的運行信息返回,比如通常應(yīng)用程序所用的fork()函數(shù),它是經(jīng)過包裝的函數(shù),其最終的實現(xiàn)是系統(tǒng)調(diào)用;
43.在UNIX系統(tǒng)下有兩種方式實現(xiàn)系統(tǒng)調(diào)用:通過經(jīng)過封裝的C庫或者直接調(diào)用;
44.系統(tǒng)調(diào)用的過程和中斷有類似之處,當(dāng)CPU遇到自陷指令后,跳轉(zhuǎn)到內(nèi)核態(tài),操作系統(tǒng)首先保存當(dāng)前運行的信息,然后根據(jù)系統(tǒng)調(diào)用號查找相應(yīng)的函數(shù)去執(zhí)行,執(zhí)行完了以后恢復(fù)原先保存的運行信息返回;通過不同的向量索引可以使CPU立即轉(zhuǎn)入不同的處理程序; 45.init進程是系統(tǒng)所有進程的起點,內(nèi)核在完成核內(nèi)參數(shù)init=XXX來設(shè)置init進程,init進程需要讀取/etc/inittab文件作為其行為指針,inittab是以行為為單位的描述性(非執(zhí)行性)文本; 46.存儲文件系統(tǒng)的設(shè)備稱為block設(shè)備(塊設(shè)備);
47.設(shè)備驅(qū)動的接口API都是從文件管理器API中繼承下來的,所以這些設(shè)備API都有open().close().read().write().lseek()和ioctl()等與文件API類似的接口;
48.Linux也使用文件管理器,但是它的文件管理器使用了VFS(虛擬文件系統(tǒng)),正是VFS讓Linux能夠支持目前多種文件系統(tǒng)。VFS具備訪問各種各樣的文件系統(tǒng)的能力,也是因為VFS在內(nèi)部去適應(yīng)各種不同文件系統(tǒng)的差異,而提供給用戶進程的是統(tǒng)一的文件API。49.JFFS2嵌入式文件系統(tǒng)原理:
首先JFFS2是一個日志結(jié)構(gòu)文件系統(tǒng),包含數(shù)據(jù)和元數(shù)據(jù)的節(jié)點在閃存上順序存儲。JFFS2定義了三種節(jié)點類型:JFFS2_NODETYPE_INODE, JFFS2_NODETYPE_DIRENT,JFFS2_NODETYPE_CLEANMARKER。JFFS2中I節(jié)點的信息并沒有全部存放在內(nèi)存,mount操作時,會為節(jié)點建立映射表,但是這個映射表并不全部存放在內(nèi)存中,存放在內(nèi)存中的節(jié)點信息是一個縮小尺寸的結(jié)構(gòu)體。JFFS2使用了多個級別的待回收塊隊列。JFFS2寫平衡策略是在垃圾收集中實現(xiàn)的,垃圾收集的時候會讀取系統(tǒng)時間,使用這個系統(tǒng)時間產(chǎn)生一個偽隨機數(shù)。利用這個偽隨機數(shù)結(jié)合不同的待回收鏈表選擇要進行回收的鏈表。50.JFFS2克服了JFFS中以下缺點:
(1).使用了基于哈希表的日志節(jié)點結(jié)構(gòu),大大加快了對節(jié)點的操作速度;(2).支持數(shù)據(jù)壓縮;
(3).提供了”寫平衡”支持;
(4).支持多種節(jié)點類型(數(shù)據(jù)I節(jié)點,目錄I節(jié)點等);(5).提高了對閃存的利用率,降低了內(nèi)存的消耗;
51.系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,而設(shè)備驅(qū)動程序則是操作系統(tǒng)內(nèi)核和機器硬件之間的接口;
52.Linux支持三類硬件設(shè)備:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備; 53.Linux內(nèi)核設(shè)備模型的目的和功能:
目的:設(shè)備模型提供獨立的機制表示設(shè)備,并表示其在系統(tǒng)中的拓撲結(jié)構(gòu),這樣使系統(tǒng)具有以下優(yōu)點:代碼重復(fù)最??;提供如引用計數(shù)這樣的統(tǒng)一機制;列舉系統(tǒng)中所有設(shè)備,觀察其狀態(tài),查看其連接總線;用樹的形式將全部設(shè)備結(jié)構(gòu)完整、有效地展現(xiàn),包括所有總線和內(nèi)部連接;將設(shè)備和對應(yīng)驅(qū)動聯(lián)系起來,將設(shè)備按照類型分類;從樹的葉子向根的方向依次遍歷,確保以正確順序關(guān)閉各個設(shè)備的電源;初衷是為了節(jié)能,有助于電源管理,通過建立表示系統(tǒng)設(shè)備拓撲關(guān)系的樹結(jié)構(gòu),能夠在內(nèi)核中實現(xiàn)智能的電源管理;
功能:將系統(tǒng)中的設(shè)備組織成層次結(jié)構(gòu),然后向用戶程序提供內(nèi)核數(shù)據(jù)結(jié)構(gòu)信息; 54.同步機制的分類及特點:
(1).同步鎖:適用于保持時間段的情況,可以在任何上下文使用,不可以睡眠,任何時候,只能有一個持有者;
(2).信號量:不能用在內(nèi)核之外,是一種睡眠鎖,適用于鎖會被長期持有的情況,允許多個持有者;
(3).原子操作:在執(zhí)行完畢前絕不會被任何其他任何或時間打斷,是最小的執(zhí)行單位,主要用在資源計數(shù)上;
(4).完成事件:適用于需要睡眠和喚醒的情景,不會引起資源競爭;
55.表示字符設(shè)備的設(shè)備文件可以通過”ls-l”命令輸出的第一列中的“c”來識別,而塊設(shè)備則用“b”標(biāo)識;
56.dev t是一個32位的無符號數(shù),其高12位用來表示主設(shè)備號,低20位用來表示次設(shè)備號;
Register_chrdev_region()函數(shù)和alloc_chrdev_region()函數(shù)用于分配設(shè)備號,這兩個函數(shù)最終都會調(diào)用_register_chrdev_region()函數(shù)來注冊一組設(shè)備的編號范圍,它們的區(qū)別是后者是以動態(tài)的方式分配的,unregister_chrdev_region()函數(shù)則用于釋放設(shè)備號。Alloc_chrdev_region()函數(shù)用于動態(tài)申請設(shè)備號范圍,通過指針參數(shù)返回實際分配的起始設(shè)備號;
Dev_ti_rdev:對于設(shè)備文件而言,此成員包含實際的設(shè)備號; Struct cdev *i_cdev:字符設(shè)備在內(nèi)核中是用cdev結(jié)構(gòu)來表示的,此成員是指想cdev結(jié)構(gòu)的指針;
57.I/O接口是微控制器必須具備的最基本外設(shè)功能。通常在ARM里,所有I/O都是通用的,稱為GPIO(通用輸入輸出);GPIO接口一般至少會有兩個寄存器,即控制寄存器和數(shù)據(jù)寄存器;
58.同步外設(shè)接口是由摩托羅拉公司推出的一種高速的、全雙工、同步的串行總線; 59.SPI的工作模式有兩種:主模式和從模式;
60.字符設(shè)備以字節(jié)為單位進行讀寫,而塊設(shè)備則以塊為單位,塊設(shè)備的I/O請求都有對應(yīng)的緩沖區(qū)并使用了請求隊列對請求進行管理,塊設(shè)備還支持隨機訪問,而字符設(shè)備只能順序訪問。Linux中每一個塊設(shè)備里請求都有一個I/O請求隊列,每個請求隊列都有調(diào)度器的插口。
61.Bio是底層對部分塊設(shè)備的I/O請求描述,其包含了驅(qū)動程序執(zhí)行請求所需的全部信息,通常一個I/O請求對應(yīng)一個bio。I/O調(diào)度器可將聯(lián)系的bio合并成一個請求。
62.MMC/SD卡驅(qū)動結(jié)構(gòu):a.文件結(jié)構(gòu);b.塊設(shè)備驅(qū)動;c.MMC/SD核心;d.MMC/SD接口;
第四篇:嵌入式系統(tǒng)設(shè)計報告
嵌入式系統(tǒng)設(shè)計實驗報告
班 級:學(xué) 號:姓 名:成 績:指導(dǎo)教師:
20090612 2009112107 侯金鐘 武俊鵬、劉書勇 1.實驗一
1.1 實驗名稱
嵌入式系統(tǒng)硬件開發(fā)環(huán)境
1.2 實驗?zāi)康?/p>
1.熟悉UP-net3000實驗平臺。
2.超級終端設(shè)置及BIOS 功能使用。
1.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
1.4 實驗內(nèi)容及要求
熟悉UP-net3000實驗平臺的硬件電路和外設(shè),ARM JTAG的安裝和使用,利用超級終端檢驗外設(shè)的工作狀態(tài)。
1.5 實驗設(shè)計與實驗步驟
1.建立工程
(1)運行ARM SDT 2.5 集成開發(fā)環(huán)境(ARM Project Manager).(2)在新建的工程中,如圖1A-2 所示,選中工程樹的“根部”。
(3)因為開發(fā)板上的嵌入式處理器ARM7TDMI 沒有浮點處理器,所以,如圖1A-3 所
示,在彈出的對話框中設(shè)置Floating Point Processor 為none,并保持其他的設(shè)置不變。(4)選中工程樹的“根部”,通過菜單Project | Tool Configuration for work1.apj | asmlink | Set,對整個工程的連接方式進行設(shè)置。(5)在彈出的對話框中,選中Entry and Base 標(biāo)簽,如圖1A-4 所示,設(shè)置連接的Read-Only(只讀)和Read-Write(讀寫)地址。
(6)選擇Linker Configuration 的ImageLayout 標(biāo)簽,(7)選擇Project | Edit Project Tamplete 菜單,彈出Project Template Editor 對話框。
(8)選擇Project | Edit Variables for work1.apj,彈出Edit Variables for work1.apj 對話框。
2.進行程序的在線仿真、調(diào)試
1.6 實驗過程與分析
熟悉UP-net3000實驗平臺的硬件電路和外設(shè),安裝了ARM JTAG,利用超級終端檢驗了外設(shè)的工作狀態(tài)。
1.7 實驗結(jié)果總結(jié)
軟件安裝成功,結(jié)果顯示正常。
1.8 心得體會
通過此次試驗,我對ARM的環(huán)境的功能有一定的了解與完善。對試驗臺有了基本的認識與使用。
2.實驗二
2.1 實驗名稱
嵌入式系統(tǒng)軟件開發(fā)環(huán)境
2.2 實驗?zāi)康?/p>
1.熟悉ADS1.2 開發(fā)環(huán)境,學(xué)會ARM 仿真器的使用。
2.使用ADS 編譯、下載、調(diào)試并跟蹤一段已有的程序,了解嵌入式開發(fā)的基本思想和過程。
2.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
2.4 實驗內(nèi)容及要求
本次實驗使用ADS 集成開發(fā)環(huán)境。新建一個簡單的工程文件,并編譯這個工程文件。學(xué)習(xí)ARM 仿真器的使用和開發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到嵌入式控制器中運行。學(xué)會在程序中設(shè)置斷點,觀察系統(tǒng)內(nèi)存和變量。
2.5 實驗設(shè)計與實驗步驟
(1)運行ADS1.2 集成開發(fā)環(huán)境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,選擇Debug 版本,使用Edit | Debug Settings菜單對Debug 版本進行參數(shù)設(shè)置。(3)在Debug Settings 對話框中選擇Target Settings 項。在Post-linker一欄中選擇ARM from ELF。
(4)在Debug Settings 對話框中選擇ARM Linker 項
(5)在第四步中如果選擇簡單的地址連接設(shè)置,在Debug Settings 對話框中選擇ARM Linker 項
(6)回到的工程窗口中,選擇Release 版本,使用Edit | Release Settings 菜單對Release 版本進行參數(shù)設(shè)置。(7)參照第(3)、(4)、(5)、(6)步在Release Settings 對話框中設(shè)置Release版本的Post-linker、連接地址范圍、入口模塊和輸出文件。(8)回到如圖1B-3 所示的工程窗口中,選擇Targets 選項卡,如圖1B-11 所示。選中DebugRel 版本,按Del 鍵將其刪除。DebugRel 子樹是一個折衷版本,通常用不到,所以在這里刪除。
2.6 實驗過程與分析
1)回到工程窗口選中Debug 版本,執(zhí)行菜單Project | Make 對工程進行編譯連接。(2)在ADS 中執(zhí)行菜單Project | Debug 啟動ADS1.2 的調(diào)試工具AXD。(3)在AXD 中執(zhí)行菜單Options | Configure Target 對AXD 進行設(shè)置。(4)點Select 按鈕選擇遠程連接為ARM ethernet driver,點Configure 按鈕輸入仿真器的IP 地址。
(5)等待程序裝載完畢以后,通過Execute | Go 菜單以及Execute | Stop(或者工具欄中的相應(yīng)按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute | Step 菜單(或者工具欄中的相應(yīng)按鈕)可以單步運行程序。
(7)程序停止后可以通過Processor Views | Sources 菜單查看源文件,并可在適當(dāng)位置按F9 設(shè)置端點。
(8)使用在Processor View 菜單下的Registers、Variables 和Memory 命令可以查看工作寄存器或者內(nèi)存變量。讀者可以逐一地嘗試,為以后調(diào)試程序打下基礎(chǔ)。
2.7 實驗結(jié)果總結(jié)
超級終端輸出“Hello World!”。
2.8 心得體會
基本了解了ADS1.2的配置條件,學(xué)會了ARM仿真器的使用方法。
3.實驗三
3.1 實驗名稱
鍵盤及LED實驗
3.2 實驗?zāi)康?/p>
1.學(xué)習(xí)鍵盤及LED 驅(qū)動原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅(qū)動17鍵的鍵盤和8個共陰極LED。
3.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
3.4 實驗內(nèi)容及要求
通過ZLG7289芯片驅(qū)動17鍵的鍵盤和8個共陰極LED,將按鍵值在LED上顯示出來。要求從右至左循環(huán)顯示至少四位數(shù)字。
基本功能實現(xiàn)之后可考慮實現(xiàn)從左至右顯示四位及四位以上數(shù)字(最大八位),并可設(shè)置清零鍵等擴展功能。
3.5 實驗設(shè)計與實驗步驟
利用所給的基礎(chǔ)代碼進行調(diào)試,觀察輸出結(jié)果,結(jié)合指導(dǎo)書和教材掌握基本原理和源代碼的編寫方式。根據(jù)實驗的要求設(shè)計函數(shù)流程,并反復(fù)調(diào)試,實現(xiàn)功能。1.新建工程,將“Exp3 鍵盤及LED 驅(qū)動實驗”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.編寫ZLG7289 驅(qū)動函數(shù)(ZLG7289.c)4.定義鍵盤映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 鍵值映射表,通過查找鍵盤映射表來確定鍵盤掃描碼對應(yīng)的按鍵值。
5.定義鍵值讀取函數(shù)。(Keyboard16.c)6.編寫主函數(shù),將按鍵值在數(shù)碼管上顯示。
3.6 實驗過程與分析
利用鍵盤驅(qū)動函數(shù)實現(xiàn)基本數(shù)字輸入,然后利用循環(huán)左移函數(shù)實現(xiàn)輸入數(shù)字做一樣功能,并通過改變函數(shù)中相應(yīng)delay的值來消除鍵盤按鍵帶來的抖動。
3.7 實驗結(jié)果總結(jié)
按鍵值可以在LED上顯示出來。要求從右至左循環(huán)顯示八位數(shù)字,同時可以復(fù)位清零。達到實驗的效果。
3.8 心得體會
通過本次實驗,我了解了LED的顯示屏幕的數(shù)字的移位功能,這個功能不止可以用一個方法實現(xiàn),而循環(huán)左移是其中比較巧妙且省力的一種,在遇到類似情況的時候,可以優(yōu)先考慮能不能利用到文件中已經(jīng)存在的函數(shù),這樣可以不必自己編寫函數(shù),省時省力。是一種可靠的方法。4.實驗四
4.1 實驗名稱
電機轉(zhuǎn)動控制及中斷實驗
4.2 實驗?zāi)康?/p>
1.熟悉ARM本身自帶的六路即三對PWM,掌握相應(yīng)寄存器的配置。
2.編程實現(xiàn)ARM系統(tǒng)的PWM輸出和I/O輸出,前者用于控制直流電機,后者用于控制步進電機。
3.了解直流電機和步進電機的工作原理,學(xué)會用軟件的方法實現(xiàn)步進電機的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。
4.了解44B0處理器上中斷的應(yīng)用。5.學(xué)習(xí)在44B0處理器上中斷的應(yīng)用。
6.進一步熟悉平臺外圍硬件及其驅(qū)動程序的編寫。
4.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
4.4 實驗內(nèi)容及要求
1.學(xué)習(xí)步進電機和直流電機的工作原理,了解實現(xiàn)兩個電機轉(zhuǎn)動對于系統(tǒng)的軟件和硬件要求。學(xué)習(xí)ARM 知識,掌握 PWM 的生成方法,同時也要掌握 I/O的控制方法。
2.編程實現(xiàn)ARM芯片的一對PWM輸出用于控制直流電機的轉(zhuǎn)動,通過A/D旋鈕控制其轉(zhuǎn)動方式。
3.編程實現(xiàn)ARM的四路I/O通道,實現(xiàn)環(huán)形脈沖分配用于控制步進電機的轉(zhuǎn)動,通過A/D旋鈕控制步進電機的轉(zhuǎn)角。
4.通過鍵盤控制直流電機與步進電機的切換。5.設(shè)置并啟動定時器。
6.設(shè)置中斷,編寫定時器中斷服務(wù)程序,對中斷次數(shù)進行計數(shù)并在LED上顯示結(jié)果。
4.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。
2.進行直流電機初始化設(shè)置和代碼編寫。3.進行步進電機初始化設(shè)置和代碼編寫。
4.對Timer3編程,編寫定時器中斷服務(wù)程序,完成對中斷次數(shù)的計數(shù)。5.編寫LED計數(shù)顯示函數(shù),使LED能正確計數(shù)并顯示0-9999。6.編寫中斷初始化函數(shù)和中斷響應(yīng)函數(shù)。7.終端下載測試。
4.6 實驗過程與分析 1.對直流電機進行編程和測試,掌握轉(zhuǎn)速和旋轉(zhuǎn)方向的設(shè)定方法。
2.對步進電機進行編程和測試,掌握ARM的四路I/O通道,實現(xiàn)環(huán)形脈沖分配用于控制步進電機的轉(zhuǎn)動,通過A/D旋鈕控制步進電機的轉(zhuǎn)角。
3.對主函數(shù)進行編程,用鍵盤響應(yīng)直流電機與步進電機的切換控制。
4.掌握中斷相關(guān)語句的應(yīng)用,弄清定義的中斷向量、中斷向量號,編寫中斷響應(yīng)函數(shù),并完成中斷響應(yīng)控制。
4.7 實驗結(jié)果總結(jié)
實現(xiàn)了直流電機與步進電機的基本設(shè)置和控制,可以通過鍵盤控制電機之間的切換。完成了中斷的響應(yīng)和定時中斷。當(dāng)對其中一個旋鈕轉(zhuǎn)動時,就可以由直流電機轉(zhuǎn)換成步進電機的轉(zhuǎn)換,達到實驗的效果。
4.8 心得體會
通過本次實驗,我了解了直流電機和步進電機的工作原理,同時也知曉了電機間的轉(zhuǎn)換過程,了解其中的道理內(nèi)涵,熟悉了ARM自帶的A/D轉(zhuǎn)換器的工作原理及編程方法,了解了中斷的意義和實現(xiàn)方法,實現(xiàn)了簡單了中斷處理程序。同時我也收獲了很多關(guān)于ARM處理機的相關(guān)知識。
5.實驗五
5.1 實驗名稱
觸摸屏驅(qū)動實驗
5.2 實驗?zāi)康?/p>
1.了解觸摸屏的基本概念與原理。
2.理解觸摸屏與LCD的關(guān)系。3.編程實現(xiàn)對觸摸屏的控制。
4.熟悉用 ARM 內(nèi)置的 LCD控制器驅(qū)動 LCD。
5.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
5.4 實驗內(nèi)容及要求
1.了解觸摸屏基本原理,理解對觸摸屏進行輸出標(biāo)定、與LCD顯示器配合的過程。2.通過編程實現(xiàn)觸摸兩點自動在兩點間劃直線。3.通過編程實現(xiàn)在觸摸屏上動態(tài)畫出曲線。5.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。
2.在頭文件中定義宏和常量及驅(qū)動函數(shù)。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////觸摸屏動作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊 #define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 //觸摸屏按下 #define TCHSCR_ACTION_UP 4 //觸摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //觸摸屏移動
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采樣x 軸電壓值,數(shù)據(jù)為12 位,參考電壓輸入模式為差分模式,允許省電模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//觸摸屏返回電壓值范圍 #defineADS7843_CMD_X 3.校準觸摸屏坐標(biāo),進行坐標(biāo)轉(zhuǎn)換。
4.實現(xiàn)觸屏取點并顯示功能。
將觸摸動作及觸摸點坐標(biāo)在超級終端上顯示出來。5.實現(xiàn)兩點間自動劃線功能。6.實現(xiàn)觸摸屏動態(tài)劃線功能。
可以使用TchScr_GetScrXY()函數(shù)(第三個參數(shù)為0)來獲得液晶屏的x、y 方向的電壓
范圍,分別點觸摸屏有效面積的左上角和右下角,得到下列參數(shù):
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此數(shù)值僅供參考,請以實際校對為準
5.6 實驗過程與分析 1.在定義觸屏響應(yīng)功能的函數(shù)中對點擊觸屏進行響應(yīng)函數(shù)的修改,在其中添加修改點顏色的函數(shù),修改得到的觸摸點的顏色,并顯示在LCD上。
2.獲取第一個點坐標(biāo)并儲存,獲取第二個點坐標(biāo)并儲存,由編寫的劃線函數(shù)取得儲存的兩點間直線上所有點的坐標(biāo),并對其改變顏色,顯示在LCD上,即完成劃直線功能。
3.將劃線函數(shù)應(yīng)用到響應(yīng)觸屏移動消息的函數(shù)下,即可對連續(xù)獲得的觸摸坐標(biāo)進行連續(xù)的畫短直線,連接成曲線,完成動態(tài)劃線功能。
5.7 實驗結(jié)果總結(jié)
了解了觸摸屏響應(yīng)動作消息的函數(shù)的工作原理,通過修改實現(xiàn)了觸摸屏響應(yīng)不同動作進行畫點、劃線、動態(tài)劃線的功能。驗證觸摸屏的靈敏度的實驗。
5.8 心得體會
通過這次實驗,我基本掌握了通過編程驅(qū)動觸摸屏以及觸摸屏響應(yīng)時間,實現(xiàn)了觸摸屏對不同動作消息的響應(yīng)。同時也知曉了在觸摸屏上的描點畫線的實現(xiàn),但是由于不知名的原因,描點畫線的誤差較大,位置偏差較大,同時觸摸屏有時會不靈敏,出現(xiàn)時好時壞的現(xiàn)象,但是由于我們的辛勤鉆研,最終克服了這個困難,實現(xiàn)了最后的觸摸屏的實現(xiàn)。
6.實驗六
6.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的裁剪
6.2 實驗?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現(xiàn)方法。3.學(xué)習(xí)如何根據(jù)具體情況對UCOS-Ⅱ操作系統(tǒng)進行裁剪。
4.通過對UCOS-Ⅱ配置文件(OS_CFG.H)中相關(guān)的配置常量進行設(shè)置,實現(xiàn)對UCOS-Ⅱ的裁剪。
6.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
6.4 實驗內(nèi)容及要求
對UCOS-Ⅱ內(nèi)核進行裁剪并移植到ARM7微處理器上。
6.5 實驗設(shè)計與實驗步驟 1.按照要求,載入STARTUP目錄下文件,完成系統(tǒng)初始化、環(huán)境配置。2.載入UCOS-Ⅱ的全部源碼,與處理器架構(gòu)相關(guān)的文件位于arch目錄下。3.在os_cpu.h中編寫與處理器和編譯器相關(guān)的代碼。
4.編寫os_cpu_c.c等6個與操作系統(tǒng)相關(guān)的函數(shù)。5.編寫os_cpu.asm等4個與處理器相關(guān)的函數(shù)。
6.6 實驗過程與分析
按照實驗步驟進行,得到了需要的系統(tǒng)。
6.7 實驗結(jié)果總結(jié)
按照要求進行了裁剪,得到了滿足需要又緊湊的應(yīng)用軟件系統(tǒng)。
6.8 心得體會
通過本次實驗,我了解了UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu),掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現(xiàn)方法,學(xué)會了如何根據(jù)具體情況對UCOS-Ⅱ操作系統(tǒng)進行裁剪。
7.實驗七
7.1 實驗名稱
UCOS-Ⅱ在ARM微處理器上的移植和編譯
7.2 實驗?zāi)康?/p>
1.了解UCOS-Ⅱ內(nèi)核的主要結(jié)構(gòu)。
2.掌握將UCOS-Ⅱ內(nèi)核移植到ARM7處理器上的基本方法。
7.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
7.4 實驗內(nèi)容及要求
1.將UCOS-Ⅱ內(nèi)核進行移植到ARM7微處理器上。
2.編寫兩個簡單任務(wù),在超級終端上觀察兩個任務(wù)的切換。
7.5 實驗設(shè)計與實驗步驟
1.該實驗的文件分為兩類,其一是 STARTUP 目錄下的系統(tǒng)初始化、配置等文件,其二是 UCOS-Ⅱ的全部源碼,arch 目錄下的 3 個文件是和處理器架構(gòu)相關(guān)的。
2.設(shè)置 os_cpu.h 中與處理器和編譯器相關(guān)的代碼。
3.用 C 語言編寫 6 個操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)。4.用匯編語言編寫 4 個與處理器相關(guān)的函數(shù)(OS_CPU.ASM)。5.編寫一個簡單的多任務(wù)程序來測試一下移植是否成功。6.編譯并下載移植后的 UCOS-Ⅱ。
7.6 實驗過程與分析
1.按照實驗步驟進行,將μC/OS-II 內(nèi)核移植到了ARM7 微處理器上。2編寫了兩個簡單任務(wù),在超級終端上觀察兩個任務(wù)的切換。
7.7 實驗結(jié)果總結(jié)
將μC/OS-II 內(nèi)核順利移植到了ARM7 微處理器上。
7.8 心得體會
通過本次實驗,使我更加了解了μC/OS-II 內(nèi)核的主要結(jié)構(gòu),掌握了ARM的C語言和匯編語言的編程方法,了解了ARM7處理器結(jié)構(gòu),掌握了將μC/OS-II 內(nèi)核移植到ARM 7 處理器上的基本原理與嵌入式編程實現(xiàn)方法。
8.實驗八
8.1 實驗名稱
綜合實驗
8.2 實驗?zāi)康?/p>
對前七次實驗進行總結(jié),應(yīng)用之前所學(xué)的知識,將前幾次實驗內(nèi)容結(jié)合起來,完成鍵盤,LED,觸摸屏,直流電機,步進電機各種功能的組合。實現(xiàn)一個較為全面的功能結(jié)構(gòu)。
8.3 實驗環(huán)境
硬件:ARM 嵌入式開發(fā)平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。
軟件:PC 機操作系統(tǒng)win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發(fā) 環(huán)境、仿真器驅(qū)動程序、超級終端通訊程序。
8.4 實驗內(nèi)容及要求
對前七次實驗進行總結(jié),應(yīng)用之前所學(xué)的知識,完成自擬的嵌入式系統(tǒng),要求綜合前期基礎(chǔ)實驗的各種功能。
8.5 實驗設(shè)計與實驗步驟
1.添加并打開工程。2.進行LCD設(shè)計,在LCD顯示屏輸出文本。
3.進行LED及鍵盤設(shè)計,完成LED輸出顯示功能和鍵盤輸入功能。4.進行電機控制設(shè)計,完成鍵盤控制電機轉(zhuǎn)動功能。5.進行中斷設(shè)計,完成定時中斷功能。
6.進行觸摸屏設(shè)計,完成觸摸屏感應(yīng)和劃線功能。7.進行裁剪和移植功能設(shè)計和完成。
8.6 實驗過程與分析
1.完成LCD顯示功能,在LCD顯示屏上輸出文本:“Hello World!”。2.進入界面觸屏控制選擇功能,實現(xiàn)觸屏選擇功能。
3.自定義四種種功能,第一為電機控制,從鍵盤讀取命令,并將功能編號顯示在LED上,LED顯示的是計數(shù)的數(shù)據(jù),同時旋轉(zhuǎn)按鈕完成電機轉(zhuǎn)速的控制選擇。
4.第三種功能為劃線,功能編號顯示在LED高四位上,同時LCD屏幕清屏,為劃線功能做準備,可以實現(xiàn)劃線功能。
5.第四種功能為定時中斷,當(dāng)由鍵盤控制時,LED顯示數(shù)值清零,實現(xiàn)了中斷。6.實現(xiàn)裁剪與移植功能。
8.7 實驗結(jié)果總結(jié)
完成了各種基本功能,并通過自擬的系統(tǒng)將各種功能整合起來,完成了一個小的嵌入式系統(tǒng),對前七次的功能有了更深入的了解。通過LED的計數(shù),當(dāng)在計數(shù)值在前30秒之內(nèi),由鍵盤控制LED的數(shù)值及顯示,按鍵盤上的某一個按鍵,實現(xiàn)對LED上的數(shù)值清零,后30秒由觸摸屏控制清零,并且在前30秒之內(nèi),旋轉(zhuǎn)按鈕,實現(xiàn)對直流電機的運轉(zhuǎn),并且到步進電機的轉(zhuǎn)換。
8.8 心得體會
通過這次實驗,我更加深刻地掌握了前幾次實驗中的基本功能的實現(xiàn)方法,并且把幾種功能聯(lián)合在一起,實現(xiàn)一些功能,把LED 顯示屏,LCD觸摸屏,鍵盤,直流電機,步進電機等等設(shè)備聯(lián)合在一起,對該實驗有一定的幫助與提高,而我和我的隊友也對嵌入式系統(tǒng)有了更深入的了解,在此期間,也學(xué)習(xí)了關(guān)于ARM處理器的開發(fā)與實踐,了解了關(guān)于手機的嵌入式設(shè)備的產(chǎn)生過程,我也深深的對此充滿了興趣,對未來的嵌入式課程設(shè)計奠定了深厚的基礎(chǔ),可是令我遺憾的是,我和隊員的水平所限,沒有完成中斷優(yōu)先級的控制。本來想完成更多的功能,可是最后由于時間緊迫,也有一些其他的事情來分神分心,所以就只能完成這些,但是在未來的幾周內(nèi),嵌入式課程設(shè)計也給了我們很大的空間去做未完成的事情。我相信我們會做的更加完美,功能更強大,用于未來的生活中去實踐。
第五篇:《嵌入式系統(tǒng)設(shè)計》教學(xué)大綱
《嵌入式系統(tǒng)設(shè)計》課程教學(xué)大綱
嵌入式系統(tǒng)設(shè)計(Design of Embedded Systems)
一、課程教學(xué)目的和基本要求
教學(xué)目的:
嵌入式系統(tǒng)技術(shù)已被廣泛地應(yīng)用于工業(yè)控制系統(tǒng)、信息家電、通信設(shè)備、醫(yī)療儀器、智能儀器儀表等眾多領(lǐng)域。如手機、PDA、MP3、手持設(shè)備、智能電話、機頂盒等,可以說嵌入式系統(tǒng)無處不在。本課程講述當(dāng)前主流的嵌入式處理器—ARM的微處理器和實時操作系統(tǒng)μC/OS,介紹嵌入式系統(tǒng)的基本原理和應(yīng)用及設(shè)計方法。通過本課程的學(xué)習(xí),著重培養(yǎng)學(xué)生的實際動手能力,使學(xué)生掌握ARM的系統(tǒng)結(jié)構(gòu)、指令系統(tǒng)、程序設(shè)計方法、系統(tǒng)擴展方法、應(yīng)用及開發(fā)技術(shù)等。使學(xué)生在工作中具有利用嵌入式系統(tǒng)開發(fā)產(chǎn)品和解決實際問題的基本能力。
基本要求:
1、掌握嵌入式系統(tǒng)技術(shù)的基本原理。
2、了解并掌握ARM的系統(tǒng)結(jié)構(gòu)、指令系統(tǒng)、程序設(shè)計方法、系統(tǒng)擴展方法、應(yīng)用及開發(fā)技術(shù)等。
3、比較熟練地用ADS進行ARM實驗箱的編程及調(diào)試。
4、了解并掌握實時操作系統(tǒng)μC/OS,并學(xué)會用μC/OS開發(fā)小型應(yīng)用系統(tǒng)。
二、先修課程及本課程總學(xué)時
先修課程:C程序設(shè)計語言、單片機原理 本課程總學(xué)時:36
三、課程章節(jié)及各章節(jié)學(xué)時安排
第一章 嵌入式系統(tǒng)概述(2學(xué)時)
第二章 嵌入式系統(tǒng)硬件基礎(chǔ)(2學(xué)時)
第三章 設(shè)計方法及ADS集成開發(fā)環(huán)境(4學(xué)時)
第一節(jié) 嵌入式系統(tǒng)的設(shè)計方法(2學(xué)時)第二節(jié) ADS集成開發(fā)環(huán)境(2學(xué)時)第四章 ARM7體系結(jié)構(gòu)(4學(xué)時)
第一節(jié)ARM7體系結(jié)構(gòu)介紹(2學(xué)時)第二節(jié)ARM7TDMI(-S)指令集簡介。(2學(xué)時)第五章 ARM指令集(8學(xué)時)
第一節(jié) ARM處理器尋址方式。(2學(xué)時)第二節(jié)ARM指令集。(2學(xué)時)第三節(jié)ARM匯編程序設(shè)計。(2學(xué)時)第四節(jié)C與匯編混合編程。(2學(xué)時)第六章 硬件結(jié)構(gòu)與功能(12學(xué)時)第一節(jié) LPC2106/2105/2104結(jié)構(gòu)(2學(xué)時)第二節(jié) GPIO及引腳連接模塊。(2學(xué)時)
第三節(jié) UART0和UART1、I2C接口、SPI接口。(2學(xué)時)第四節(jié) 定時器0和定時器1。(2學(xué)時)第五節(jié) 脈寬調(diào)制器(PWM)。(2學(xué)時)
第六節(jié) 看門狗及Flash存儲器系統(tǒng)和編程。(2學(xué)時)第七章 μC/0S-II程序設(shè)計(4學(xué)時)
第一節(jié) μC/0S-II簡介及移植(2學(xué)時)第二節(jié) 移植μC/0S-II。(2學(xué)時)
四、課程主要內(nèi)容
第一章 嵌入式系統(tǒng)概述(2學(xué)時)
1、嵌入式系統(tǒng)簡介(包括什么是嵌入式系統(tǒng),嵌入式系統(tǒng)的特點,嵌入式系統(tǒng)的分類)。
2、嵌入式系統(tǒng)的應(yīng)用領(lǐng)域。
3、嵌入式系統(tǒng)的現(xiàn)狀和發(fā)展趨勢。
4、嵌入式微處理器和嵌入式操作系統(tǒng)。
5、嵌入式系統(tǒng)中的一些重要概念。難點:什么是嵌入式系統(tǒng)。
第二章 嵌入式系統(tǒng)硬件基礎(chǔ)(2學(xué)時)
1、嵌入式系統(tǒng)的總體結(jié)構(gòu)。
2、與嵌入式系統(tǒng)相關(guān)的硬件知識。難點:總體結(jié)構(gòu)。
第三章 設(shè)計方法及ADS集成開發(fā)環(huán)境(4學(xué)時)第一節(jié) 嵌入式系統(tǒng)的設(shè)計方法
包括嵌入式系統(tǒng)的設(shè)計流程,嵌入式系統(tǒng)的一般設(shè)計方法,嵌入式系統(tǒng)的硬件/軟件協(xié)同設(shè)計技術(shù)。第二節(jié) ADS集成開發(fā)環(huán)境
1、ADS 1.2 集成開發(fā)環(huán)境的組成
2、工程的編輯
3、工程的調(diào)試
4、仿真器的安裝與應(yīng)用 難點:調(diào)試、仿真器。
第四章 ARM7體系結(jié)構(gòu)(4學(xué)時)第一節(jié)ARM7體系結(jié)構(gòu)介紹
1、處理器模式。
2、內(nèi)部寄存器。
3、程序狀態(tài)寄存器。
4、異常。
第二節(jié)ARM7TDMI(-S)指令集簡介。難點:異常。
第五章 ARM指令集(8學(xué)時)第一節(jié) ARM處理器尋址方式。第二節(jié)ARM指令集。
第三節(jié)ARM匯編程序設(shè)計。第四節(jié)C與匯編混合編程。難點:ARM匯編程序設(shè)計。
第六章 硬件結(jié)構(gòu)與功能(12學(xué)時)第一節(jié) LPC2106/2105/2104結(jié)構(gòu)
1、存儲器尋址。
2、系統(tǒng)控制模塊。
3、存儲器加速模塊。
4、向量中斷控制器。
第二節(jié) GPIO及引腳連接模塊。
第三節(jié) UART0和UART1、I2C接口、SPI接口。第四節(jié) 定時器0和定時器1。第五節(jié) 脈寬調(diào)制器(PWM)。
第六節(jié) 看門狗及Flash存儲器系統(tǒng)和編程。
難點:存儲器重新映射,編程實現(xiàn)功能部件的初始化和控制。本章實驗:LPC2106/2105/2104功能部件基礎(chǔ)實驗。
第七章 μC/0S-II程序設(shè)計(4學(xué)時)第一節(jié) μC/0S-II簡介及移植
1、移植規(guī)則。
2、編寫LPC2106/2105/2104的啟動代碼。第二節(jié) 移植μC/0S-II。難點:移植μC/0S-II。本章實驗:學(xué)習(xí)移植μC/0S-II。
五、教材及主要參考書
教材:
《嵌入式系統(tǒng)設(shè)計與開發(fā)》,馬文華,科學(xué)出版社,2006年
主要參考書:
[1] 田苗苗.嵌入式控制系統(tǒng).北京航空航天大學(xué)出版社,2002年 [2] 呂 駿 譯.嵌入式系統(tǒng)設(shè)計.電子工業(yè)出版社,2002年
[3] 周立功等.ARM微控制器基礎(chǔ)與實戰(zhàn).北京航空航天大學(xué)出版社,2003年
[4] 李駒光等.ARM應(yīng)用系統(tǒng)開發(fā)祥解.清華大學(xué)出版社,2003年
[5] 劭貝貝譯.uCOS-II-源代碼公開的實時嵌入式操作系統(tǒng).中國電力出版社,2001年 [6] 田苗苗.嵌入式系統(tǒng)設(shè)計與實例開發(fā).清華大學(xué)出版社,2002年 [7] 袁勤勇等譯.嵌入式系統(tǒng)構(gòu)件.機械工業(yè)出版社,2002年 [8] 田苗苗.《實用嵌入式系統(tǒng)設(shè)計與開發(fā)—基于ARM微處理器與μCOS-II實時操作系統(tǒng)》(第二版),清華大學(xué)出版社,2003.9 [9] 邵貝貝譯.《源代碼公開的實時嵌入式操作系統(tǒng)——μCOS-II》,北京航空航天大學(xué)出版社,2003年
六、其他需要說明的情況
1.采用多媒體教學(xué)。
2.實驗課單列,每周2學(xué)時。
3.每周作業(yè)量2~3小時,主要針對基本概念、開發(fā)環(huán)境的操作和編程。
七、成績評定
1.理論考核
占60% 2.實踐考核
占40%(其中包括:實驗、作業(yè)、課堂提問、學(xué)生自行設(shè)計制作的作品)。