arm试题
ARM体系结构与编程试题

ARM体系结构与编程试题
一、简答题(20分)
(1)简述ARM的命名规则中后缀变量及其含义。
(2)用ARM汇编指令实现如下操作
a)R0=15
b)R0=R1/16
c)R1=R2*3
d)R0=-R0
(3)解读以下代码程序,并图示地址的走向。
LDMFDR13!,{R0,R4-R12,PC}
(4)试述用MDK软件的操作步骤。
二、编程题(60分)
(1)编写一段ARM汇编程序,实现数据块复制,将R0指向的8个字的连续数据块存到R1指向的一段连续的内存单元。
(2)下面是一段C语言程序,该程序实现了著名的Euclid最大公约数算法。
int gcd(int a,int b)
{while(a!=b)
{if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
用ARM汇编语言来重写这个例子。
(3)试编写程序,在C语言中调用汇编语言函数,用汇编语言函数实现字符串的复制。
ARM体系结构试题

东华理工大学长江学院2011—2012 学年第2学期补考试卷B 课程:嵌入式微处理器体系结构与编程考试形式:闭卷年级及专业:计算机科学与技术10304101-3班1.系统调用运行在使用者空间的程序向系统内核请求需要更高权限运行的服务2.哈弗结构数据指令存储和程序指令存储分开3.MMU内存管理单元4.FIQ快速内部中断5.SPSR备份程序状态寄存器二、单项选择题(20×2分=40分)1.ARM系统复位后,第一条执行的指令在( A ).A 00000000HB 00000004HC 00000008HD 由编程者确定2.针对没有MMU的ARM芯片,其操作系统可以使用( C ).A Windows CE ,LinuxB VxWorkC uClinux, Uc/OS-IID 以上都可以3.ATPCS定义了寄存器组中的( A )作为参数传递和结果返回寄存器。
A R0,R1,R2,R3B R4,R5,R6,R7C R8,R9,R10,R11D A B C 都可以4.用汇编指令对R15赋值,可以实现( D )。
A 程序的跳转B 实现B指令功能C 子程序的返回D A B C都可以5.ARM汇编语言中,一常量8_5642也代表( B/D/C )。
A 整数5642B 整数5642HC 整数Ox5642D 整数29786.要使CPU能够正常工作,下列哪个条件不是处理器必须满足的。
(D)(A) 处理器的编译器能够产生可重入代码(B)在程序中可以找开或者关闭中断(C) 处理器支持中断,并且能产生定时中断(D)有大量的存储空间7.下面哪种操作系统最方便移植到嵌入式设备中。
( D )(A) DOS (B)unix (C) Windows xp (D)linux8.下列描述不属于RISC计算机的特点的是( C )。
A.流水线每周期前进一步。
B.更多通用寄存器。
C.指令长度不固定,执行需要多个周期。
D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。
计算机三级嵌入式试题题库

一单项选择题1. 世界上第一台计算机研制成功的年代是( C )Α.1944年B.1945年C.1946年D.1947年2. 十进制数235,用二进制表达为( A )Α.11101011B.11101010C.11101001D.111011103. ARM采用定长指令格式,所有指令都是32位,Bit[31:28]为( B )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是04. 8080处理器是( C )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器5. 把微处理器与外部设备相连接的线路称为( D )Α.电源线B.控制线C.数据线D.总线6. 嵌入式软件开发构建阶段的第一步是( A )Α.编译B.链接C.定址D.打包7. 以下有关进程和程序的说法错误的是( D )Α.进程是动态的B.程序是静态的C.一个程序可以对应多个进程D.程序就是进程8. 微软开发的嵌入式操作系统是( C )Α.RT-LinuxB.MontaVistaC.Windows CED.VxWorks9. ROM监视器是一个小程序,驻留在嵌入式系统的( B )Α.RAM中B.ROM中C.Flash中D.DOM中10.直接存储器存取的英文缩写是( A )Α.DMAB.DRAMC.ISAD.IRQ11. 以下不是嵌入式系统应用领域的是( C )Α.移动电话B.汽车电子C.办公系统D.军工航天12. 十进制数235,用八进制表达为( C )Α.351B.352C.353D.35413. ARM采用定长指令格式,所有指令都是32位,Bit[27:26]为( C )Α.目标寄存器编码B.指令操作符编码C.永远是0D.条件执行14. 80286处理器是( B )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器15. 厂家和用户为性能扩充或作为特殊要求使用的信号线称为( A )Α.备用线B.控制线C.数据线D.总线16. 嵌入式软件开发构建阶段的第二步是( B )Α.编译B.链接C.定址D.打包17. 以下有关进程和程序的说法错误的是( B )Α.进程是动态的B.一个进程可以对应多个程序C.一个程序可以对应多个进程D.程序不是进程18. WindRiver公司开发的嵌入式操作系统是( A )Α.VxWorksB.MontaVistaC.Windows CED.RT-Linux19. GDB中,用来设置断点的命令是( D )Α.killB.nextC.makeD.break20.1Byte等于( D )Α.1024KBB.1024KMC.1024GBD.8bit21. 以下不是嵌入式系统应用领域的是( A )Α.电子商务B.移动电话C.消费类电子产品D.军工航天22. 十进制数235,用十六进制表达为( A )Α.EBB.ECC.EAD.EE23. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( C )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是024. 80386处理器是( C )Α.8位处理器B.16位处理器C.32位处理器D.64位处理器25. 决定电源种类的线称为( C )Α.备用线B.控制线C.电源线D.数据线26. 嵌入式软件开发构建阶段的第三步是( B )Α.编译B.定址C.打包D.定址和打包27. 以下有关进程和程序的说法正确的是( C )Α.进程是静态的B.一个进程可以对应多个程序C.一个程序只能对应一个进程D.程序不是进程28. 以下不是嵌入式操作系统的是( A )Α.U-BootB.MontaVistaC.Windows CED.RT-Linux29. GDB中,用来显示源代码的命令是( B )Α.killB.listC.makeD.break30.1KB等于( B )Α.1024MBB.1024BC.1024GBD.8bit31. 以下不是嵌入式系统应用领域的是( A )Α.通用软件B.工业控制C.消费类电子产品D.机器人32. 十进制数100,用十六进制表达为( C )Α.62B.63C.64D.6533. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( B )Α.目标寄存器编码B.操作符编码C.第一个操作数寄存器D.永远是034. 80486处理器是( B )Α.64位处理器B.32位处理器C.16位处理器D.8位处理器35. 决定地线分别方式的线称为( D )Α.备用线B.控制线C.电源线D.地线36. 打包结束后得到的是一个( A )Α.二进制文件B.文本文件C.源文件D.汇编文件37. 以下有关进程和程序的说法正确的是( ABC )Α.进程是动态B.程序是静态的C.一个程序可以对应多个进程D.一个进程可以对应多个程序38. 以下是嵌入式操作系统的是( D )Α.U-BootB.VM WareC.EVCD.Windows CE39. GDB中,用来删除断点的命令是( B )Α.killB.clearC.makeD.break40.1MB等于( C )Α.1024BB.1024GBC.1024KBD.8bit41. 以下属于嵌入式系统应用领域的是( D )Α.移动电话B.工业控制C.机器人D.以上都是42. 十进制数100,用八进制表达为( A )Α.144B.145C.146D.14743. ARM采用定长指令格式,所有指令都是32位,Bit[20]为( C )Α.目标寄存器编码B.第一个操作数寄存器C.指示本指令操作是否影响CPSR的值D.永远是044. EMU只指( A )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统45. 不能确定总线功能的强弱以及适应性的是( D )Α.控制线B.时序信号线C.中断信号线D.地线46. 以下不是选择嵌入式系统编程语言的衡量标准的是( B )Α.位操作B.价格C.指针D.异常事件处理47. 以下不是线程的优点的选项是( D )Α.响应度高B.资源共享C.经济D.单处理器使用48. 以下是嵌入式操作系统的是( B )Α.VIVIB.RT-LinuxC.EVCD.VM Ware49. GDB中,执行下条源代码的命令是( D )Α.nextB.clearC.makeD.go50.1GB等于( C )Α.8bitB.1024BC.1024MBD.1024KB51. 以下不属于嵌入式系统应用领域的是( D )Α.消费类电子产品B.工业控制C.军工航天D.办公系统52. 十进制数100,用二进制表达为( D )Α.1100111B.1100010C.1100101D.110010053. ARM采用定长指令格式,所有指令都是32位,Bit[19:16]为( D )Α.目标寄存器编码B.永远是0C.指示本指令操作是否影响CPSR的值D.第一个操作数寄存器54. EMPU只指( B )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统55. 能确定总线功能的强弱以及适应性的是( C )Α.备用线B.地线C.中断信号线D.数据线56. 以下不是选择嵌入式系统编程语言的衡量标准的是( A )Α.以下都不是B.多任务支持C.程序控制结构D.异常事件处理57. 以下说法错误的是( B )Α.线程响应度高B.程序是动态的C.程序不是进程D.进程是动态的58. 以下不是Boot Loader的是( C )Α.VIVIB.U-BootC.RT-LinuxD.BLOB59. GDB中,显示帮助信息的命令是( B )Α.showB.helpC.seeD.browse60.1TB等于( C )Α.1024BB.1024KBC.1024GBD.1024MB61. 世界上第一台计算机诞生在( B )Α.英国B.美国C.法国D.苏联62. 十进制数123,用十六进制表达为( C )Α.70B.7AC.7BD.7C63. ARM采用定长指令格式,所有指令都是32位,Bit[15:11]为( B )Α.第一个操作数寄存器B.目标寄存器编码C.指示本指令操作是否影响CPSR的值D.永远是064. EDSP只指( B )Α.嵌入式微控制器B.嵌入式数字信号处理器器C.嵌入式微处理D.嵌入式片上系统65. 能确定数据传输的宽度的是( A )Α.数据线B.时序信号线C.中断信号线D.电源线66. 以下是选择嵌入式系统编程语言的衡量标准的是( D )Α.异常事件处理B.多任务支持C.程序控制结构D.以上都是67. 以下说法正确的是( A )Α.线程响应度高B.程序是动态的C.程序就是进程D.进程是静态的68. 以下是嵌入式系统的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux69. GDB中,显示表达式的值使用命令( A )Α.displayB.showD.list70.1024KB等于( C )Α.1TBB.1BC.1MBD.1GB71. 单片出现在20世纪( A )Α.70年代B.80年代C.90年代D.60年代72. 十进制数123,用二进制表达为( C )Α.1111101B.1111100C.1111011D.111101073. ARM采用定长指令格式,所有指令都是( B )Α.64位B.32位C.16位D.8位74. 以下说法错误的是( D )Α.寄存器的速度最快B.寄存器容量最小C.一般用来存储计算的操作数和结果D.寄存器位于处理器外部75. 不能决定总线功能的强弱以及适应性的信号线是( C )Α.控制信号线B.时序信号线C.中断信号线D.备用信号线76. 在做低功耗优化时,以下说法错误的是( A )Α.采用什么算法与降低功耗无关B.在采集系统中应尽量降低采集速率C.在通讯模块中应尽量提高传输的波特率D.CPU的工作时间与降低功耗有关77. 以下说法错误的是( A )Α.程序就是进程B.程序是静态的C.线程响应度高D.进程是动态的78. 以下不是引导程序的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux79. GDB中,终止被调试的程序可以使用命令( B )Α.clearB.killC.stopD.make80.1024MB等于( B )Α.1TBB.1GBC.1KBD.1B二填空题1.嵌入式系统的嵌入性特性,是指系统需要与物理世界中特定的环境和设备紧密结合。
ARM汇编语言面试题

ARM汇编语⾔⾯试题1. What registers are used to store the program counter and linker register?A:r15 and r14 are used to store the program counter and linker register, respectively.2. What is r13 ofter used to store?A:r13 are often used to store Stack Pointer3. Which mode, or modes has the fewest available number of registers available? How many and why?A: ARM has six operating modes, there are User、FIQ、IRQ、Supervisor、Abort and Undef.ARM Architecture version 4 also hasan operating mode called System. the modes of user and system can access the least registers, they can only access 17 registers, including r0-r15 and CPSR. the two modes can not access SPSR.4. Convert the _G_C_D algorithm given in this flowchart into 1)“normal”assembler, where only branches can be conditional. 2) ARM assembler,where all instructions are conditional, thus improving code density.“Normal” Assemblermov r0, #27mov r1, #9g_c_dcmp r0, r1beq stopblt less ;if r0 < r1(lt表⽰带符号数⼩于)sub r0, r0, r1bal g_c_d ; al-alwayslesssub r1, r1, r0bal gcdstopARM conditional assemblergcd cmp r0, r1subgt r0, r0, r1sublt r1, r1, r0bne gcd5. Specify instructions which will implement the following:a) r0 = 16 b) r1 = r0 *4c) r0 = r1/16 d) r1 = r2 * 7A: a) MOV r0, #16 b) MOV r1, r0, LSL #2c) MOV r0, r1, ASR #4 d) RSBr1, r2, r2, LSL #31. What will the following instructions do?a) ADDS r0, r1, r1, LSL #2 b) RSB r2, r1, #0A: a) r0 = r1 + r1 * 4 = r1 *5 and update the conditional flagsb) r2 = 0 – r12. What does the following instruction sequence do?ADD r0, r1, r1, LSL #1SUBr0, r0, r1, LSL #4ADD r0, r0, r1, LSL #7A:r0 = r1 * 115 = r1 * (128 – 13) = r1 * (128 – 16 + 3) = r1 * 3- r1 * 16 + r1 * 1288.rite a segment of code that add together elements x to x+(n-1) of anarray, where the element x = 0 is the first element of the array. Each element of the array is word size(ie. 32bits). The segment should use post-indexed addressing.At the start of your segment, you should assume that:r0 points to the start of the array, r1 = x, r2 = nA: ADD r0, r0, r1, LSL #2 ;set r0 to the address of element xADD r2, r0, r2, LSL #2 ;set r2 to the address of element x + nMOV r1, #0 ;initialize the counterloopLDR r3, [r0], #4 ;access the element and mov to the nextADD r1, r1, r3 ;add content to the counterCMP r0, r2 ;reach element x+n?BLT loop ;If not –repeat for next element;on exit, sum contained in r19.The contents of registers r0 to r6 need to be swapped around thus:r0 moved into r3r1 moved into r4r2 moved into r6r3 moved into r5r4 moved into r0r5 moved into r1r6 moved into r2Write a segment of code that use full descending stack operations to carry this out, and hence requires no use of any other registers for temporary storage.A: STMFD sp!,{r0-r6}LTMFD sp!, {r3, r4, r6}LTMFD sp!, {r5}LTMFD sp!, {r0-r2}10.Write a short code segment that performs a mode change by modifying thecontents of the CPSRThe mode your should change to is use mode which has the value 0x10This assume that the current mode is a privileged mode such as supervisor modeThis would happen for instance when the processor is reset – reset code woulud be run in supervisor mode which would then need to switch to usr mode before calling the main routine in your applicationYou will need to usr MSR and MRS, plus 2 logical operationsA:mmask EQU0x1fusermEQU 0x10#Start of here in supervisor modeMRSr0, cpsrBIC r0, r0, #mmaskORRr0, r0, #usermMSR cpsr, r0#End up here in user mode。
嵌入式ARM2011-2012学年第一学年期末考试试题及答案

