arm复习

1. 什么是嵌入式系统?其特点有些什么?

答: 嵌入式系统是“以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。”   

特点:1)是专用的计算机系统,用于特定的任务;

2)资源较少,可以裁减;

3) 功耗低,体积小,集成度高,成本低

4)使用实时操作系统;

5) 可靠性要求更高,具有系统测试和可靠性评估体系;

6)运行环境差异大

7)大部分程序固化在 ROM中; 

8) 较长的生命周期;

9)嵌入式微处理器通常包含专用调试电路 

2. 嵌入式系统的BooTLoader的功能是什么?

答:BootLoader是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序代码。通过这段程序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境。(对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,但在系统启动时都必须运行BootLoader,为系统运行准备好软硬件环境。)

3. 目前嵌入式操作系统有哪些?    

答:1µC/OS-II 嵌入式操作系统内核;2VxWorks嵌入式实时操作系统;3WinCE操作系统;4Linux操作系统 ;5Symbian操作系统

4. 构造嵌入式开发环境有哪几种形式?  

答:1)交叉开发环境 ;2)软件模拟环境 ;3)评估电路板

5. 嵌入式系统开发的基本流程?

    答:1)系统定义与需求分析;

2)系统设计方案的初步确立;

3)初步设计方案性价比评估与方案评审论证;

4)完善初步方案、初步方案实施;

5)软硬件集成测试;

6)系统功能性能测试及可靠性测试。

6. 什么是可编程片上系统?

    答:用可编程逻辑技术把整个系统放到一块硅片上,称作可编程片上系统SOPC.它是一种特殊的嵌入式系统,首先它是SOC,即由单个芯片实现整个系统的主要逻辑功能,具有一般SOC基本属性;其次,它又具备软硬件在系统可编程的功能,是可编程系统,具有可裁剪、可扩充、可升级等灵活的设计方式。

7. 有时要使用Thumb技术的原因

答:(Thumb指令集是把32位的ARM指令集的一个子集重新编码后形成的一个特殊的16位指令集。)在性能和代码大小之间取得平衡,在需要较低的存储代码时采用Thumb指令系统用Thumb指令编写最小代码量的程序(能够很好的解决代码长度的问题),却取得以ARM代码执行的最好性能,可以带来低功耗,小体积,低成本。

8. ARM处理器的工作模式有哪几种?

    答:1)正常用户模式(usr);

2)快速中断模式(fiq);

3)普通中断模式(irq);

4)操作系统保护模式(svc)或 管理模式 ;

5)数据访问中止模式(abt);

6)处理未定义指令的未定义模式(und);

7)运行特权级的操作系统任务的系统模式(sys)。

9. 寄存器R13R14R15的专用功能各是什么?     

答:1)寄存器R13保存堆栈指针SP2)寄存器R14用作子程序链接寄存器,也称为LR ,用以保存返回地址;3R15PC)用作程序计数器。

10. 寄存器CPSRSPSR的功能各是什么?

答:1CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。所有处理器模式下都可以访问当前的程序状态寄存器CPSR

2)在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存 

CPSR的状态,以便异常返回后恢复异常发生时的工作状态。

11. ARM的异常有哪几种,各进入何种工作模式?他们退出各采用什么指令?

答:1)复位(Reset)异常(管理模式);

2)未定义指令(undefined instruction)异常(未定义模式);

3)软件中断(SWI)异常(管理模式);

4)指令预取中止(Prefech Abort)异常(中止模式);

5)数据访问中止(Data Abort)(中止模式);

6)快速中断请求(FIQ)(FIQ模式);

7)外部中断请求(IRQ)(IRQ模式)。

异常返回指令:1SWI,未定义的返回:MOVS PC,R142IRQ,FIQ,预取中止的返回:SUBS PC,R14,#43)数据中止返回并重新存取:SUBS PC,R14,#8

        异常中断的优先级:复位(最高优先级)--> 数据异常中止--->FIQ --> IRQ--->预取指异常中止--->SWI---->未定义指令(包括缺协处理器)。

12. 什么是小端和大端存储器组织?

答:1)小端存储器组织是较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址(同同小)。 2) 大端存储器组织是较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址(正反大)。

