嵌入式期末重点考试宝典_第1页
嵌入式期末重点考试宝典_第2页
嵌入式期末重点考试宝典_第3页
嵌入式期末重点考试宝典_第4页
嵌入式期末重点考试宝典_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上第1章:嵌入式系统定义:以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统嵌特点:实时性 、可移植、内核小型化、可裁剪。第2章:ARM920T核也称为ARM920T处理器、cpu、内核,或直接称为ARM920T其中ARM9TDMI处理器核使用了五级流水线,五级流水线由取指、译码、执行、存储(数据缓冲)和回写组成;ARM920T微处理器两种指令集,32位ARM和16位Thumb指令集。ARM处理器两种(工作)状态:ARM状态,32位,这种状态下执行的是字方式的ARM指令;Thumb状态:16位,这种

2、状态下执行半字方式的ARM指令切换方法进入Thumb状态:1.当操作数寄存器Rm的状态位bit0为1时,执行BX Rm指令进 入 Thumb状态(指令详细介绍见后面)。2.所有的异常都是ARM状态下进行,如果处理器在Thumb状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort和SWI)返回时,自动切换到Thumb状态进入ARM状态:当操作数寄存器Rm的状态位bit0为0时,执行BX Rm指令进入ARM状态。如果处理器进行异常处理(IRQ,FIQ,Undef,Abort和SWI),在此情况下,把PC放入异常模式链接寄存器LR中,从异常向量地址开始执行也可以进入ARM状态程序:AR

3、M处理器共支持所列的7种处理器模式见下表:ARM处理器可以将存储器中的字以下列格式存储:(自己去理解加运用)大端格式(Big-endian)小端格式(Little-endian)“小端”格式:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。“大端”格式:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址ARM处理器能方便的配置为其中任何一种存储器方式,但它们的缺省设置为小端格式。我们一般采用“小端”格式,即较高的有效字节存放在较高存储器地址寄存器:37个寄存器 = 31个通用寄存器(32位)+6个状态寄存器(32位);寄存器R13通常用做:堆

4、栈指针SP;当退出异常处理程序时,将保存在R13所指的堆栈中的寄存器值弹出,这样就使异常处理程序不会破坏被其中断程序的运行现场寄存器R14用作:子程序链接寄存器,也称为LR,当一条分支并且连接指令(BL)被执行时,寄存器收到的一个拷贝;R14还用于:异常处理的返回寄存器R15被用作:程序计数器,也称为PC。Arm状态下:r15的bit【1:0】=00,bit【31:2】=PC(程序计数值);thumb状态下:r15的bit【0】=0,bit【31:1】=PC(程序计数值)程序状态寄存器的作用:保存最近执行过的ALU操作的信息;控制允许或禁止中断;设置处理器操作模式异常的而进入和返回(理解):