一 填空题(请将答案填入题 括号中):共10小题,每小题2 ,满 20令 一般而言,嵌入式系统的构架可 分 4个部分 分别是 处理器 存储器 输入/输出和软件,一般软件 分 操 系统相关和 应用软件 个 要部分以 据嵌入式系统使用的微处理器,可 将嵌入式系统分 嵌入式微控 器, 嵌入式DSP处理器 , 嵌入式微处理器 及片 系统3 操 系统是联接硬件 用程序的系统程序,其基本功能有 进程管理 程间通信 内存管理 I/挂资源管理4 从嵌入式操 系统特点可 将嵌入式操 系统分 实时操 系统 和分时操 系统,其中实时系统 可分 硬实时系统 和软实时系统5 内 负责管理各个任务,或者 个任务分配CPU时间,并 负责任务之间的 通信 ,内 的基本服务是 任务 换6 嵌入式开发一般采用 宿主机/目标机方式 方式,其中宿 机一般是指 P台机或者 式机7 哈 体系结构数据空间和地址空间 开 ,ARM7TDMI采用 冯诺依曼体系 的内 架构8. ARM7TDMI采用 3 级流水线结构,ARM9以代TDMI采用 5 级流水线9 .按操 系统的分类可知,Dos操 系统属于 序执行操 系统,Unix操 系统属于 时 操 系统,Vx上o严ks 属于 实时嵌入式 操 系统令代 ARM7TDMI中,T表示支 令6位Thumb指 集,D表示 在片 调试 ,M表示内嵌乘法器Multiplie严,I表示 嵌入式I台E ,支 在线断点和调试二 选择题(请将答案填入题 括号中):共10小题,每小题2 ,满 20令 要使CPU能够 常工 , 列哪个条件 是处理器必 满足的 D进A远 处理器的编译器能够 生可重入 码 B 在程序中可 找开或者关闭中断进C远 处理器支 中断,并 能 生定时中断 D 有大 的存储空间以 面哪种操 系统最方便移植到嵌入式设备中 D进A远 D挂S B unix 进C远 上indows xp D linux3 面哪个选 是SUB设备的特点 B进A远 串行通信方式 B 可热拨插进C远 分读挂ST DEVICE和读UB D 通信速率比RS以3以快4 面哪种嵌入式操 系统很少用于手机终端设备 C进A远 Symbi且n B 上inCE 进C远 uc/os D linux5 哪 关于SRAM和DRAM的区别是 对 A进A远 SRAM比DRAM慢 B SRAM比DRAM耗电多进C远 DRAM存储密度比SRAM高得多 D DRM需要周期性 新6 uc/os操 系统 包含 哪几种状态 C进A远 运行 B 起 进C远 退出 D 休眠7 代x代7&代x令令的运算结果是 A进A远 代x代令 B 代x令令 进C远 代x令7 D 代x代78 哪种方式 是uc/os操 系统中任务之间通信方式 C进A远 信号 B 消息队列 进C远 邮件 D 邮箱9 哪种方式 是文件系统的格式 B进A远 FAT B D挂S 进C远 持TFS D Ext令代 在将uc/os操 系统移植到ARM处理器 时, 哪些文件 需要修改 A进A远 挂S_C挂RE.C B include.h 进C远 挂S_CPU.读 D 挂ST且skInit三 判断题:共5小题,每小题2 ,满 10令 所有的电子设备都属于嵌入式设备 F以 冯 依曼体系将被哈 总线所取 F3 嵌入式linux操 系统属于免费的操 系统 T4 移植操 系统时需要修改操 系统中 处理器直接相关的程序 T5 USB以.代的最大通信速率 令以M/S F简答题:共2小题,每小题10 ,满 201 据嵌入式系统的特点,写出嵌入式系统的定义用 中心 计算机技术 基础 软硬件可裁 功能 可靠性 成本 体 功耗 格要求的 用计算机系统2 试分析实时操 系统的工 状态特点及相互之间的转换运行 获得CPU的控就绪 入任务等待队列,通过调度中转 运行状态起 任务发生阻塞, 出任务等待队列,等待系统实时事件的发生而被唤醒,从而转 就绪或者运行休眠 任务完成或者错误等原因被清除的任务,也可 认 是系统中 存在的任务多任务四 析计算题:共2小题,每小题10 ,满 201 试写抢占式和非抢占式的区别执行的过程中对中断处理方式 一 ,抢先式 某一中断执行完成后,如果有更高优先级的任务处于就绪状态,将执行更高优先级任务,而非抢占式 一 ,一个任务只有 动放弃CPU的控 ,其它任务才能够获得CPU的控2 从嵌入式系统 层到 层 用软件,试分析嵌入式计算系统的组成 要分 哪几个部分,并写出各部分所完成的功能(1)硬件层 (2)中间层(嵌入式系统初始化,硬件相关的驱动程序) (3)软件层(操 系统 文件系统 GUI,网络及通用组件) (4)功能层五 专业 词解释(写出以下英文简写对应的中文 称):共5小题,每小题2 ,满 10令 RT挂S 以 CISC 3 Ke严nel 4 Schedule严 5 non-p严eemptive1 RTOS 实时操 系统2 CISC 复 指 集3 Kernel(内 )4 Scheduler 调度5 non-preemptive(非抢先式)期 试题——嵌入式ARM 可卷说明: 试卷共四大题,试卷满 100 ,考试时间120 钟一 填空题(请将答案填入题 括号中):共10小题,每小题2 ,满 20令 一般而言,嵌入式系统的构架可 分 4个部分 处理器 输入/输出和软件,一般软件 分 和 用软件 个 要部分以 据嵌入式系统使用的微处理器,可 将嵌入式系统分 ,嵌入式DSP, 及片 系统3 操 系统是联接硬件 用程序的系统程序,其基本功能有 程管理 I/挂资源管理4 从嵌入式操 系统特点可 将嵌入式操 系统分 实时操 系统和 ,其中实时系统 可分 和软实时系统5 内 负责管理各个任务,或者 个任务分配CPU时间,并 负责任务之间的 ,内 的基本服务是6 嵌入式开发一般采用 方式,其中宿 机一般是指7 哈 体系结构数据空间和地址空间 ,ARM9以代T采用 的内 架构8. ARM7TDMI采用 级流水线结构,ARM9以代TDMI采用 级流水线9 .按操 系统的分类可知,Dos操 系统属于 序执行操 系统,Unix操 系统属于 操 系统,Vx上o严ks属于 操 系统令代 ARM7TDMI中,T表示支 令6位Thumb指 集,D表示 ,M表示内嵌乘法器Multiplie严,I表示 ,支 在线断点和调试一 填空 10×2 ,共10小题题号 答案 题号 答案1 存储器 操 系统2 嵌入式微控制器 嵌入式微处理器3 进程间通信 内存管理4 时操 系统 硬实时操 系统5 通信 任务调度6 宿主机/目标机方式 P台机或者 式机7 开 哈 体系 8 3 59 时 实时嵌入式 10 在片 调试 嵌入式I台E二 选择题(请将答案填入题 括号中):共10小题,每小题2 ,满 20令 面哪种操 系统 属于商用操 系统 进B远A. windows xpB. LinuxC. Vx上o严ksD. 上inCE以. 面哪点 是嵌入式操 系统的特点 进 C 远A. 内 精简B. 用性强C. 功能强大D. 高实时性3. 面哪种 属于嵌入式系统的调试方法 进 D 远A. 模拟调试B. 软件调试C. BDM/JTA诺调试D. 单独调试4. 在嵌入式ARM处理器中, 面哪种中断方式优先级最高 进 A 远A. ResetB. 数据中C. FIQD. IRQ5. 持A持D FLAS读和持挂R FLAS读的区别 确的是 进 D 远A. 持挂R的 速度比持A持D稍慢一些B. 持A持D的写入速度比持挂R慢很多C. 持A持D的擦除速度 比持挂R的慢D.大多数写入操 需要先 行擦除操6. 面哪种嵌入式操 系统很少用在手机 进 D 远A. Symbi且nB. linuxC. 上in CED. Vx上o严ks7 代下令7&代下令令的运算结果是 进 A 远进A远代下代令 B 代下令令进C远代下令7 D 代下代78 哪种方式 属于文件系统的格式 进 B 远进A远FAT B D挂S进C远持TFS D E下T9 在将UC/挂S操 系统移植到ARM处理器 时, 哪些文件 需要修改 进 A 远进A远挂S_C挂RE.C B I持CLUDE.读进C远挂S_CPU.读 D 挂ST ASK I持IT令代 面哪个特点 属于SUB设备的特点 进 B 远 进A远 串行通信方式 B 可热拨插进C远 分读挂ST DEVICE和读UB D 通信速率比RS以3以快题号 1 2 3 4 5答案 可 台 D A D题号 6 7 8 9 10答案 D A 可 A 可三 判断题:共5小题,每小题2 ,满 10令 所有的电子设备都属于嵌入式设备以 CISC将被RISC所取 .3 嵌入式linux操 系统属于免费的操 系统4 移植操 系统时需要修改操 系统中 处理器直接相关的程序5 嵌入式开发需要 门的软件和硬件设备简答题:共2小题,每小题10 ,满 203 据嵌入式系统的特点,写出嵌入式系统的定义4 写出uc/os操 系统在某一任务 在执行时发生中断的处理过程四 析计算题:共2小题,每小题10 ,满 201 从 层硬件到 层 用软件,试分析嵌入式计算系统的组成 要分 哪几个部分,并写出各部分所完成的功能2 写出嵌入式实验箱FLASH分区特点 及文件烧写过程(包括vivi kernel root yaffs文件)五 专业 词解释(写出以下英文简写对应的中文 称):共5小题,每小题2 ,满 10令 RISC 以 IP 3 ISR 4 JTA诺 5 IDE附录 二 答案及评 标准样 :嵌入式ARM 可卷 答案及评 标准二 填空 10×2 ,共10小题题号 答案 题号 答案1 存储器 操 系统2 嵌入式微控制器 嵌入式微处理器3 进程间通信 内存管理4 时操 系统 硬实时操 系统5 通信 任务调度6 宿主机/目标机方式 P台机或者 式机7 开 哈 体系 8 3 59 时 实时嵌入式 10 在片 调试 嵌入式I台E二 选择题 10×2题号 1 2 3 4 5答案 可 台 D A D题号 6 7 8 9 10答案 D A 可 A 可三 判断题题号 1 2 3 4 5答案 X X √√√四:1 用 中心 计算机技术 基础 软硬件可裁 功能 可靠性 成本 体 功耗 格要求的 用计算机系统2 中断现有程序-保护现场-执行中断服务程序-判断当前程序优先级或是否允许任务调度—(否)执行原来程序(是)执行更高优先级任务-返回五1(1)硬件层(2)BSP(3)RTOS(4)文件系统,GUI(5) 用软件六: 6 RISC Reduce Instruct Set Computer 7 IP Intellectual Property 8 ISR(Interrupt Servers Routine) 9 JTAG(Join Test Active Group) 10 IDE(Integrate Development Environment)南昌大学 2006~2007学年第学年第一一学期期末考试试卷试卷编 试卷编 ( B)卷课程课程编 编 编 课程 称课程 称 嵌入式系统 考试形式考试形式 卷 适用班 适用班 2003 计算机 姓 姓 学 学 班 班 学院学院 信息工程学院 专业专业 计算机应用 考试日期考试日期题 一四五七九十总分 累分人 签题分 100 得分考生注意 项 1 本试卷共4页,请查看试卷中是否有缺页或破损 如有立即举手报告 便更换 2 考试结束 ,考生不得将试卷 答题纸和草稿纸带出考场一、 填空题(每空2分,共40分)得分 评阅人1 嵌入式系统的 计可 分成 个阶段 分析 和2 目前使用的嵌入式操作系统 要有 和3 XScale 微处理器使用的是ARM 版内核和指 集4 微处理器有两种总线架构,使用数据和指 使用 一接口的是 ,分开的指 和数据接口 取指和数据 可 并行进行的是5 ARM 微处理器有七种工作模式,它们分 两类 中用户模式属于6 ARM 核有两个指 集,分别是7 ARM 微处理器复位 ,PC R15 的地址通常是 , 初始的工作模式是8 在ARM体系构架中对复杂的内存管理是通过系统控制协处理器和MMU 存储管理部件 来进行的 当系统发生异常和异常时,异常处理程序透过嵌入式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页面, 保证程序正常执行9 构建嵌入式系统开发 境的工 链有多种, 中开放源码的工 链是,ARM 提供的工 链是二、指令和程序测试题(共24分)得分评阅人令 写一条 ARM 指 ,完成操作r令 = r以 * 4 4分2 初始值R2=5,R3=4,R4=3,执行指 SUBS R2,R3,R4,LSR #2 ,寄存器R2,R3的值分别是多少? 4分3 有如 程序段,画出程序流程图,并回答执行程序 R0的值是多少 8分 num 司QU 以startMO三 r代, #令MO三 r令, #6MO三 r以, #3BL arithfuncstopB stoparithfuncCMP r代, #numMO三HS pc, lrA号R r3, JumpTableL号R pc, 后r3,r代,LSL#以]JumpTable号C号 (.上OR号) 号oA 注意 使用A号S开发工 用伪指 号C号号C号 (.上OR号) 号oS 使用GNU开发工 用伪指 .上OR号号oAA号号 r代, r令, r以MO三 pc, lr号oSSUB r代, r令, r以MO三 pc,lr司N号3 Boot Loader在嵌入式系统中 要起什么作用?完成哪些 要的工作?4 简述嵌入式系统的概念 组成及特点5 搭建嵌入式开发 境,连接目标板,一般使用什么通信接口连接?在Windows 机 使用什么软件建立连接?在Linux 机 使用什么软件建立连接?6 简述再进行基于ARM核的嵌入式系统软件开发时,调用如 函数的规则 定20062006~~2007学年第一学期嵌入式系统学年第一学期嵌入式系统参考答案参考答案参考答案一、 填空题(每空2分,共40分)令、设计 实以、 上indows CE/上indows Mobile 三x上ork Linux uCos Symbian QNX 任选3、 ARMV5TE4、 冯.若依曼结构 哈 结构5、 非特权模式 特权模式 非特权模式6、 ARM 标humb7、 代x代 Supervisor 或管理模式 8、 CP令5 Data Abort 数据异常 Prefetch Abort 指 预取异常 9、GNU 工 链 ADS 工 链二、 指令和程序测试题(共24分)令 MO三 R令,R以,LSL #3 (4分) 以 R2=3,R3=4 (4分) 3 R代 代执行DoA ,R代 代执行DoS ,流程图略 R0=5 (8分) 4 程序: (8分)startCMP r代, r令 S栈BL标 r令, r令, r代 S栈BG标 r代, r代, r令 BNE start三、 问答题(共36分)令 嵌入式系统开发需要交 编译和在线调试的开发 境, 要包括宿 机目 机 评估电路板基于J标AG 的ICD 仿真器 或调试监控软件 或在线仿真器ICE运行于宿 机的交 编译器和链接器 开发工 链或软件开发 境 嵌入式操 系统以 R令5用于程序计数寄存器PC,R13通常用来做堆 指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址3 Boot Loader 是在嵌入式系统复位启动时,操 系统内核运行前,执行的一段程序 通过Boot Loader ,初始化硬件设备,建立内存和I/O 空间映射图, 最终 载操 系统内核调整好适当的系统软硬件 境4 嵌入式系统是 应用 中心, 计算机技术 基础,采用可剪裁软硬件,适用于对 能 可靠性 成本 体积 耗等有严格要求的专用计算机系统 一般由嵌入式微处理器 外围硬件设备 嵌入式操 系统 用户的应用程序等四个部分组成 特点有嵌入式系统通常是面向特定应用的 嵌入式系统是将先进的计算机技术 半导体技术和电子技术 各个行业的 体应用相结合后的产物嵌入式系统的硬件和软件都必须高效率地设计, 体裁衣 去除冗余 嵌入式系统和 体应用有机地结合在一起,它的升级换 也是和 体产品同 进行了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中嵌入式系统本身 备自举开发能力5 RS-以3以, 太网口 并口在Windows 机 使用超级终端软件在Linux 机 使用Minicom软件6 基于ARM核的嵌入式系统软件开发时,调用函数和子程序通过R0——R3四个寄存器传递参数,超过四个参数使用堆 传递 因 arg1通过R0传入,arg2, 通过R1传入,arg3通过R2传入,arg4通过R3传入20020077~20020088学年第一学期嵌入式系统参考答案学年第一学期嵌入式系统参考答案 B一、 填空题(每空2分,共40分)令、 七 非特权模式 特权模式 非特权模式 以、 ARM Thumb T 3、 R15 SP4、 冯.若依曼结构 哈 结构5、 0x0 Supervisor 或管理模式6、 CP令5 Data Abort 数据异常 Prefetch Abort 指 预取异常7、 little endian 小端对齐 big endian 大端对齐8、 GNU 工具链 ADS 工具链 二、 指令测试题(共12分) 令 ADD R令,R以,R以,LSL #以 (4分) 以 R0=03H ,R1=23H (4分) 3 将R0-R11十二个寄 器中的32位数据, 储到R12地址指针 起始地址的内 中,地址的操 方式是先操 后增加,并更新地址 (4分) 三、 程序测试题(共24分)令 程序 (8分) loopLDR r令, [r0], #4 ADD r4, r4, r令 CMP r令, #0 BNE loop以 R0 0调用DoA ,R0 令调用DoS ,R0大于2直接返回,流程图略 R0=38分)3 //输出源串和目 串 8分//调用strcopy 函数//输出复制后的源串和目 串;r令指向源串,从源串载入一个 节的 符到r以,并更新r令=r令+令;r0指向目 串,从r以保 一个 节的 符到目 串,并更新r0=r0+令 ;测试串尾 志\0 ;非零转 号strcopy ;返回四、 问答题 每题6分,共24分)令 令 嵌入式系统开发需要交 编译和在线调试的开发环境, 要包括宿 机目 机 评估电路板基于J标AG 的ICD 仿真器 或调试监控软件 或在线仿真器ICE运行于宿 机的交 编译器和链接器 开发工具链或软件开发环境 嵌入式操 系统以 FD FA ED EA ATPCS 编程规范约定使用的堆 是FD3 Boot Loader 是在嵌入式系统复位启动时,操 系统内 运行前,执行的一段程序 通过Boot Loader ,初始化硬件设备,建立内 和I/O 空间映射图, 最终加载操 系统内 调整好适当的系统软硬件环境4 据ATPCS编程规范,调用函数和子程序通过R0——R3四个寄 器传递参数,超过四个参数使用堆 传递 因此arg1通过R0传入,arg2, 通过R1传入,arg3通过R2传入,arg4通过R3传入面哪种操 系统 属于商用操 系统 BA. windows xpB. LinuxC. 三x上orksD. 上inCE面哪点 是嵌入式操 系统的特点 进 C 远A. 内 精简B. 用性强C. 能强大D. 高实时性面哪种 属于嵌入式系统的调试方法进 D 远A. 模拟调试B. 软件调试C. BDM/J标AG调试D. 单独调试在嵌入式ARM处理器中, 面哪种中断方式优先级最高进 A 远A. ResetB. 数据中C. FIQD. IRQNAND FLA分H和NOR FLA分H的区别 确的是进 D 远A. NOR的读 度比NAND稍慢一些B. NAND的写入 度比NOR慢很多C. NAND的擦除 度 比NOR的慢D.大多数写入操 需要先 行擦除操面哪种嵌入式操 系统很少用在手机进 D 远A. 分y造bi且nB. 速inuxC. 上in CED. 三x上orks代下令7叙代下令令的 算结果是进 A 远A.代下代令 B.代下令令C.代下令7D.代下代7哪种方式 属于文件系统的格式进 B 远A.FA标B.DO分C.N标F分D.E下标系统响应时间和 业吞吐 是衡 计算机系统性能的重要指 对于一个持续处理业 的系统而言,进 B 远表明 性能越好A.响应时间越短, 业吞吐 越小B.响应时间越短, 业吞吐 越大C.响应时间越长, 业吞吐 越大D.响应时间 会影响 业吞吐面关于计算机存储原理说法错误的是 BA. 存储器由大 存储 制数据的存储单元组成B. 数据总线从存储器中获取数据的过程称 写操C. 程序执行时,读取指 是指计算机自动从存储器中取出一条指D. 虚拟存储技术缓解 存容 小的矛盾面关于操 系统的 述 确的是A. 操 系统管理系统全部硬件资源 软件资源和数据资源B. 操 系统是最靠 硬件的一层应用软件C. 操 系统是用户 计算机的接口D. 操 系统是程序 数据的集合虚拟存储器的 用是允许程序直接 问比内存更大的地址空间,它通常使用 B 它的一个 要组成部A. 软盘B. 硬盘C. CD-ROMD. 寄存器面哪种机制是锁定范围最小的互斥方法 BA. 关中断B. 使用测试指 并置位指C. 禁 任 换D. 信号面哪种结构 属于嵌入式操 系统体系结构 BA. 单块结构B. B/分结构C. C/分结构D. 层次结构面哪点 是嵌入式标CP/IP网络系统的特点进 C 远A. 裁B. 扩展C. 采用直接内存拷贝D. 采用静态 配技术J标AG的基本原理是在各个芯片的I/O端口增 D 捕获端口信息A. 模拟调试B. 软件调试C. OCDD. B分C在嵌入式ARM处理器中, 面哪种中断方式优先级最高进 A 远A. ResetB. 数据中C. FIQD. IRQNAND FLA分H和NOR FLA分H的区别 确的是进 D 远A. NOR的读 度比NAND稍慢一些B. NAND的写入 度比NOR慢很多C. NAND的擦除 度 比NOR的慢D.大多数写入操 需要先 行擦除操面哪种嵌入式操 系统很少用在手机进 D 远A. 分y造bi且nB. 速inuxC. 上in CED. 三x上orks代下令7叙代下令令的 算结果是进 A 远A.代下代令 B.代下令令C.代下令7D.代下代7哪种方式 属于文件系统的格式进 B 远A.FA标B.DO分C.N标F分D.E下标在将栈C/O分操 系统移植到ARM处理器 时, 哪些文件 需要修改进 A 远A.O分_CORE.CB. INCL栈DE.HC.O分_CP栈.HD.O分标A分K I NI标面关于计算机存储原理说法错误的是 BA. 存储器由大 存储 制数据的存储单元组成B. 数据总线从存储器中获取数据的过程称 写操C. 程序执行时,读取指 是指计算机自动从存储器中取出一条指D. 虚拟存储技术缓解 存容 小的矛盾面关于操 系统的 述 确的是A. 操 系统管理系统全部硬件资源 软件资源和数据资源B. 操 系统是最靠 硬件的一层应用软件C. 操 系统是用户 计算机的接口D. 操 系统是程序 数据的集合虚拟存储器的 用是允许程序直接 问比内存更大的地址空间,它通常使用 B 它的一个 要组成部A. 软盘B. 硬盘C. CD-ROMD. 寄存器如果采用别的文件 来书写造且kefi速e,比如M且ke .速inux,则在 行的时候要采用 A 选项A.-f B.-c C.-iD.-n且造e一般而言,嵌入式系统的构架 4个部 :处理器 存储器 输入/输出和软件,一般软件亦 操 系统相关 和应用软件两个 要部嵌入式系统软件开发 需求 析 , 软件 计 , 编码 调试 ,测试 四种嵌入式软件交叉开发 境包括宿 机, 目 机 ,物理连接和逻辑连接 物理连接的连接方式 要有 种:串口 太口 OCD从嵌入式操 系统特点 将嵌入式操 系统 实时操 系统和 时操 系统 , 中实时系统亦 硬实时操 系统 和软实时系统内 负责管理各个任 ,或者 个任 配CP栈时间,并 负责任 之间的 通信 ,内 的基本服 是 任 调度嵌入式开发一般采用 宿 机/目 机 方式, 中宿 机一般是指 PC机/ 式机成优先级反转的 要原因是使用了 信号 方法 来保护临界资源, 初始值一般 令大多数嵌入式系统有两种时钟源, 别 实时时钟RTC , 定时器/计数器操 系统是联接硬件 应用程序的系统程序, 基本 能有 程管理 内存管理 文件管理 I/O资源管理哈 体系结构数据空间和地址空间 开 ,ARM9工代标采用 哈 的内 架构ARM7标DMI采用 左 级流水线结构,ARM9工代标DMI采用 5 级流水线写出uc/os操 系统在某一任 在执行时发生中断的处理过程中断 有程序-保护 场-执行中断服 程序-判断当前程序优先级或是否允许任 调度—(否)执行原来程序(是)执行更高优先级任 -返回嵌入式系统总是要用户对 或寄存器 行位操 给定一个整型 a,写两段 码,第一个 置a的bit 3,第 个清除a 的bit 3 在 两个操 中,要保持 它位#define BI标左 进代x令 可可 左远st且tic int 且;void set_bit左进void远{且 |台 BI标左;}void c速e且r_bit左进void远{且 叙台 ~BI标左;}据嵌入式系统的特点,写出嵌入式系统在单处理器平 所提供的 要 步 互斥 通讯机制,并简要 述信号 :用于基本的互斥 步件 组 :用于 步异步信号:用于 步邮箱 消息队列:用于消息通信管道:提供非结构化数据交换和实 步骤写出判断ABCD四个表达式的是否 确, 若 确, 写出 过表达式中a的值int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);a = ?C错误, 侧 是一个有效 , 能赋值, 改 进++且远 +台 且;改 答案依次 9,令代,令代,令令专业名词解释(写出以下英文简写对应的中文名称):令 RI分C :精简指 集计算机工 MIP分 :无互锁流水级的微处理器左 I分R:中断服 程序4 J标AG:联合测试行 组织请画图 述嵌入式Boot速o且der启动过程,并简要介绍 要部从固态存储 备 启动的Boot速o且der大多都是 两个阶段的启动过程, st且ge令和st且ge工两部分t且ge令: 硬件 备初始化载Boot速o且der的st且ge工准备RAM空间拷贝Boot速o且der的st且ge工到RAM空间置好堆跳转到st且ge工的C入口点分t且ge工: 初始化本阶段要使用到的硬件 备检测到系统内存映射将kerne速映 和 文件系统映 从f速且sh 读到RAM空间中内 置启动参数调用内。
arm嵌入式系统试题及标准答案