13. 什么是数据的边界对齐?  

答:默认情况下,ADS编译器使用的是数据类型的自然边界对其方式。数据的自然对其方式是指:如果该数据类型是n个字节的,那么该数据类型就按n字节对齐。

14. ARM核现在有哪几种?   

答:ARM7、 ARM9ARM9E ARM10E,SecurCore ARM11

15. ARM的寻址方式有哪些?各写一条说明。

答:1立即寻址 (1) ADD  R0R0,#1 /*R0R01*/  

2ADD R0R0,#0x3f /*R0R00x3f*/

2寄存器寻址(ADD R0R1R2 /*R0R1R2*/);

3寄存器间接寻址 (1)、LDR  R0[R1] /*R0[R1]*/

2STR  R0[R1] /*[R1]R0*/

4基址加偏址寻址(1)、LDR R0[R1,#4]R0[R14]

2)、LDR R0[R1,#4]!;R0[R14]R1R14

3)、LDR R0[R1] ,#4R0[R1]R1R14

       5堆栈寻址(1)、 STMFD SP! {R1-R7,LR}

2)、LDMFD SP! {R1-R7,LR}

6块拷贝寻址(1)、LDMIA  R0!, {R2-R9};(2)、STMIA  R1,{R2,R9}

 7相对寻址

16. 在ARM的立即寻址方式下其立即数如何在指令编码中表示?

    答:在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环右移偶数位而间接得到。其中循环右移的位数由一个4位二进制的两倍表示,如果立即数记作<immediate>8位常数记作immed_84位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环右移偶数位得到。因此有效立即数immediate可以表示成:<immediate>=immed_8循环右移(2×rotate_imm

17. 指令ADRADRLLDRNOP是如何处理地址值读入到寄存器中的?

     答:ADR是将基于PC或者寄存器的地址值读入到寄存器的,ADR伪指令通常被替换成一条ADD指令或SUB指令来实现该ADR指令的功能。而ADRL伪指令与ADR指令的最大不同之处是,它可以读取更大范围内的地址,而且被编译器替换成2条数据处理指令。LDR将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。NOP在汇编时将被替换成ARM中的空操作。

18. 指令LDR R1,=0xFFF是如何将立即数0xfff读入到R1的?

答:由于需要读取的寄存器的数据超过了MOVMVN指令可操作的范围,编译器将该常数放在数据缓冲区中,同时用一条基于PCLDR指令读取该常数。

LDR R1[PCoffset_to_LPOOL].

............

LTORG ;声明数据缓冲池     

LPOOL DCD OxFFF; OxFFF放在数据缓冲池中。

19. 如何在c语言程序中内嵌汇编?     

答:内嵌的汇编指令包括大部分的ARM指令和Thumb指令,但是不能直接引用C的变量定义,数据交换必须通过ATPCS进行。嵌入式汇编在形式上表现为独立定义的函数体。 

20. 如何在汇编语言程序访问C语言的全局变量?

答:汇编程序可以通过地址间接访问在C语言程序中声明的全局变量。通过使用IMPORT关键词引人全局变量,并利用LDRSTR指令根据全局变量的地址可以访问它们。

对于不同类型的变量,需要采用不同选项的LDRSTR指令,如下所示:

1unsigned  char—— LDRB/STRB

2unsigned  short——LDRH/STRH

3unsigned  int——LDR/STR

4char ——LDRSB/STRSB

5Short——LDRSH/STRSH 

21. 在C语言程序如何调用汇编语言程序?        

答:为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。在汇编程序中需要使用EXPORT伪操作来声明,使得本程序可以被其它程序调用。同时,在C程序调用该汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。 

22. 汇编语言程序调用C语言程序?            

答:为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。在C程序中不需要使用任何关键字来声明将被汇编语言调用的C程序,但是在汇编程序调用该C程序之前需要在汇编语言程序中使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。 

23. 在嵌入式C语言程序设计中为提高程序效率的相关设计技巧。      

 答:1)变量定义;2)参数传递;3)循环条件;4)以空间换时间;5)数学方法解决问题;6)使用位操作;7)嵌入汇编。

24.Linux操作系统的内核、文件系统、编程接口等。P192   P201