5、R14_<exception_mode>=return link SPSR_<exception_mode>=CPSR CPSR4:0=exception mode number CPSR5=0 /*当运行于ARM状态时*/ CPSR6=1 /*禁止新的IRQ中断*/if <exception-mode>=Reset or FIQ then CPSR7=1 /*当Reset 或FIQ异常中断时,禁止新 的FIQ中断* PC=exception vector address 异常向量的地址要记住第三、四章:4.3-4.11程序原题(弄懂)例题4.3AREA a

6、ddsubrout, CODE, READONLY ; 命名代码段 ENTRY ; 标记执行的第一条指令 start MOV r0, #101 ;建立参数 MOV r1, #121 mov r2,#43 mov r3,#55 bl addfun ;调用子程序stop MOV r0, #0x18 ; angel_SWIreason_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SWI 0x ; 通过软件中断指令返回addfun add r0,r0,r1 子程序代码段 add r0,r0,r2 add r0,r0,r3

7、 mov pc,lr 从子程序返回 END ; 标记文件结束例题4.5AREA LDRlabel, CODE, READONLY ENTRY ; 标记第一条执行的指令start BL func1 ; 分支到第1个子程序 BL func2 ; 分支到第2个子程序stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x20026 ; 设置常数 SWI 0x ; 软件中断func1 LDR r0, =53 ; 产生指令mov R0,#53 LDR r1, =0x ;产生指令LDR R1,【pc,#offset to literal Pool 1】 LDR r2, =0xffffff

8、00 ; 产生指令MVN R2,#0xff MOV pc,lr ; Return LTORG ;文字池1含有文字0x func2 LDR r3, =0x; 产生指令LDR R3,【pc,#offset to literal Pool 1】 LDR r4, =0x ; 如果这条伪指令不被注释,会发生错误,原因是文字池2出了范围 MOV pc, lr ; Return ; LTORGDarea SPACE 8500 ;从当前地址开始清零 ; END 文字池2为空 4.6AREA adrlabel, CODE, READONLY ENTRY ; 标记第一条执行的指令Start BL func ; 分

9、支到子程序 align 16stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SWI 0x ; 软件中断 LTORG ; 建立文字池func ADR r0, Start ; 产生 SUB r0, PC, #offset to Start 4.7 ADR r1, DataArea ; 产生ADD r1, PC, #offset to DataArea ; ADR r2, DataArea+4300 ; 失效,偏移量超出范围,不能在ADD指令中由operand2表示 ADRL r2, DataArea+

10、4300 ;产生ADD r2, PC, #offset1ADD r2, r2, #offset2 MOV pc, lr ;返回DataArea % 8000 ; 从当前位置开始,对存储器8000字节区域清零 END4.7(重点)AREA Jump, CODE, READONLY ; 命名代码模块 CODE32 ; num EQU 2 ; 跳转表中的项数 ENTRY ; 标记第一条执行的指令start MOV r0, #01 ; 设置3个参数 MOV r1, #32 MOV r2, #24 BL arithfunc ; 调用函数stop MOV r0, #0x18 ; angel_SWIreas

11、on_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SWI 0x ; ARM semihosting SWIarithfunc ; 函数标号 CMP r0, #num ; 比较,看做无符号整数 BHS DoAdd ;如果r0高于或等于2,那么转操作2 ADR r3, JumpTable ; 装入跳转表地址 LDR pc, r3,r0,LSL#2 ; 跳转到适当的程序JumpTable DCD DoAdd DCD DoSubDoAdd ADD r0, r1, r2 ; 高于1,操作0 MOV pc, lr ; 返回D

12、oSub SUB r0, r1, r2 ; 操作1 MOV pc,lr ; 返回 END ; 标记文件结束例题4.5AREA LDRlabel, CODE, READONLY ENTRY ; 标记第一条执行的指令start BL func1 ; 分支到第1个子程序 BL func2 ; 分支到第2个子程序stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x20026 ; 设置常数 SWI 0x ; 软件中断func1 LDR r0, =53 ; 产生指令mov R0,#53 LDR r1, =0x ;产生指令LDR R1,【pc,#offset to literal Po

13、ol 1】 LDR r2, =0xffffff00 ; 产生指令MVN R2,#0xff MOV pc,lr ; Return LTORG ;文字池1含有文字0x func2 LDR r3, =0x; 产生指令LDR R3,【pc,#offset to literal Pool 1】 LDR r4, =0x ; 如果这条伪指令不被注释,会发生错误,原因是文字池2出了范围 MOV pc, lr ; Return ; LTORGDarea SPACE 8500 ;从当前地址开始清零 ; END 文字池2为空 4.8AREA LDRlabel, CODE, READONLY ENTRY ; 标记第一

14、条执行的指令run1 BL sub1 ; 分支到第1个子程序 BL sub2 ; 分支到第2个子程序stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x20026 ; 设置常数 SWI 0x ; 软件中断sub1 LDR r0, =run1 ; 产生 LDR R0,PC, #offset to Litpool 1指令 LDR r1, =Darea +12 ; 产生 LDR R1,PC, #offset to Litpool 1指令 LDR r2, =Darea + 6000 ; 产生 LDR R2, PC, #offset to Litpool 1指令 MOV pc,lr

15、 ; 返回 LTORG ; (分配4个字?)sub2 LDR r3, =Darea +6000 ; 产生 LDR r3, PC, #offset to Litpool 1指令 ; (与前面的文字池共享) LDR r4, =Darea +6008 ; 文字池2出了范围,如果不做注释,将产生错误 MOV pc, lr ; 返回 LTORG ; (分配2个字?)Darea SPACE 8500 ; 从当前位置开始,对存储器8500字节区域清零 END ; 文字池2超出了上述LDR指令的范围例4-9 :字符串拷贝(P141) AREA StrCopy, CODE, READONLY ENTRY ; 标

16、记第一条执行的指令、程序的入口start LDR r1, =srcstr ; 第1个串指针 LDR r0, =dststr ; 第2个串指针 BL strcopy ; 调用子程序拷贝stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x20026 ; 设置常数 SWI 0x ; 软件中断 strcopy LDRB r2, r1,#1 ;装入字节并且更新地址 STRB r2, r0,#1 ; 存储字节并且更新地址 CMP r2, #0 ; 检测为0则终止 BNE strcopy ; 如不为零则继续 MOV pc,lr ; 返回 AREA Strings, DATA, READ

17、WRITEsrcstr DCB "First string - source",0dststr DCB "Second string - destination",0 END例4-10:数据块的复制AREA Word, CODE, READONLY ; 代码块名字num EQU 20 ;被拷贝的字数 ENTRY ; 标记调用的第一条指令start LDR r0, =src ; r0 = 源快指针 LDR r1, =dst ; r1 = 目地块指针 MOV r2, #num ; r2 =拷贝字数wordcopy LDR r3, r0, #4 ; 从源块装入

18、1个字 STR r3, r1, #4 ;保存子到目的块 SUBS r2, r2, #1 ; 计数器减1 BNE wordcopy ; r2部位0,继续拷贝stop MOV r0, #0x18设置常数 LDR r1, =0x20026设置常数 SWI 0x软件中断 AREA BlockData, DATA, READWRITEsrc DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END例4-11:数据块的复制用LDM和STM指令作块拷贝AREA Block, C

19、ODE, READONLY ; 代码块名字num EQU 20 ; 拷贝的字数 ENTRY ; 标记调用的第一条指令start LDR r0, =src ; r0 = 源快指针 LDR r1, =dst ; r1 =目地块指针 MOV r2, #num ; r2 =拷贝字数 MOV sp, #0x400 ; 设置堆栈指针blockcopy MOVS r3,r2, LSR #3 ; 求8个字的倍数 BEQ copywords ; 少于8个字传送 STMFD sp!, r4-r11 ; 保存部分工作寄存器octcopy LDMIA r0!, r4-r11 ; 从源装入8个字 STMIA r1!,

20、r4-r11 ; 存到目的块 SUBS r3, r3, #1 ; 计数器减1(拷贝8个字) BNE octcopy ; r3不为0,继续拷贝 LDMFD sp!, r4-r11 ; 恢复原来的值copywords ANDS r2, r2, #7 ; 零碎的字(少于8)拷贝 BEQ stop ; 没有字需要拷贝wordcopy LDR r3, r0, #4 ; 从源装入字 STR r3, r1, #4 ; 存到目的块 SUBS r2, r2, #1 ; 计数器减1 BNE wordcopy ; r2不为0,继续拷贝stop MOV r0, #0x18 ; 设置常数 LDR r1, =0x2002

21、6 ; 设置常数 SWI 0x ; 软件中断 AREA BlockData, DATA, READWRITEsrc DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END 第五章一S3C2410A存储器可以分8个banks。每个banks容量为128MB,各个banks用nGCS0nGCS7信号作为选体信号:全部可寻址空间为1GB二、简述OM【1:0】输入信号不同组合时的含义:表示在Reset期间,连接到S3C2410A的操作模式输入引脚OM1:0逻辑电平的4种方式:00:使用Nand Flash ; 01:bank0数据总线16位;10:bank0数据总线32位;11:测试模式三、SDRAM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论