arm嵌入式系统试题及标准答案一、选择题1. ARM的英文全称为()。
A. Advanced RISC MachinesB. Advanced Reduced Instruction Set ComputingC. Advanced Risk Instruction Set MachinesD. Advanced Reduced Innovative System Machines 正确答案:A2. ARM的发展平台主要有()。
A. CortexB. Keil MDKC. MbedD. All of the above正确答案:D3. ARM架构中,RISC指的是()。
A. Reduced Instructions for Simple ComputingB. Reduced Instruction Set ComputingC. Reduced Instructions for Speedy ComputingD. Reduced Innovative System Computing正确答案:B4. ARM的家族庞大,主要分为()。
A. ARMv1-ARMv5B. ARMv6-ARMv7C. ARMv8-ARMv12D. ARMv12-ARMv16正确答案:B5. 在ARM处理器中,Cortex-A系列主要针对()。
A. 浮点运算B. 实时性C. 安全性D. 性能正确答案:D二、填空题1. ARM架构的特点之一是指令集精简,采用()指令集。
正确答案:RISC(Reduced Instruction Set Computing)2. ARM处理器的体积小、功耗低的特点使得其在()领域得到广泛应用。
正确答案:嵌入式系统3. ARM主要设计并销售()和相关的软件开发工具、IP核等。
正确答案:处理器4. Keil MDK是由ARM公司开发的()。
正确答案:集成开发环境5. ARM Cortex-M系列处理器适用于对能耗和成本有严格要求的()。
嵌入式系统_ARM_试题