答:Linux的内核也有很多种,例如普通的Linux内核、uClinux内核、RTLinux内核等

25.嵌入式Linux操作系统的特点。

答:广泛的硬件支持、内核高效稳定、开放源码,软件丰富、优秀的开发工具、完善的网络通信和文件管理机制,

26.Windows CE操作系统及其特点。

答:Windows CE是一个32位、多任务、多线程的操作系统,其开放式的设计结构适用于各种各样的设备,其主要特点:

    一、CE是一种压缩并可升级的软件系统,即使在小内存条件下,也能提供较高的性能。

    二、CE具有便于携带的优点,可以运行于多种微处理器上

    三、CE拥有很好的电源管理系统,能延长移动设备的电池寿命

四、CE支持标准的通讯系统,可以非常方便地访问Internet,发送和接受电子邮件,浏览万维网。

程序解释

AREA COPYBS,CODE,READONLY              ;定义一个代码段

ENTRY                                      ;程序入口

          LDR RO,=SRC                      ;取得原数据表的表头

          LDR R1,=DST                       ;取得目标数据表的表头

          MOV R2,#20                        R4作为循环控制

BCOPY   MOVS R3,R2,LSR,#3                  R3=R2 <<3 逻辑右移3

          BEQ CWORD                        ;若Z=1,跳转到CWORD

OCOPY   LDMIA R0!,{R4-R11}           ;加载R0指向的地址上的多字数据,保存到R4~R11中,R0值更新

          STMIA R1!,{R4-R11}            ;将R4-R11的数据存储到R1指向的地址上,R1值更新

          SUBS R3,R3,#1                       R3=R3-1

          BNE OCOPY                         ;若Z=0,跳转到OCOPY

CWORD   AND R2,R2,#7                       R2=R2&7

          BEQ STOP                           ;若Z=1,跳转到STOP

WCOPY   LDR R3,{R0},#4        ;将R3中的字数据读入以R0为地址的存储器中,并将新地址R0+4写入R1

          STR R3,{R1},#4        ;将R3中的字数据写入以R1为地址的存储器中,并将新地址R1+4写入R1

          SUBS R2,R2,#1                       R2=R2-1

          BNE WCOPY                         ;若Z=0,跳转到WCOPY

STOP     ……

          ……

在程序中常常需要根据一定的参数选择执行不同的子程序。跳转表中存放的是各子函数的地址,选择不同的子程序的参数是该子程序在跳转表中的偏移量。在本例中R3寄存器中存放的是跳转表的基地址(首选地址,其中存放的是第一个子程序的地址)。R0寄存器的值用于选择不同的子程序;当R00时,选择的是子程序DoAdd;当R01时,选择的是子程序DoSub

ADS编译环境程序如下:

AREA  JumpCODEREADONLY   ;设置本程序的名称及属性

NUM   EQU  2                    ;跳转表中的子程序个数

        ENTRY                    ;程序执行的入口点

Start    MOV   R0,#0               ;设置3个参数,R0选择调用哪个子程序

        MOV   R1,#3               R1为子程序要用的参数

        MOV   R2,#2               R2为子程序要用的参数

        BL     Func                ;调用子程序Func,进行算术运算

Stop    MOV   R0 ,#0x18            ;本条与下条指令的作用是参数传递

        LDR    R1,=&20026          

        SWI    0x123456             ;将CPU的控制权交给调试器  

Func    CMP    R0#NUM           ;判断R0是否在有效范围之内

        MOVHS  PCLR             ;如果超出范围则程序返回

        ADR    R3JTable            ;读取跳转表的基地址

        LDR    PC,【R3R0LSL #2】;根据参数R0的值跳转到相应的子程序

JTable   DCD    DoAdd                ;当参数R00时上面的代码将选择DoAdd

        DCD    DoSub                ;当参数R01时上面的代码将选择DoSub

DoAdd  ADD    R0R1R2           ;子程序DoAdd执行加法操作

        MOV    PCLR              ;子程序返回

DoSub   SUB     R0R1R2         ;子程序DoSub执行减法操作

        MOV    PCLR              ;子程序返回

END                                  ;结束汇编

你可能感兴趣的:(arm复习)