ARM复习题.docx

上传人:b****4 文档编号:27536262 上传时间:2023-07-02 格式:DOCX 页数:16 大小:22.24KB
下载 相关 举报
ARM复习题.docx_第1页
第1页 / 共16页
ARM复习题.docx_第2页
第2页 / 共16页
ARM复习题.docx_第3页
第3页 / 共16页
ARM复习题.docx_第4页
第4页 / 共16页
ARM复习题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ARM复习题.docx

《ARM复习题.docx》由会员分享,可在线阅读,更多相关《ARM复习题.docx(16页珍藏版)》请在冰豆网上搜索。

ARM复习题.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1