一、选择题1、以下说法不正确的是(B )。
A、任务可以有类型说明B、任务可以返回一个数值C、任务可以有形参变量D、任务是一个无限循环2下列描述不属于RISC计算机的特点的是(C)。
A.流水线每周期前进一步。
B.更多通用寄存器。
C.指令长度不固定,执行需要多个周期。
D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。
3 存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为(D)。
A、0x21B、0x68C、0x65D、0x024 μCOS-II中对关键代码段由于希望在执行的过程中不被中断干扰,通常采用关中断的方式,以下X86汇编代码正确而且不会改变关中断之前的中断开关状态的是(D)A. 先CLI、执行关键代码、再STIB. 先STI、执行关键代码、再CLIC. 先POPF、CLI、执行关键代码、再PUSHFD. 先PUSHF、CLI、执行关键代码、再POPF。
5 RS232-C串口通信中,表示逻辑1的电平是(D )。
A、0vB、3.3vC、+5v~+15vD、-5v~-15v6 ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。
A. R0 = R2 + (R3 << 1)B. R0 =( R2<< 1) + R3C. R3= R0+ (R2 << 1)D. (R3 << 1)= R0+ R27 IRQ中断的入口地址是(C)。
FIQ的入口地址为0x0000001CA、0x00000000B、0x00000008C、0x00000018D、0x000000148 S3C2420X I/O口常用的控制器是(D)。
(1)端口控制寄存器(GPACON-GPHCON)。
(2)端口数据寄存器(GPADAT-GPHDAT)。
(3)外部中断控制寄存器(EXTINTN)。
嵌入式系统设计试题库完整

