1、NAND Flash 和 NOR Flash区别
①NOR读取速度比NAND快
②NOR带有SRAM 有足够多的地址引脚来寻址 而NAND使用I/O串行来读数据,微处理器接口比较复杂
③NOR在进行写入操作时,需要进行多次擦除操作,而NAND具有较小的擦除单元,需要的擦除次数少
④NAND最大可擦除次数为1百万次,而NOR大约在1万次左右
⑤NAND容易受位交换现象的困扰
⑥NAND使用复杂,必须先写入驱动程序
2、串行通信的优点
①只需要一对传输线即可实现双向传输数据
②成本低,传输线少,传输距离远
(缺点:传输效率不高)
3、三、五级流水线
取指、译码、执行
取指、译码、执行、访存、写回
4、LDMIA R0! , {R1-R4}的寻址方式
多数据访存指令
将内存中[R0]到[R0+12]4个字读取到R1~R4的4个寄存器中 R0值更新
5、大小端存储
大端存储 32位字数据的最高字节存储在低字节地址中,最低字节存储在高字节地址中。
小端存储 32位字数据的最高字节存储在高字节地址中,最低字节存储在低字节地址中。
6、合法立即数
将十六进制转变二进制 然后看第一个1到最后一个1 是否能在8位内包括 能包括的情况下,将这8位括起来 然后看右边是否有偶数个0 如果有的话就是合法立即数 否则不是
7、STMDB R10 , {R0,R1,R4} 实现的功能
先地址减4,然后传送
[R10-4]←R0 [R10-8]←R1 [R10-12]←R4
8、ARM处理器工作状态的描述
ARM状态和Thumb状态
前一个32 后一个16
9、永久存放大量不再修改的数据,最适合的存储器是____
(Flash)
10、已知R0=0x12345678 , R1=0x300
执行: STR R0,[R1]
LDRB R2,[R1]
后,R2=
0x78(小端存储)
11、含义相同的两条指令
A.LDMIB LDMFD
B.STMDB STMFD
C.STMIB STMEA
D.LDMDB LDMFA
B
12、哪条指令不影响CPSR
(CMN)
13、实现R0+R3地址上的字节数据读到R1,并且高24位用符号位拓展的指令
LDRSB R1,[R0+R3]
14、嵌入式系统的定义
以应用为中心,以计算机技术为基础,软/硬件可裁减,满足系统对可靠性、成本、体积和功耗等需要的专用计算机系统
15、DMA传送过程一般分为
申请阶段,响应阶段,数据传送阶段,传送结束阶段
16、解释指令操作
MOV R0,0x80000000
ADDS R0,R0,0xA0000000
MOV R1,0x2F
MOV R2,0x1F
ADC R2,R1,#1
MOV R1,#129
EOR ,R1,R1,#0x0F
R1=_____
EOR操作是将R1低四位取反 故得R1=0x8E 或者142
17、IMPORT伪操作
导入外部源文件 本文件不存在
18、改变高低电平的时间改变占空比?修改时钟周期的时间改变占空比?
PWN输出信号占空比(即高电平持续时间所占信号周期的比例)
19、单片机的最小系统必须包括哪些?
单片机最小系统是由芯片外部接上时钟电路、复位电路和电源构成的一个基本应用系统。主要包括时钟电路,复位电路。
20、ARM汇编语言通常会提供控制伪指令,用于控制汇编程序的执行流程是?
21、R14两个用途
工作模式下保存子程序的返回地址
异常模式下设置为异常返回地址
22、ARM9 7种类型的异常
复位 未定义 软件中断 指令预取中止 数据中止 中断请求 快速中断请求
23、说明指令STMIA R12!,{R0-Rn}
将R0-Rn的数据存储到R12指向的地址,R12值更新
24、解释ARM汇编语句
ADD R0,R0,#0x3F
R0=R0+0x3F
ADD R3,R2,R1,LSL R4
将R1逻辑左移R4位 +R2赋值到R3
LDMIA R0,{R1,R2,R3,R4}
R1←[R0] R2←[R0+4] R3←[R0+8] R4←[R0+12]
MULS R0,R1,R2
R0=R1XR2 同时改变N Z标志位
MSR CPSR,R0
将R0写入CPSR程序状态寄存器中
STR R0,[R1,#18]
后变址方式 [R1+18]←R0,R1←R1+18
25、C语言改写汇编
第1题
if(a<b)
a++;
else
b++;
写成汇编如下:
CMPLT R0,R1
ADD R0,R0,#1
CMPGE R0,R1
ADD R1,R1,#1
第2题
if(a==0||b==1)
c=d+e;
写成汇编如下:
CMP R0,#0
CMPNE R1,#1
ADDEQ R2,R3,R4
26、汇编改写C语言
第1题
gcd
CMP R0,R1
SUBGT R0,R0,R1
SUBLT R1,R1,R0
BNE gcd
MOV PC,LR
写成c语言如下:
int gcd(int a,int b){
while(a!=b){
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
学如逆水行舟,不进则退