找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5662|回复: 0
打印 上一主题 下一主题
收起左侧

ARM面试题

[复制链接]
跳转到指定楼层
楼主
ID:107189 发表于 2016-3-5 04:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM阶段测试题答案
ARM体系结构
1、   请简述ARM处理器的特点,至少说出5个以上的特点。(5分)
低功耗;低成本,高性能,RISC结构;指令定长;支持Thumb16位)/ARM32位)双指令集;体积小;
2、   请写出ARM内核和ARM SoC处理器的异同,并举例进行说明。(5分)
ARM内核是ARM SoC处理器中的核心部分,所有ARM SoC都采用ARM的体系结构和指令集ARM SoC主要是在ARM 内核基础上继承了Memory ControllerInterrupt ControllerTimerDMA Controller 以及像 GPIOUSBIICLCD 等外设控制器
   ARM内核有多少种工作模式?请写出这些工作模式的英文缩写。(7分)
ARM7种工作模式usr(用户模式)、sys(系统模式)、svcirqabtundfiq
   ARM内核有多少个寄存器,请列举出这些寄存器的名字和数量。(5分)
ARM37个寄存器,(1)未分组寄存器:R0-R7,共8;(2)分组寄存器R8-R14,其中FIQ模式下有单独的一组R8-R125个,另外6种模式共用一组R8-R12,共5USRSYS模式共用一组R13-R14,共2个,另外5种模式下各有独自的一组R13-R14,共10;(3程序计数器PCR15寄存器,共1个;4状态寄存器CPSR,和5个备份状态寄存器SPSR,共6个;ARM总计37个寄存器。
   ARM通用寄存器中,有3个寄存器有特殊功能和作用,请写出它们的名字和作用。(6分)
R13SP栈指针寄存器,用来保存程序执行时的栈指针位置;R14LR返回链接寄存器,用来保存程序执行BL指令或模式切换时的返回原程序继续执行的地址;R15PC程序计数器,保存程序执行的当前地址。
6、   请描述一下CPSR寄存器中相关Bit的情况和作用。(5分)
条件位(指令进行算术运算后的结果是否有进位,借位等),IIRQ异常允许位),FFIQ异常允许位),TARM/Thumb工作状态),模式位(处理器工作模式)
7、   请写出以下相关ARM指令语句的注释:(7分)
MOV   R0, PC PC的值传送到 R0寄存器此时PC地址为当前指令位置8                                                           
ADD        R0,  R1, #1           R1加上1的结果给R0寄存器                                                        
LDR        R0,        =0x56000010  伪指令0x56000010放到R0寄存器中采用文字池技术。                                                           
LDR        PC,  [PC, #4]       把当前PC值加4位置的内容赋值给PC,实现绝对跳转     
MRS        R0,  CPSR            CPSR的值传送给R0                                                         
BL           LOOP           带返回地址的跳转指令,把下一条指令给LR后,跳转到Loop 地址                                                     
STMFD    R13!,{R0-R12} 压栈指令,把R0R12寄存器的值通过R13栈指针进行压栈保存,同时这个栈是满递减方式的栈。
8、   什么是立即数?请简要描述立即数在使用时有什么注意要点。(2分)
立即数,主要是指寻址时直接在指令中出现的数,在使用时注意(1立即数前需要加#2ARM指令只有32位长,立即数在指令中占12位存储空间,ARM用这12位空间8位表示有效数字-基数B4位表示译为的数M,按照把B循环右移M*2,构造成一个新的32位的数,其它位补0,所以在使用立即数时,要注意其是否合法。
9、   请问BL指令跳转时LR寄存器保存的是什么内容?并请简述原因。(3分)
BL跳转时,LR中保存的是执行BL跳转指令的下一条指令的地址,考虑流水线的情况,即当前的PC-4LR用来在需要返回程序时从LR中还原程序执行的位置继续执行。
10、              请描述一下什么是处理器现场,如何进行保存现场?(5分)
每种工作模式下都包含R0-R15CPSR17个寄存器,程序的执行当前状态就保存在这些寄存器中,称为处理器现场。当发生模式切换时,由于其中的一些寄存器是多种模式下共用的寄存器,为了防止共用处理器寄存器中的值被破坏,所以需要保存原模式下的处理器现场,利用STM批量存储指令,把处理器现场对应的寄存器保存到栈上,待还原时再出栈恢复(模式和返回地址)。其中保存现场的工作,硬件完成了CPSR模式的保存和PC返回地址的保存其他寄存器的保存工作主要依靠软件压栈完成,其中LR因为可能被异常处理程序中的BL跳转指令修改,所以一般都需要软件压栈再保存
11、              请描述一下什么是小尾端Littler-Endian存储格式,如何编程确定处理器的存储格式?(2分)
小尾端:低地址存低字节,高地址存高字节。测试:按字节打印int型的0x12345678,如是小尾端,则先打78.(通过 union 的方式也可以实现测试是否是小尾端)
12、              请写出一条完整的ARM软件中断指令,并简要描述其作用。(2分)
SWI 0x1SWI指令触发软中断异常,使程序的执行流跳转到异常向量表地址0x80x1是软中断的中断号,软中断处理程序可根据不同的中断号调用对应的处理子程序。一般SWI软中断都用于操作系统的系统调用。
13、              请描述一下ARM体系中异常向量表的概念。(7分)
异常向量表是0x0地址开始,一共32个字节,包含8个表项,其中有1个保留不用,其他7个表项对应7种异常发生后的跳转位置,这7种异常发生后分别对应到5种异常模式每个表项里面放的一般都是一条跳转指令,用来跳转到真正的异常处理程序入口,通过B指令,或者LDR PC[PC, #?] 的方式都可以实现此类跳转。
14、              产生软中断和硬中断异常时,程序计数器跳转到的地址是哪里?(2分)
软中断:0x8,硬中断:0x18
15、              请写出发生异常后,在进行异常响应时,硬件完成了哪些工作?(5分)
异常响应时:(1)硬件自动保存程序的返回地址到要切换的工作模式下的LR中;(2)硬件自动保存CPSR到要切换的工作模式下的SPSR中;(3)修改CPSR的模式位;(4)映射相应模式下的寄存器;(5)设置PC跳转到要进入的异常向量表的入口地址。
ARM SOC编程开发
16、              请写出一个ARM程序生成的bin文件映像中包含哪些内容?(3分)
ARM生成的bin文件包含RO,RW 两个段,注意 ZI 段一般都不在 bin 文件中占用存储空间。
17、              请写出完整编译生成bin文件的命令行:使用文件为 start.s  main.c  (5)
armasm start.s –o start.o
armcc –c main.c –o main.o
armlink start.o main.o –first start.o –o main.axf
fromelf –bin main.axf –o main.bin
18、              请写出armlink时经常使用的参数选项及其作用,不少于3个。(3分)
-first 指定目标二进制文件哪个链接时放在存储的最前面;-entry 指定程序的入口地址,即程序从哪里开始首先执行;-ro-base 指定程序链接时RO段采用的内部加载基址;-rw-base 指定RW段加载时的加载地址。
19、              请举例说明在ARM处理器上进行一次中断处理和中断异常处理的差异。(3分)
中断处理相比异常处理,主要是中断需要初始化中断源和中断控制器中断发生后在ISR中要清除相应Pending,而且要在进入中断处理程序一开始就清除。
20、              请写出从中断异常进行返回时,软件编程要处理的事项和注意要点。(2分)
1返回地址LR的调整。2在恢复PC同时,恢复CPSR(恢复原来的模式,返回被打断的地址。)
21、              请详细描述我们在S3C2440开发板实验过程中进行串口初始化的流程和要点。(5分)
时钟频率设置(MPLLPCLK的设置),串口数据位8位,停止位1位,奇偶校验无,波特率设置需要根据PCLK代入公式进行计算等
22、              请详细描述我们在S3C2440开发板实验过程中进行按键中断触发的流程和要点。(8分)
SVCIRQ模式下的SP栈指针设置,IO管脚复用设置,设置按钮的触发模式(下降沿触发),管脚的中断模式使能,中断掩码寄存器屏蔽位打开,清除PND寄存器中的pending位,打开CPSR-I位;
23、              请说明S3C2440处理器,关于 memory map 的情况。(5分)
2440memory分为8bank每个bank固定大小为128M,每个bank均可以产生一个片选信号,共1G的地址空间8个片选信号,bank0-bank5用来存放SROM器件bank6bank7用来存放SDRAM器件
24、              请详细描述 bootloader 启动代码的设计流程,并说明你目前所实现的bootloader已经完成的功能有哪些,实现中遇到了哪些困难和bug问题? 5分)
bootloader的设计流程:硬件的初始化1)初始化看门狗(2)关中断(3)设置处理器时钟(4)初始化SDRAM器件(5)初始化串口(6)实现shell命令解释器功能,(7) 提供通过串口的下载功能download和执行功能go。要求能够讲的出你自己实现bootloader过程中遇到的实际问题和解决办法,这个很重要。
25、              请说明以下代码中可能存在的3bug,并给出解决办法。(3分)
#define UART_BASE  0x50000000
#define UTRSTAT0   *(volatile unsigned int *) UART_BASE+0x10
#define UTXH0   *(volatile unsigned int *) UART_BASE+0x20
int mainvoid
{
if( UTRSTAT0 & 0x4 == 0x4 )   
UTXH0 = 'a';  
      return 0;
}
(1) UART_BASE+0x10应该加上括号(2& 的优先级比 == 要低,所以要加括号。(3) if应该改为while( !(UTRSTAT0 & 0x4) )
附加题:
请说明SRAM, SDRAM, Nor Flash Nand Flash的异同,并详细描述各自编程上的注意要点。
异同见教材,编程上要注意说明 SRAMNorFlash无须初始化就可以使用SDRAMNandFlash都需要初始化驱动代码才可以工作NorFlash的写需要靠芯片手册规定的时序来做STR指令不能够直接写入NorFlashNandFlash,但可以直接写入SRAMSDRAM NandFlash器件是属于IO方式进行读,和其他3种器件的总线读方式不一样,因此读写NandFlash需要相应的驱动


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表