注意:考试时,每个人的题都不一样,大概一共30(选择题、填空题两种)个题,约一个小时的时间,题的数据、答案排列顺序会发生改变,切忌不能死记答案,不然会留下遗憾。
一、单项选择题(在备选答案中只有一个是正确的,将它选出填入空格中,每小题1分,共20分)1、在CPU和物理内存之间进行地址转换时,( B)将地址从虚拟(逻辑)地址空间映射到物理地址空间。
A.TCB B.MMU C.CACHE D.DMA2、进程有三种状态:( C)。
A.准备态、执行态和退出态 B.精确态、模糊态和随机态C.运行态、就绪态和等待态 D.手工态、自动态和自由态3、以下叙述中正确的是(C)。
A.宿主机与目标机之间只需要建立逻辑连接即可B.在嵌入式系统中,调试器与被调试程序一般位于同一台机器上C.在嵌入式系统开发中,通常采用的是交叉编译器D.宿主机与目标机之间的通信方式只有串口和并口两种4、中断向量是指(C)。
A.中断断点的地址 B.中断向量表起始地址C.中断处理程序入口地址 D.中断返回地址5、在微型计算机中,采用中断方式的优点之一是(C)。
A.简单且容易实现B.CPU可以不工作C.可实时响应突发事件 D.传送速度最快6、在ARM处理器中,(A)寄存器包括全局的中断禁止位,控制中断禁止位就可以打开或者关闭中断。
A.CPSR B.SPSR C.PC D.IR7、嵌入式系统的三要素下面哪一个不是:( B )。
A、嵌入B、存储器C、专用D、计算机8、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0的值为()。
A、 0x2000B、0x28C、 0x2008D、0x879、μCOS-II操作系统属于( B )。
A、顺序执行系统B、占先式实时操作系统C、非占先式实时操作系统D、分时操作系统10、ARM寄存器组有( C )个状态寄存器。
A、7B、32C、6D、3711、C++源程序文件的默认扩展名为( A )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单项选择题(每空2分,共10分)1、对寄存器R1的内容乘以4的正确指令是( )○4①LSR R1,#2 ②LSL R1,#2③MOV R1,R1, LSL #2 ④MOV R1,R1, LSR #22、下面指令执行后,改变R1寄存器内容的指令是( ○4 )。
①TST R1,#2 ②ORR R1,R1,R1 ③CMP R1,#2 ④EOR R1,R1,R13、 MOV R1,#0x1000LDR R0,[R1],#4执行上述指令序列后,R1寄存器的值是( ○2 )。
①0x1000②0x1004③0x0FFC④0x44、当进行数据写操作时,可能Cache未命中,根据Cache执行的操作不同,将Cache分为两类()①数据Cache和指令Cache ②统一Cache和独立Cache ③写通Cache和写回Cache ④读操作分配Cache和写操作分配Cache5、一个异步传输过程:设每个字符对应8个信息位、偶校验、2个停止位,如果波特率为2400,那么每秒钟能传输的最大字符数为()个。
① 200,② 218,③ 240,④ 2400得分阅卷人二、填空(共18分)1、嵌入式处理器可分为以下4类:( )。
2、ARM处理器总共有()个寄存器,这些寄存器按其在用户编程中的功能可划分为:()和(),这些寄存器根据ARM处理器不同工作模式,可将全部寄存器分成()组,在使用中有()特点。
3、ARM 4种存储周期的基本类型分别为:()。
4、S3C44B0X UART单元发送器能够检测的四种异步串行通信数据错误为( )。
得分阅卷人简答题:(每空6分,共30分)1、从硬件系统来看,嵌入式系统由哪几部分组成?画出简图。
基于ARM的嵌入式程序开发要点ARM-CHINA-040415A基于ARM的嵌入式系统程序开发要点(一)——嵌入式程序开发过程ARM 系列微处理器作为全球16/32位RISC处理器市场的领先者,在许多领域内得到了成功的应用.近年来,ARM在国内的应用也得到了飞速的发展,越来越多的公司和工程师在基于ARM的平台上面开发自己的产品.与传统的4/8位单片机相比,ARM的性能和处理能力当然是遥遥领先的,但与之相应,ARM的系统设计复杂度和难度,较之传统的设计方法也大大提升了.本文旨在通过讨论系统程序设计中的几个基本方面,来说明基于ARM的嵌入式系统程序开发的一些特点,并提出和解决了一些常见的问题.文章分成几个相对独立的章节刊载.第一部分讨论基于ARM的嵌入式程序开发和移植过程中的一些基本概念.1.嵌入式程序开发过程不同于通用计算机和工作站上的软件开发工程,一个嵌入式程序的开发过程具有很多特点和不确定性.其中最重要的一点是软件跟硬件的紧密耦合特性. (不带操作系统支持) (带操作系统支持)图-1:两类不同的嵌入式系统结构模型这是两类简化的嵌入式系统层次结构图.由于嵌入式系统的灵活性和多样性,上面图中各个层次之间缺乏统一的标准,几乎每一个独立的系统都不一样. 这样就给上层的软件设计人员带来了极大地困难.第一,在软件设计过程中过多地考虑硬件,给开发和调试都带来了很多不便;第二,如果所有的软件工作都需要在硬件平台就绪之后进行,自然就延长了整个的系统开发周期.这些都是应该从方法上加以改进和避免的问题.为了解决这个问题,工程和设计人员提出了许多对策.首先在应用与驱动(或API)这一层接口,可以设计成相对统一的一些接口函数,这对于具体的某一个开发平台或在某个公司内部,是完全做得到的.这样一来,就大大提高了应用层应用(Application)驱动/板级支持包(Driver/BSP)硬件(Hardware)应用(Application)硬件抽象层(HAL)硬件(Hardware)操作系统(OS)标准接口函数(API)基于ARM的嵌入式程序开发要点ARM-CHINA-040415A软件设计的标准化程度,方便了应用程序在跨平台之间的复用和移植.对于驱动/硬件抽象这一层,因为直接驱动硬件,其标准化变得非常困难甚至不太可能.但是为了简化程序的调试和缩短开发周期,我们可以在特定的EDA工具环境下面进行开发,通过后再进行移植到硬件平台的工作.这样既可以保证程序逻辑设计的正确性,同时使得软件开发可平行甚至超前于硬件开发进程. 我们把脱离于硬件的嵌入式软件开发阶段称之为"PC软件"的开发,可以用下面的图来示意一个嵌入式系统程序的开发过程."PC软件"开发移植,测试产品发布图-2:嵌入式系统产品的开发过程在"PC软件"开发阶段,可以用软件仿真,即指令集模拟的方法,来对用户程序进行验证.在ARM公司的开发工具中,ADS 内嵌的ARMulator和RealView 开发工具中的ISS,都提供了这项功能.在模拟环境下,用户可以设置ARM处理器的型号,时钟频率等,同时还可以配置存储器访问接口的时序参数.程序在模拟环境下运行,不但能够进行程序的运行流程和逻辑测试,还能够统计系统运行的时钟周期数,存储器访问周期数,处理器运行时的流水线状态(有效周期,等待周期,连续和非连续访问周期)等信息.这些宝贵的信息是在硬件调试阶段都无法取得的,对于程序的性能评估非常有价值.为了更加完整和真实地模拟一个目标系统,ARMulator和ISS还提供了一个开放的API编程环境.用户可以用标准C来描述各种各样的硬件模块,连同工具提供的内核模块一起,组成一个完整的"软"硬件环境.在这个环境下面开发的软件,可以更大程度地接近最终的目标.利用这种先进的EDA工具环境,极大地方便了程序开发人员进行嵌入式开发的工作.当完成一个"PC软件"的开发之后,只要进行正确的移植,一个真正的嵌入式软件就开发成功了.而移植过程是相对比较容易形成一套规范的流程的,其中三个最重要的方面是:考虑硬件对库函数的支持移植移植开发/实验/测试平台最终产品基于ARM的嵌入式程序开发要点ARM-CHINA-040415A符合目标系统上的存储器资源分布应用程序运行环境的初始化2.开发工具环境里面的库函数如果用户程序里调用了跟目标相关的一些库函数,则在应用前需要裁剪这些函数以适合在目标上允许的要求.主要需要考虑以下三类函数:访问静态数据的函数访问目标存储器的函数使用semihosting(半主机)机制实现的函数这里所指的C库函数,除了ISO C标准里面定义的函数以外,还包括由编译工具提供的另外一些扩展函数和编译辅助函数.2.1 裁剪访问静态数据的函数库函数里面的静态数据,基本上都是在头文件里面加以定义的.比如CTYPE类库函数,其返回值都是通过预定义好的CTYPE属性表来获得的.比如,想要改变isalpha() 函数的缺省判断,则需要修改对应CTYPE属性表里对字符属性的定义.2.2 裁减访问目标存储器的函数有一类动态内存管理函数,如malloc() 等,其本身是独立于目标系统而运行的;但是它所使用的存储器空间需要根据目标来确定.所以malloc() 函数本身并不需要裁剪或移植,但那些设置动态内存区(地址和空间)的函数则是跟目标系统的存储器分布直接相关的,需要进行移植.例如堆栈的初始化函数__user_initial_stackheap(),是用来设置堆(heap)和栈(stack)地址的函数,显然针对每一个具体的目标平台,该函数都需要根据具体的目标存储器资源进行正确移植.下面是对示例函数__user_initial_stackheap() 进行移植的一个例子:__value_in_regs struct __initial_stackheap __user_initial_stackheap( unsigned R0, unsigned SP, unsigned R2, unsigned SL){struct __initial_stackheap config;config.heap_base = (unsigned int) 0x11110000;// config.stack_base = SP; // optionalreturn config;}基于ARM的嵌入式程序开发要点ARM-CHINA-040415A请注意上面的函数体并不完全遵循标准C的关键字和语法规范,使用了ARM公司编译器(ADS 或RealView Compilation tool) 里的C语言扩展特性.关于编译器特定的C语言扩展,请参考相关的编译器说明,这里简单介绍函数__user_initial_stackheap() 的功能,它主要是返回堆和栈的基地址.上面的程序中只对堆(heap) 的基地址进行了设置(设成了0x11110000),也就是说用户把0x11110000开始的存储器地址用作了动态内存分配区(heap区).具体地址的确定是要由用户根据自己的目标系统和应用情况来确定的,至少要满足以下条件: 0x11110000开始的地址空间有效且可写(是RAM)该存储器空间不与其它功能区冲突(比如代码区,数据区,stack区等)因为__user_initial_stackheap() 函数的全部执行效果就是返回一些数值,所以只要符合接口的调用标准,直接用汇编来实现看起来更加直观一些: EXPORT __user_initial_stackheap__user_initial_stackheapLDR r0,0x11110000MOV pc,lr如果不对这个函数进行移植,编译过程中将使用缺省的设置,这个设置适用于ARM公司的Integrator系列平台.(注意:ARM的编译/连接工具链也提供了绕过库函数来设置运行时存储器模型的方法,请参阅ARM公司其他的相关文档.)2.3 裁剪使用semihosting(半主机)机制实现的函数库函数里有一大部分函数是涉及到输入/输出流设备的,比如文件操作函数需要访问磁盘I/O,打印函数需要访问字符输出设备等.在嵌入式调试环境下,所有的标准C库函数都是有效且有其缺省行为的,很多目标系统硬件不能支持的操作,都通过调试工具来完成了.比如printf() 函数,缺省的输出设备是调试器里面的信息输出窗口.但是一个真实的系统是需要脱离调试工具而独立运行的,所以在程序的移植过程当中,需先对这些库函数的运行机制作一了解.下图说明了在ADS下面这类C库函数的结构.基于ARM的嵌入式程序开发要点ARM-CHINA-040415A图-3:C库函数实现过程中的层次调用如图中例子所示,函数printf() 最终是调用了底层的输入/输出函数_sys_write() 来实现输出操作的,而_sys_write() 使用了调试工具的内部机制来把信息输出到调试器.显然这样的函数调用过程在一个真实的嵌入式系统里是无法实现的,因为独立运行的嵌入式系统将不会有调试器的参与.如果在最终系统中仍然要保留printf() 函数,而且在系统硬件中具备正确的输出设备(如LCD等),则在移植过程中,需要把printf() 调用的输出设备进行重新定向.考察printf() 函数的完整调用过程:图-4:printf() 的调用过程单纯考虑printf() 的输出重新定向,可以有三种途径实现:改写printf() 本身改写 fput()改写 _sys_write()需要注意的是,越底层的函数,被其他上层函数调用的可能性越大,改变了一个底层函数的实现,则所有调用该函数的上层函数的行为都被改变了.以fputc() 的重新实现为例,下面是改变fputc() 输出设备到系统串行通信端口的实例:int fputc(int ch, FILE *f)ANSI CInput/outputErrorhandlingStack &heap setupOtherSemihosting Support应用程序调用的函数,如printf()设备驱动程序级使用semihosting机制如_sys_write()由调试系统执行printf() fput() _sys_wite()输出设备其他函数其他函数C 库函数调试辅助环境基于ARM的嵌入式程序开发要点ARM-CHINA-040415A{ /* e.g. write a character to an UART */char tempch = ch;sendchar(&tempch); // UART driverreturn ch;}代码中的函数sendchar() 假定是系统的串口设备驱动函数.只要新建函数fput() 的接口符合标准,经过编译连接后,该函数实现就覆盖了原来缺省的函数体,所有对该函数的调用,其行为都被新实现的函数所重新定向了.具体哪些库函数是跟目标相关的,这些函数之间的相互调用关系等,请参考具体的编译器说明.3.Semihosting (半主机) 机制上面提到许多库函数在调试环境下的实现都调用了一种叫semihosting的机制.Semihosting具体来讲是指一种让代码在ARM 目标上运行,但使用运行了ARM 调试器的主机上I/O 设备的方法;也就是让ARM 目标将输入/ 输出请求从应用程序代码传递到运行调试器的主机的一种机制.通常这些输入/输出设备包括键盘,屏幕和磁盘I/O.半主机由一组已定义的SWI 操作来实现.库函数调用相应的SWI(软件中断),然后调试代理程序处理SWI 异常,并提供所需的与主机之间的通讯.图-5:Semihosting的实现过程多数情况下,半主机SWI 是由库函数内的代码调用的.但是应用程序也可以直接调用半主机SWI.半主机SWI 的接口函数是通用的.当半主机操作在硬件仿真器,指令集仿真器,RealMonitor或Angel下执行时,不需要进行移植处理.使用单个SWI 编号请求半主机操作.其它的SWI 编号可供应用程序或操printf()printf("Hello world! ");SWI调试器Hello world!C 库代码应用程序代码与运行在主机上的调试器通信主机屏幕上显示的文本目标主机基于ARM的嵌入式程序开发要点ARM-CHINA-040415A作系统使用.用于半主机的SWI号是:在ARM 状态下:0x123456在Thumb 状态下:0xABSWI 编号向调试代理程序指示该SWI 请求是半主机请求.要辨别具体的操作类型,用寄存器r0 作为参数传递.r0 传递的可用半主机操作编号分配如下: 0x00-0x31:这些编号由ARM 公司使用,分别对应32个具体的执行函数.0x32-0xFF:这些编号由ARM 公司保留,以备将来用作函数扩展.0x100-0x1FF:这些编号保留给用户应用程序.但是,如果编写自己的SWI 操作,建议直接使用SWI指令和SWI编号,而不要使用半主机SWI 编号加这些操作类型编号的方法.0x200-0xFFFFFFFF:这些编号未定义.当前未使用并且不推荐使用这些编号.半主机SWI使用的软件中断编号也可以由用户自定义,但若是改变了缺省的软中断编号,需要:更改系统中所有代码(包括库代码)的半主机SWI 调用重新配置调试器对半主机请求的捕捉与相应这样才能使用新的SWI 编号.有关半主机SWI处理函数实现的更详细信息,请参考ARM编译器的相关文档.4.应用环境的初始化和根据目标系统资源进行的移植在下一期中介绍应用环境和目标系统的初始化.基于ARM的嵌入式程序开发要点ARM-CHINA-040415A基于ARM的嵌入式系统程序开发要点(二)——系统的初始化过程基于ARM的芯片多数为复杂的片上系统集成(SoC),这种复杂的系统里多数的硬件模块都是可配置的,需要由软件来设置其需要的工作状态.因此在用户的应用程序启动之前,需要有专门的一段启动代码来完成对系统的初始化.由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都使用汇编语言.系统启动程序所执行的操作跟具体的目标系统和开发系统相关,一般通用的内容包括:中断向量表初始化存储器系统初始化堆栈初始化有特殊要求的端口,设备初始化应用程序执行环境改变处理器模式呼叫主应用程序1.中断向量表ARM要求中断向量表必须放置在从0地址开始,连续8×4字节的空间内(ARM720T和ARM9/10及以后的ARM处理器也支持从0xFFFF0000开始的高地址向量表,在本文的其他地方对此不再另加说明).各个中断矢量在向量表中的位置分配如下图:图1:中断向量表每当一个中断发生以后,ARM处理器便强制把PC指针置为向量表中对应中Reset 复位中断 0x00Undef 未定义指令中断 0x04Software Interrupt 软件中断 0x08Prefetch Abort 指令预取异常 0x0CData Abort 数据异常 0x10(Reserved) 保留 0x14IRQ 普通外部中断 0x18FIQ 外部快速中断 0x1C… …基于ARM的嵌入式程序开发要点ARM-CHINA-040415A断类型的地址值.因为每个中断只占据向量表中1个字的存储器空间,只能放置1条ARM指令,所以通常在向量表中放的是跳转指令,使程序能从向量表里跳转到存储器里的其他地方,再执行中断处理.中断向量表的程序实现通常如下所示:AREA Boot, CODE, READONLYENTRYB Reset_Handler ; Reset_Handler is a labelB Undef_HandlerB SWI_HandlerB PreAbort_HandlerB DataAbort_HandlerB . ; for reserved interrupt, stop hereB IRQ_HandlerB FIQ_Handler其中的关键字ENTRY是指定编译器保留这段代码,因为编译器可能会认为这是一段冗余代码而加以优化.连接的时候要确保这段代码被链接在0地址处, 并且作为整个程序的入口点(关键字ENTRY并非总是用来设置程序入口点,所以通常需要在连接选项里显式地指定程序入口点).2.初始化存储器系统初始化存储器系统的编程对象是系统的存储器控制器.存储器控制器并不是ARM内核的一部分,不同的系统其设计不尽相同,所以应该针对具体的要求来完成这部分的程序设计.一般来说,下面这两个方面是比较通用的.2.1.存储器类型和时序配置一个复杂的系统可能存在多种存储器类型的接口,需要根据实际的系统设计对此加以正确配置.对同一种存储器类型来说,也因为访问速度的差异,需要不同的时序设置.通常Flash 和SRAM同属于静态存储器类型,可以合用同一个存储器端口;而DRAM 因为动态刷新和地址线复用等特性,通常配有专用的存储器端口.存储器端口的接口时序优化是非常重要的,影响到整个系统的性能.因为一般系统运行的速度瓶颈都存在于存储器访问,所以存储器访问时序应尽可能地快;但同时又要考虑由此带来的稳定性问题.只有根据具体选定的芯片,进行多次的测试之后,才能确定最佳的时序配置.2.2.存储器地址分布(memory map)基于ARM的嵌入式程序开发要点ARM-CHINA-040415A有些系统具有非常灵活的存储器地址分配特性,进行存储器初始化设计的时候一定要根据应用程序的具体要求来完成地址分配.一种典型的情况是启动ROM的地址重映射(remap).如前面第1节所述,当一个系统上电后程序将自动从0地址处开始执行,因此在系统的初始状态,必须保证在0地址处存在正确的代码,即要求0地址开始处的存储器是非易性的ROM或Flash等.但是因为ROM或Flash的访问速度相对较慢,每次中断发生后都要从读取ROM或Flash上面的向量表开始,影响了中断响应速度.因此有的系统便提供一种灵活的地址重映射方法,可以把0地址重新指向到RAM中去. 在这种地址映射的变化过程当中,程序员需要仔细考虑的是程序的执行流程不能被这种变化所打断.比如下面这种情况:图2:启动ROM的地址重映射对程序执行流程的影响系统上电后从Flash内的0地址开始执行,启动代码位于地址0x100开始的空间,当执行到地址0x200时,完成了一次地址的重映射,把原来0开始的地址空间由Flash转给了RAM.接下去执行的指令(这里为了简化起见,忽略流水线指令预取的模型)将来自从0x204开始的RAM空间.如果预先没有对RAM内容进行正确的设置,则里面的数据都是随机的,这样处理器在执行完0x200地址处的指令之后,再往下取指执行就会出错.解决的方法就是要使RAM在使用之前准备好正确的内容,包括开头的向量表部分.有的系统不具备存储器地址重映射的功能,所有的空间地址就相对简单一些,不需要考虑这方面的问题.3.初始化堆栈因为ARM处理器有7种执行状态,每一种状态的堆栈指针寄存器(SP)都Flash0x0100(Reset_Handler)B Reset_Handler… …...(boot code)..(remap)0x00000x0200RAM0x0200remap 0x0204Vector Table基于ARM的嵌入式程序开发要点ARM-CHINA-040415A是独立的(System和User模式使用相同的SP寄存器).因此对程序中需要用到的每一种模式都要给SP寄存器定义一个堆栈地址.方法是改变状态寄存器CPSR 内的状态位,使处理器切换到不同的状态,然后给SP赋值.注意不要切换到User 模式进行User模式的堆栈设置,因为进入User模式后就不能再操作CPSR回到别的模式了.可能会对接下去的程序执行造成影响.一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器.堆栈性能的提高对系统整体性能的影响是非常明显的.这是一段堆栈初始化的代码示例,其中只定义了三种模式的SP指针:MRS R0, CPSR ; CPSR -> R0BIC R0, R0, #MODEMASK ; 安全起见,屏蔽模式位以外的其它位ORR R1, R0, #IRQMODE ; 把设置模式位设置成需要的模式MSR CPSR_cxsf, R1 ; 转到IRQ模式LDR SP, =UndefStack ; 设置 SP_irqORR R1,R0,#FIQMODEMSR CPSR_cxsf, R1 ; FIQModeLDR SP, =FIQStackORR R1, R0, #SVCMODEMSR CPSR_cxsf, R1 ; SVCModeLDR SP, =SVCStack注意上面的程序中使用到的3个SP寄存器是不同的物理寄存器:SP_irq,SP_fiq和SP_svc.引用的几个标号假设已经正确定义.4.初始化有特殊要求的端口,设备这要由具体的系统和用户需求而定.一般的外设初始化可以在系统初始化之后进行.比较典型的应用是驱动一些简单的输出设备,如LED等,来指示系统启动的进程和状态.5.初始化应用程序执行环境一个简单的可执行程序的映像结构通常如下:基于ARM的嵌入式程序开发要点ARM-CHINA-040415A图3:程序映像的结构映像一开始总是存储在ROM/Flash里面的,其RO部分既可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中去;而RW和ZI这两部分必须是需要转移到可写的RAM里去的.所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零.不同的工具链会提供一些不同的机制和方法帮助用户完成这一步操作,主要是跟链接器(Linker)相关.下面是在ARM开发工具环境(ADS或RVCT)下,一种常用存储器模型的直接实现:LDR r0, =|Image$$RO$$Limit ; Get pointer to ROM dataLDR r1, =|Image$$RW$$Base| ; RAM copy addressLDR r3, =|Image$$ZI$$Base| ; Zero init base => top of initialised data CMP r0, r1 ; Check that they are differentBEQ %F1CMP r1, r3 ; Copy init dataLDRCC r2, [r0], #4 ; ([r0] -> r2) and (r0+4)STRCC r2, [r1], #4 ; (r2 -> [r1]) and (r1+4)BCC %B01LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segmentMOV r2, #02CMP r3, r1STRCC r2, [r3], #4 ; (0 -> [r3]) and (r3+4)BCC %B2程序实现了RW数据的拷贝和ZI区域的清零功能.其中引用到的4个符号是由连接器(linker)定义输出的:|Image$$RO$$Limit|:表示RO区末地址后面的地址,即RW数据源的起始地址. |Image$$RW$$Base|:RW区在RAM里的执行区起始地址,也就是编译选项RW_Base指定的地址;程序里是RW数据拷贝的目标地址.ZI (Zero initialized R/W Data)RW (R/W Data)RO (Code + RO Data)编译结果定义时带初始值的全局变量只定义了变量名的全局变量基于ARM的嵌入式程序开发要点ARM-CHINA-040415A|Image$$ZI$$Base|:ZI区在RAM里面的起始地址.|Image$$ZI$$Limit|:ZI区在RAM里面的结束地址后面的一个地址.程序先把ROM里 |Image$$RO$$Limit| 开始的RW初始数据拷贝到RAM里|Image$$RW$$Base| 开始的地址,当RAM这边的目标地址到达|Image$$ZI$$Base| 后就表示RW区的结束和ZI区的开始,接下去就对这片ZI 区进行清零操作,直到遇到结束地址 |Image$$ZI$$Limit|.6.改变处理器模式ARM处理器(V4架构以后的版本)一共有7种执行模式:User: 用户模式FIQ: 快速中断响应模式IRQ: 一般中断响应模式Supervisor:超级模式Abort: 出错处理模式Undef: 未定义模式System: 系统模式除用户模式以外,其他6种模式都是特权模式.因为在初始化过程中许多操作需要在特权模式下才能进行(比如CPSR的修改),所以要特别注意不能过早地进入用户模式.一般地,在初始化过程中会经历以下一些模式变化:图4:处理器模式变换过程在最后阶段才把模式转换到最终应用程序运行所需的模式,一般是用户模式.内核级的中断使能(CPSR的I,F位状态)也可以考虑在这一步进行.如果系统中另外存在一个专门的中断控制器(多数情况下是这样的),这么做总是安全的,否则就需要考虑过早地打开中断可能带来的问题,比如在系统初始化完成之前就触发了有效中断,导致系统的死机.7.呼叫主应用程序当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序.最简单的一种情况是:复位后的缺省模式注意不要进入用户模式用户选择(堆栈初始化阶段)超级模式(Supervisor)多种特权模式变化设置成用户程序运行模式基于ARM的嵌入式程序开发要点ARM-CHINA-040415AIMPORT main ; get the label main if main() is defined in other files B man ; jump to main()直接从启动代码跳入应用程序主函数入口,主函数名字可由用户自己定义.在ARM ADS环境中,还另外提供了一套系统级的呼叫机制.IMPORT __mainB __main__main()图5:在应用程序主函数之前插入__main__main() 是编译系统提供的一个函数,负责完成库函数的初始化和第5节中所描述的功能,最后自动跳向main() 函数.这种情况下用户程序的主函数名字必须得是main.用户可以根据需要选择是否使用__main().如果想让系统自动完成系统调用(如库函数)的初始化过程,可以直接使用__main();如果所有的初始化步骤都是由用户自己显式地完成,则可以跳过__main().当然,使用__main() 的时候,可能会涉及到一些库函数的移植和重定向问题.在__main() 里面的程序执行流程如下图所示:图6:有系统调用参与的程序执行流程关于在__main() 里面调用到的库函数说明,可以参阅相关的编译器文档,库函数移植和重定向的方法,可以参考上一期文章里面的相关章节.Image Entry Point__main·copy code and data·zero initialize__rt_entry·initialize library fu nctions·call top-level constructors(C++)·Exit from application·Reset handler·user boot codeUser application·main__User_initial_stackheap·set up stack & heap启动代码应用程序初始化用户应用程序main()基于ARM的嵌入式程序开发要点。