嵌入式考试总复习1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.ARM处理器有多种运行模式,用户程序运行在其中的(用户)模式。

2.Qt/Embedded使用(过程调用)和(中断返回)的机制实现函数的回调。

3.Rl=2000H,(2000H)=Ox28,(2008H)=Ox87,则执行指令LDR R0,[R1,#8]!后R0的值为(0x87 )。

4.假设R1=0x31,R2=0x2 则执行指令ADD R0,R1,R2,LSL #2后,R0的值是( 0x39 )。

5.ADS(ARM Developer Suite)调试程序时,调入的文件最好为( ADS1.2 )版本下编译生成的.axf文件,该版

本的文件包含部分调试用到的信息。

6.ARM汇编语言由伪操作、伪指令、宏指令和指令共同构成。其中(伪操作)是一种特殊的指令助记符,在汇

编时会被转换成相应的指令,在反汇编中能看到汇编器产生的指令代码。

7.在ATPCS中函数的参数传递通常通过( R0-R7 )寄存器、堆栈指针是( R13 )寄存器

8.ARM处理器总共有37个寄存器,这些寄存器根据ARM处理器不同工作模式,可将全部寄存器分成( 3 )组。

三、程序分析(共20分)

1、如下在ADS中对工程的链接器(ARM Linker)进行了配置

并编写了如下的汇编程序:

问:现执行上述程序,请列出R0,R1,R2的最终值,并告知整个程序的功能。(5分)

R0=1

R1=2

R2=1

功能:对R0和R1分别赋值0,1,在R1为5的条件下循环给R0赋值R0和R1之和,给R1加1,取得RESULT的地址赋值于R2,将R0的值保存在RESULT中

2、阅读如下程序

test.s:

test.c:

请列出上述程序执行后R0,R1的值,并说明上述程序的作用。(5分)

R0=31

R1=23

功能:test.c调用s_program函数,将54赋值R0,23赋值R1,两者相减后,赋值给R0,R0作为返回值赋值给num,然后输出num。

3、现有如下C语言定义的函数mypro

int mypro(int a, int b)

{

a=a*b;

return (a);

}

请补充完成调用上述函数的汇编程序,实现11与22相乘,并要求将结果保存在地址为0x40001000处:(10分)

area test3, code, readonly

import mypro

entry

code32

start

mov r0,#11 (1)

mov r1,#22 (2)

BL mypro (3)

Ldr r3,=0x40001000 (4)

Str r0,[r3] (5)

END

提示3:您现在已完成了前三部分,请手工保存一下此文档,以免意外情况下丢失答案。

四、综合编程(共20分)

1、教材第六章关于GPIO的应用,列举了一个I/O管脚控制4个LED发光二极管的例子,但我们实验箱所提供的LED 发光二极管位于不同的引脚,它们分别使用了S3C2410 的GPC5,GPC6,GPC7,如下图,请修改原程序段以实现三个灯的交替闪烁(注:未用引脚设置为input状态)。

(请直接在原来的程序上修改)。(10分)

博创经典版LED接线原理图

相关寄存器定义:

#define rGPCCON (*(volatile unsigned *)0x56000020)

#define rGPCDAT (*(volatile unsigned *)0x56000024)

#define rGPCUP (*(volatile unsigned *)0x56000028)

端口初始化:

void port_init(void)

{

rGPCCON = 0x56aa;

rGPCUP = 0xff; // GPF所有端口都不加上拉电阻

}

所有LED交替亮灭:

void led_on_off(void)

{

int i;

rGPCDAT=0; //所有LED全亮

for(i=0;i<100000;i++);

rGPCDAT=0xE0; //所有LED全灭

for(i=0;i<100000;i++);

}

2、教材第七章关于中断处理的应用,列举了一个通过按钮产生中断请求的实验例子,但我们实验箱所提供的按钮位于不同的引脚,如下图,按键接到INT5 中断。

博创经典版中断实验电路图

请修改原程序段以实现实例中要求的功能(即当按钮按下,向CPU发出中断请求,当CPU受理中断后,进入相应的中断服务程序,通过超级终端的主窗口显示当前进入的中断号)(有关EXTINTn参数配置请参考附件“EXTINTn参

数.doc”(注:直接在原来的程序上修改,并删除同此实验要求无关的原有代码部分)。(10分)

相关寄存器定义:

#define rGPFCON (*(volatile unsigned *)0x56000050) //端口F的控制寄存器

#define rEXTINT0 (*(volatile unsigned *)0x56000088) //外部中断控制寄存器0

#define rEINTMASK (*(volatile unsigned *)0x560000a4) //外部中断屏蔽寄存器

#define rEINTPEND (*(volatile unsigned *)0x560000a8) //外部中断挂起寄存器

#define rINTMSK (*(volatile unsigned *)0x4a000008) //中断屏蔽寄存器

#define rSRCPND (*(volatile unsigned *)0x4a000000) //源挂起寄存器

#define rINTPND (*(volatile unsigned *)0x4a000010) //中断挂起寄存器

中断初始化:

void int_init(void)

{

rGPFCON=(rGPFCON & ~(3<<0))|(0x2<<0) ; // 将GPF0配置为EINT5

pISR_EINT5=(UINT32T)int0_int; // 注册中断处理函数

rEINTPEND = 0xffffff; //清除所有外部中断挂起状态

rSRCPND = BIT_EINT5; //清除源的挂起状态

rINTPND = BIT_EINT5; //清除挂起状态

rEXTINT0 = (rEXTINT0 & ~(7<<0)) | (0x2<<0); //EINT5下降沿触发

rINTMSK &= ~(BIT_EINT0); //打开INTMSK中的中断0

}

中断处理函数:

void __irq int0_int(void) //外部中断0处理函数

{

uart_printf(" EINT0 interrupt occurred.\n");

ClearPending(BIT_EINT0); //清除中断源

}

#define ClearPending(bit)

{ rSRCPND = bit;

rINTPND = rINTPND;} // precent write wrong data

}//清除中断源,注意清除的顺序,要从源头开始清除

提示4:您现在已完成了前四部分,请手工保存一下此文档,以免意外情况下丢失答案。

五、问答题(共20分)

1、简述使用操作系统的嵌入式系统相比较不使用操作系统的嵌入式系统所具有的特点。(10分)

嵌入式系统所独有的特点:具有低成本,多种硬件平台支持,优异的性能和良好的网络支持;改善了内核结构采用的是一种叫微内核的体系结构,大大减小了内核的体积,便于维护和移植;提高了系统实时性。

2、相比较通用计算机的软件开发,请简述嵌入式系统开发的特点,并对如何开好本课程提一下您的宝贵意见。(10分)

嵌入式系统开发的特点:由于嵌入式系统与硬件依赖程序非常紧密,往往需要通过特定的硬件才能实现,因此需要进行处理器选型,以更好的满足产品的需求。此外开发环境的选择对于嵌入式系统的开发也有很大影响,和通用软件的开发主要区别在软件实现部分,其中又可以分为编译和调试两部分。嵌入式系统开发采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成在另一个平台上执行的代码。嵌入式软件经过编译和链接后进入交叉调试。而在嵌入式软件开发中,调试采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却在基于特定硬件平台的嵌入式操作系统中,调试器可以控制访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。嵌入式系统的交叉调试有多种,主要分为软件方式和硬件方式。

相关文档
最新文档