ARM复习题.docx
《ARM复习题.docx》由会员分享,可在线阅读,更多相关《ARM复习题.docx(16页珍藏版)》请在冰豆网上搜索。
ARM复习题
基本知识问题
1、什么是嵌入式系统?
答:
国内对嵌入式系统的一般定义是:
以应用为中心,以计算机技术为基础,软硬件可裁剪,从而能够适应实际应用中对功能、成本、体积、功耗等严格要求的专用计算机系统。
2、嵌入式处理器分为哪几类?
答:
嵌入式处理器可分为:
A、低端为控制器(MicroControllerUnit,MCU)
B、中高端的嵌入式微处理器(EmbeddedMicroProcessorUnit,EMPU)
C、通信领域的DSP处理器(DigitalSignalProcessor,DSP)
D、高度集成的片上系统(SystemonChip,SoC)
3、嵌入式系统中外围设备一般分为哪几类,举例说明。
答:
4、什么是实时系统?
有哪些特征?
答:
A、实时系统是指产生系统输出的时间对系统至关重要的系统。
B、特征:
实时性、并行性、多路性、独立性、可预测性、可靠性
5、嵌入式系统开发过程分为哪几个阶段?
各个阶段特征是什么?
答:
嵌入式系统开发过程分为
<1>.需求分析阶段,
<2>.设计阶段,
<3>.生成代码阶段,
<4>.固化阶段,
6、什么是板级支持包?
它一般完成哪些工作
答:
A、板级支持包是指
B、板级支持包完成的工作包括:
I、在系统启动时,对硬件进行初始化。
II、为驱动程序提供访问硬件的手段。
7、ARM9和ARM7的流水线结构各是什么?
答:
ARM7采用3级流水线,分为取指,译码和执行。
ARM9采用5级流水线,分为取指,指令译码,执行,数据缓存和写回
8、ARM有哪几种处理器模式及工作状态?
答:
ARM有用户、FIQ、IRQ、管理、中止、未定义、系统7中处理器模式。
ARM处理器有ARM和Thumb两种工作状态。
9、ARM体系结构采取了哪几种措施降低功耗?
答:
I、降低电源电压,可工作在3.0V以下。
II、减少门的翻转次数,当某个功能电路不需要时,禁止门翻转。
III、减少门的数目,即降低芯片的集成度。
IV、降低时钟频率(不过也会损失系统的性能)。
10、ARM共有多少个寄存器?
其中哪个用作PC?
哪个用作LR,哪个用作SP?
答:
ARM共有37个寄存器。
R15用作PC,R14用作LR,R13用作SP
11、简述C语言与汇编语言混合编程时应遵循的参数传递规则
答:
I、整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需求的一组连续的FP寄存器传递参数。
II、子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;以此类推。
结果为浮点数时,通过浮点运算部件的寄存器F0、D0或者S0返回。
12、S3C2410有哪几种启动方式?
答:
NORFlash存储器启动,NANDFlash启动方式
13、S3C2410存储器控制器具有哪些特性?
答:
I、支持小/大端模式(通过软件选择)
II、地址空间:
每个bank有128MB(总共有8个bank,共1GB)
III、除bank0之外,其他bank都具有可编程的访问大小
IV、总共有8个存储器bank。
V、7个固定的存储器bank起始地址
VI、最后一个bank的起始地址是可调的
VII、最后两个bank的大小是可以编程的。
VIII、所有存储器bank的访问周期都是可编程的。
IX、总线访问周期可以通过插入外部等待来延长。
X、支持SDRAM的自刷新和掉电模式。
14、S3C2410为何将存储在NANDFalsh或NORFlash重新装载到SDRAM中运行,SDRAM的起始地址是多少。
答:
I、装载的原因:
因为在SDRAM中执行代码的速度比较快。
II、起始地址如下:
bank6的起始地址为:
0x30000000
bank7的起始地址为:
0x30200000(2M),0x30400000(4M),0x30800000(8M),0x31000000(16M),0x32000000(32M),0x34000000(64M),0x38000000(128M)
15、S3C2410有哪几种中断,处理中断的步骤是什么?
答:
S3C2410的中断可分为FIR和IRQ
处理中断的步骤是:
I、保存现场。
II、模式切换。
III、获取中断源。
IV、中断处理。
V、中断返回,恢复现场。
16、说出Linux操作系统的特点。
答:
I、自由开放软件
II、真正的多任务多用户
III、UNIX的完整实现
IV、完全符合POSIX标准
V、良好的用户界面
VI、强大的网络功能
VII、良好的可移植性
VIII、设备独立性
17、说出进程和程序的区别
答:
一个进程是程序的一次执行过程。
程序是静态的,而进程则是一个动态的概念。
18、Linux有哪几种类型设备
答:
19、什么是设备文件,如何对设备文件进行识别?
答:
、linux将所有外部设备看成是一类特殊文件,称之为设备文件
对设备文件的识别使用设备类型、主设备号和次设备号。
20、设备类型、主设备号、次设备号的定义,举例说明
答:
设备类型:
字符设备或者块设备。
主设备号:
按照设备使用的驱动程序不同而赋予设备不同的主设备号。
主设备号与驱动程序一一对应。
次设备号:
用来区分使用同一个驱动程序的不同设备。
例:
系统中块设备IDE硬盘的主设备号是3,而多个IDE硬盘分区分别赋予次设备号1,2,3……
21、设备驱动程序作为内核的一部分,试述其完成的功能。
答:
设备驱动程序就是系统用来管理操作设备文件的接口程序。
22、file_operation结构用于什么目的。
答:
23、Linux常用命令:
cp、mv、ls、rm、mkdir、rmdir、cd、pwd、tar、chmod、chown、passwd、su、shutdown、mount、umount、echo、clear、
24、Vi编辑器有哪几种工作模式。
它们如何切换。
如何保存退出
答:
有命令模式、编辑模式、最后行模式。
I通过键入i、o、a命令,VI编辑器将离开模式的命令模式,进入编辑模式。
II完成文本编辑后,按ESC键将VI回到命令模式下
III当处于命令模式下时,通过键入“:
”使光标处于屏幕的最后一行,进入最后行模式
25、BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分,叙述各自部分功能。
答:
Stage1的功能为:
I、硬件设备初始化
II、为加载BootLoader的stage2准备RAM空间
III、复制BootLoader的stage2到RAM空间中
IV、设置好堆栈
V、跳转到stage2的入口点
Stage2的功能为:
I、初始化本阶段要使用的硬件设备
II、检测系统内存映射
III、将kernel映像和根文件系统映像从Flash读到RAM中
IV、为内核设置启动参数
V、调用内核
26、Linux内核的目录结构功能:
答:
/arch:
包含所有与硬件体系结构相关的内核移植代码。
/Documentation:
包含许多有关内核的非常详细的文档
/drivers:
包含内核中所有的设备驱动程序
/fs:
包含所有文件系统的代码
/include:
包含建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。
也包括不同平台需要的库文件。
/init:
包含内核的初始化代码,内核从此目录下开始工作
/kernel:
包含主内核的代码,如进程调度
/lib:
包含通用的库函数代码
/net:
包含网络相关代码
/scripts:
包含配置内核的一些脚本文件
程序问题:
1、熟悉下面定义参数的方法
voidTimer1_init(void)
{
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;//配置GPG口为信号输出
rGPGDAT=rGPGDAT|0x300;
rTCFG0=255;//Prescaler0=255
rTCFG1=0<<4;//
rTCNTB1=48828;//在pclk=50MHZ下,1秒钟的记数值rTCNTB1=50000000/4/256=48828;
rTCMPB1=0x00;
rTCON=(1<<11)|(1<<9)|(0<<8);//禁用定时器1,手动加载
rTCON=(1<<11)|(0<<9)|(1<<8);//启动定时器1,自动装载
}
2、编程题1
试述下面代码的功能:
XEQU11;1定义X的值为11
YEQU8;2定义Y的值为8
BIT23EQU(1<<23);3定义BIT23的值为0x00800000
AREAExample3,CODE,READONLY;4声明代码段Example3
ENTRY;5标识程序入口
CODE32;6声明32位ARM指令
START;使用MOV、ADD指令实现:
R8=R3=X+Y
MOVR0,#X;7R0<=X,X的值必须是8位图数据
MOVR1,#Y;8R1<=Y,Y的值必须是8位图数据
ADDR3,R0,R1;9即是R3=X+Y
MOVR8,R3;10R8<=R3
;使用MVN、SUB指令实现:
R5=0x5FFFFFF8-R8*8
MVNR0,#0xA0000007;110xA0000007的反码为0x5FFFFFF8
SUBR5,R0,R8,LSL#3;12R8左移3位,结果即是R8*8
;使用CMP指令判断(5*Y/2)>(2*X)吗?
若大于则R5=R5&0xFFFF0000,否则R5=R5|0x000000FF
MOVR0,#Y;13
ADDR0,R0,R0,LSL#2;14计算R0=Y+4*Y=5*Y
MOVR0,R0,LSR#1;15计算R0=5*Y/2
MOVR1,#X;16
MOVR1,R1,LSL#1;17计算R1=2*X
CMPR0,R1;18比较R0和R1,即(5*Y/2)和(2*X)进行比较
LDRHIR2,=0xFFFF0000;19若(5*Y/2)>(2*X),则R2<=0xFFFF0000
ANDHIR5,R5,R2;20若(5*Y/2)>(2*X),则R5=R5&R2
ORRLSR5,R5,#0x000000FF;21若(5*Y/2)≤(2*X),则R5=R5|0x000000FF
;使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)
TSTR5,#BIT23;22
BICNER5,R5,#0x00000040;23
BSTART;24
END
3、编程题2
#defineuint8unsignedchar
#defineuint32unsignedint
externuint32Add(uint32x,uint32y);
uint32sum;
//调用汇编程序Add实现加法运算
voidMain(void)
{
sum=Add(555,168);
while
(1);
}
;加法函数,原型为uint32Add(uint32x,uint32y)。
EXPORTAdd
AREAAddC,CODE,READONLY;声明代码段AddC
ENTRY;标识程序入口
CODE32;声明32位ARM指令
AddADDR0,R0,R1;输入参数x为R0,y为R1
MOVPC,LR;返回值为R0
END
/***********************************************************************************/
4、编程题3驱动程序编写mydriver
#ifndef__KERNEL__
#define__KERNEL__
#endif
#ifndefMODULE
#defineMODULE
#endif
#include
#include
#include
#include
#include
#include
MODULE_LICENSE("GPL");
staticcharvoltage=34;
inttemp;
staticintmy_open(structinode*inode,structfile*filp);
staticintmy_close(structinode*inode,structfile*filp);
staticssize_tmy_read(structfile*filp,char*buf,size_tcount,loff_t*f_pos);
staticssize_tmy_write(structfile*filp,constchar*buf,size_tcount,loff_t*f_pos);
intmy_init(void);
voidmy_exit(void);
#defineMAJOR_NR126
#defineDEVICE_NAME"wydrive"
module_init(my_init);
module_exit(my_exit);
staticstructfile_operationsmy_fops=
{
owner:
THIS_MODULE,
read:
my_read,
write:
my_write,
open:
my_open,
release:
my_close,
};
staticintmy_open(structinode*inode,structfile*filp)
{
MOD_INC_USE_COUNT;
return(0);
}
staticintmy_close(structinode*inode,structfile*filp)
{
MOD_DEC_USE_COUNT;
return(0);
}
staticssize_tmy_read(structfile*filp,char*buf,size_tcount,loff_t*f_pos)
{
copy_to_user(buf,&voltage,sizeofvoltage);
returnsizeofvoltage;
}
staticssize_tmy_write(structfile*filp,constchar*buf,size_tcount,loff_t*f_pos)
{
return0;
}
intmy_init(void)
{
intresult;
result=register_chrdev(MAJOR_NR,DEVICE_NAME,&my_fops);
if(result<0)
printk(KERN_ERRDEVICE_NAME":
unabletogetmajor%d\n",MAJOR_NR);
else
printk(KERN_ERRDEVICE_NAME":
major%disrunning\n",MAJOR_NR);
return(0);
}
voidmy_exit(void)
{
printk(KERN_ERRDEVICE_NAME":
major%dexit!
\n",MAJOR_NR);
unregister_chrdev(MAJOR_NR,DEVICE_NAME);
}
/********************************************************************/
5、Makefile
EXEC=mydrive
OBJS=mydrive.o
SRC=mydrive.c
INCLUDE=/usr/src/linux-2.4.20-8/include
CC=gcc
LD=ld
MODCFLAGS=-O2-Wall-D__KERNEL__-DMODULE-I$(INCLUDE)
LDFLAGS=-melf_i386-r
all:
$(EXEC)
$(EXEC):
$(OBJS)
$(LD)$(LDFLAGS)-o$@$(OBJS)
%.o:
%.c
$(CC)$(MODCFLAGS)-c$<-o$@
clean:
rm-f$(EXEC)*.o*~core
/**************************************************************************/
6、Drivertest.c
#include
#include
#include
#include
intmain(void)
{
intfd;intresult;charbuf;
fd=open("/dev/wydriver",O_RDWR);
if(fd<0)
{
printf("wydrivercan'topen\n");
exit
(1);
}
else
printf("wydriverhaveopened\n");
result=read(fd,&buf,sizeof(buf));
if(!
result)
{
printf("readdataerro\n");
close(fd);
}
printf("thedrivedatais%d\n",buf);
close(fd);
return(0);
}
InterruptPendingRegister
TheS3C2410Ahastwointerruptpendingresisters:
sourcependingregister(SRCPND)andinterruptpendingregister(INTPND).Thesependingregistersindicatewhetherornotaninterruptrequestispending.Whentheinterruptsourcesrequestinterruptservice,thecorrespondingbitsofSRCPNDregisteraresetto1,andatthesametime,onlyonebitoftheINTPNDregisterissetto1automaticallyafterarbitrationprocedure.Ifinterruptsaremasked,thecorrespondingbitsoftheSRCPNDregisteraresetto1.ThisdoesnotcausethebitofINTPNDregisterchanged.WhenapendingbitoftheINTPNDregisterisset,theinterruptserviceroutinestartswhenevertheI-flagorF-flagisclearedto0.TheSRCPNDandINTPNDregisterscanbereadandwritten,sotheserviceroutinemustclearthependingconditionbywritinga1tothecorrespondingbitintheSRCPNDregisterfirstandthenclearthependingconditionintheINTPNDregistersbyusingthesamemethod.
INTERRUPTOFFSET(INTOFFSET)REGISTER
ThevalueintheinterruptoffsetregistershowswhichinterruptrequestofIRQmodeisintheINTPNDregister.ThisbitcanbeclearedautomaticallybyclearingSRCPNDandINTPND.
SUBSOURCEPENDING(SUBSRCPND)REGISTER
YoucanclearaspecificbitoftheSUBSRCPNDregisterbywritingadatatothisregister.Itclearsonlythebit
positionsoftheSUBSRCPNDregistercorrespondingtothosesettooneinthedata.Thebitpositionscorrespondingtothosethataresetto0inthedataremainsastheyare.
PORTCONTROLDESCRIPTIONS
PORTCONFIGURATIONREGISTER(GPACON-GPHCON)
IntheS3C2410A,mostpinsaremultiplexed.So,Itisrequiretodeterminewhichfunctionisselectedforeachpin.portcontrolregister(PnCON)determinesthefuncti