




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东工业大学考试试卷 ( A )课程名称: ARM嵌入式系统设计与应用 试卷满分 100 分考试时间: 2013年 5月 17日 (第 12 周 星期五 )题 号一二三四五六七八九总分评卷得分评卷签名复核得分复核签名注意:请把答案写在试卷上!一. 选择题(30分,共15题)123456789101112131415DADDABBAABCADDB 二.填空题(10分 每空2分)1Nand Flash 的特点是应用程序可以直接在闪存中运行,不需要把代码读到系统RAM 中。该说法是否正确。(错)2ARM920T支持7种运行模式,分别为:用户模式,快速中断模式,中断模式,管理模式,数据访问终止模式,系统模式, 未定义模式 。3当CPSR的后5位为 10011 时,进入管理模式。4. 若一个优先级为39的任务就绪,则在就绪表中,OSRdyTbl的 第6位 置位,变量OSRdyGrp的 第3位 置位。学 院: 专 业: 学 号: 姓 名: 装 订 线 三.简答题(20分,共4题)1. 简述ARM发生异常时,ARM要做哪些事情?(5分)答:当一个异常出现以后,ARM微处理器会执行以下几步操作:(1)将下一条指令的地址存入相应连接寄存器LR。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC4或PC8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。这样,异常处理程序就不需要确定异常是从何种状态进入的,程序在处理异常返回时能从正确的位置重新开始执行。例如:在软件中断异常SWI中,指令 MOV PC,R14_svc总是返回到下一条指令,而不管SWI是在ARM状态执行,还是在Thumb状态执行。(2)将CPSR复制到相应的SPSR中。(3)根据异常类型,强制设置CPSR的运行模式位。(4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。还可以设置中断禁止位,以禁止中断发生。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。2. ARM体系结构支持几种类型的异常?优先级状态如何?(5分)答:当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序为:复位、数据中止、FIQ、IRQ、预取指令中止、未定义指令、SWI。3. 简述ARM处理器从异常返回的步骤(5分)答:异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中。2、将SPSR复制回CPSR中。3、若在进入异常处理时设置了中断禁止位,要在此清除。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。4.下列ARM条件码的含义是什么?(1) EQ(2) NE(3) GE(4) LT(5) MI答:EQ表示相等,NE表示不相等,GE表示有符号数大于或等于,LT表示有符号小于,MI表示负数。 四.阅读程序题(30分,共5题) 1根据一段完整的汇编语言代码回答下面的问题(10分)。 ;/*- */ ;/* code */ ;/*- */ GLOBAL Reset_Handler area start,code,readwrite entry code32 num EQU 20 Reset_Handler ldr R0, =src ldr R1, =dst mov R2, #num ldr sp, =0x30200000 blockcopy movs R3,R2, LSR #3 beq copywords stmfd sp!, R4-R11 ;(*1*) octcopy ldmia R0!, R4-R11 stmia R1!, R4-R11 subs R3, R3, #1 bne octcopy ldmfd sp!, R4-R11 ;(*2*) copywords ands R2, R2, #7 beq stop wordcopy ldr R3, R0, #4 str R3, R1, #4 subs R2, R2, #1 bne wordcopy stop b stop ;/*- */ ;/* make a word pool */ ;/*- */ ltorg src dcd 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst dcd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 end问题:(1)语句(*1*)和(*2*)实现什么功能? (5分)(2)这一段代码总体完成什么功能? (5分)答:(1)实现堆栈保存和恢复数据。 (2)完成拷贝一段数据块的功能。2补充1个相关语句,完成在C函数中调用汇编的功能.(5分)#include /*-start.s-*/ global _start . equ Ni,20 .text _start:MOV R0,#NiBL factorialSTOP:B STOP .END /*-factorial.c*-/ long long factorial(char N) char i;long long Nx=1; for(i=1;i=N;i+) Nx=Nx*i; return Nx; 答:import factorial3仔细阅读下面的两个任务编程,并说明程序要实现的主要功能是什么。(5分) OS_EVENT *math_Sem; void task1() U8 i,sum; math_Sem=OSSemCreate(0); sum=0; for(i=0; i=100; i+) sum=sum+i; OSSemPost(math_Sem); For(;) OSTimeDly(100); void task2() U8 err; for(;) OSSemPend(math_Sem,0,&err); LCD_printf(we get the sum!n); 答:实现0到100的累加,并显示出来。4. 三个任务代码如下,其中task1、task2、task3的优先级分别为:29、36,48。分析LCD上的显示结果。(5分)Void task1()ClearScreen();LCD_Printf(“task1 is running!n”);OSTimeDly(500);Void task2()ClearScreen();LCD_Printf(“this is task2!n”);OSTimeDly(350);Void task3()ClearScreen();LCD_Printf(“running task3!n”);OSTimeDly(200);Task1,-500 Task2 -350 Task3-200 Task3-200 Task2-350 Task1在LCD上的显示结果为:第一次:_ task1 is running!_第二次:_ this is task2!_第三次:_ running task3!_第四次:_ running task3!_第五次:_ this is task2!_第六次:_ task1 is running!_5、请为下列Makefile程序加注释,并说明程序的功能。(5分)objects = main.o subr.o /1) exec = prog /2) all:$(objects) /3) gcc o $ $ /4) clean: rm r $(exec) $(objects) /5) 答:1)定义目标文件2)定义操作3)引用所用目标4)对目标文件集和依赖文件集进行编译,生成可执行文件5)删除所有生产文件五.应用实践题(10分)基于ucos编程,创建三个按键和一个LED的闪烁任务,任意一个按键按下,则发送一个消息邮箱给闪烁任务。按键1按下闪烁1次,按键2按下闪烁2此,按键3按下闪烁3此,闪烁每次间隔500ms。可能会用到的函数#define LED_LED _OFF() GPIO_SetBits(GPIOB, GPIO_Pin_7 ); #define LED_LED _ON() GPIO_ResetBits(GPIOB, GPIO_Pin_7 );按键检测findkey(),有键按下返回1,否则为0;OSInit();OSStart();INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);INT8U OSTaskCreate(TaskStart, (void *)data,&TaskStartStkTASK_STK_SIZE - 1, prio);OS_EVENT *OSMboxCreate(void *msg);Void *OSMboxPend ( OS_EVNNT *pevent, INT16U timeout, int8u *err );INT8U OSMboxPost(OS_EVENT *pevent, void *msg);Void *OSMboxAccept(OS_EVENT *pevent);答:#define Task_Key_STK_SIZE 64#define Task_Led1_STK_SIZE 64static OS_STK Task_KeyStkTask_Key_STK_SIZE;static OS_STK Task_Led1StkTask_Led1_STK_SIZE;INT8U err;OS_EVENT *Mbox1;static void Task_Key(void* p_arg);static void Task_Led1(void* p_arg);#define LED_LED1_OFF() GPIO_SetBits(GPIOB, GPIO_Pin_6 ); /LED1 灭 #define LED_LED1_ON() GPIO_ResetBits(GPIOB, GPIO_Pin_6 ); /LED1 亮int main(void) OSInit(); OSTaskCreate(Task_Key,(void*)0,(OS_STK *)&Task_KeyStkTask_Key_STK_SIZE-1,5); OSTaskCreate (Task_Led1,(void*)0,(OS_STK*)&Task_Led1StkTask_Led1_STK_SIZE-1,6); Mbox1=OSMboxCreate(void *)0); OSStart(); static void Task_Key(void* p_arg) u8 key; u8 Temp_box=0; (void) p_arg; while (1) key=find_key(); if(key=1) Temp_box=1; OSMboxPost(Mbox1,&Temp_box); OSTimeDlyHMSM(0, 0, 0, 500); if(key=2) Temp_box=2; OSMboxPost(Mbox1,&Temp_box); OSTimeDlyHMSM(0, 0, 0, 500); if(key=3) Temp_box=3; OSMboxPost(Mbox1,&Temp_box); OSTimeDlyHMSM(0, 0, 0, 500); ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论