ARM预习:使用的教材:《 ARM9 嵌入式系统设计——基于 S3C2410 与 Linux 》,北京航空航天大学出版社
一、 嵌入式系统基础
1. 嵌入式系统也是计算机系统,其和普通电脑有何主要区别?
(1) 嵌入式系统采用的是最精简操作系统,普通电脑采用的是大容量操作系统;
(2)嵌入式系统的硬件结构结合具体应用场合进行选择,普通电脑的硬件结构大而全。
(3)嵌入式系统可能没有人机交互界面,普通电脑则必须具备该界面。
2. 如何理解嵌入式系统的软硬件可剪裁?
(1)嵌入式系统的软件可剪裁是指操作系统和应用程序可根据需要进行删减;
(2)嵌入式系统的硬件可剪裁是指处理器的外接功能可根据需要进行删减。
3. 嵌入式系统应用到各个领域,如何理解“嵌入”二字?
(1)从功能角度来看,不同行业的嵌入式系统有不同软硬件功能;
(2)从外观角度来看,先有不同行业设备,后有嵌入式系统嵌入到该设备当中。
4. 嵌入式系统家电和普通家电的区别是什么?
最主要区别:嵌入式系统家电拥有操作系统,普通家电则没有。
5. 功耗为什么会成为嵌入式系统关键指标?
(1)客户对无线移动电子产品的待机时间长度要求越来越高;
(2)特殊行业设备的电池更换难度大。
6. 简述Flash和SRAM的主要区别。
(1)Flash断电后信息保留,而SRAM断电后则信息丢失;
(2)SRAM用作嵌入式系统的处理器缓存,Flash用作嵌入式系统的存储器。
7. 嵌入式系统的硬件主要由哪些部分组成?
(1)处理器核:处理器内核和外设控制器组成;
(2)外设:触摸屏、鼠标、存储器、电源、I/O等;
(3)传感器。
8. 嵌入式系统的软件主要由哪些部分组成?
(1)顶层应用软件;(2)操作系统;(3)底层硬件驱动程序。
9. 是不是所有嵌入式系统都有人机交互界面?为什么?
不是。因为某些行业设备的嵌入式系统不需要和用户进行数据交互,就能够完成任务。
10. ARM公司是否生产芯片?其主营业务是什么?
ARM公司并不生产芯片。其主营业务是设计16/32位RISC微处理器架构,向众多的芯片生产商提供知识产权。
11. 嵌入式系统和单片机系统的最主要区别是什么?
(1)嵌入式系统具有操作系统,而单片机系统则没有;
(2)嵌入式系统主流处理器是32位处理器,而单片机系统主流处理器是4/8/16位处理器;
(3)嵌入式系统具有专用性,而单片机系统具有通用性。
12. 32位嵌入式微处理器的32位是指什么?
32位嵌入式微处理器的32位是指该处理器可以对 个地址进行寻址。
13. 物联网和互联网可以互相利用吗?物联网依赖什么设备获取物体信息?
物联网和互联网可以互相利用。物联网依赖传感器获取物体信息。
14. 简述SOC的概念。
(1)SOC全称是System on Chip(片上系统);
(2)SOC利用知识产权核(IP核)将系统的所有功能集成在一个芯片上。
15. 简述IP核的概念。
(1)IP核全称是Intellectual Property(知识产权核);
(2)IP核是指设计者可以对自己设计完成电路模块所申请的知识产权;
(3)IP核有3种形式:硬核、软核和固核。
16. 嵌入式操作系统也是操作系统,其和类似于Windows 10操作系统有何主要区别?
(1)嵌入式操作系统容量很小(以KB为单位),而通用操作系统容量大(以GB为单位);
(2)嵌入式操作系统优先响应外部异常,而通用操作系统则没有;
(3)嵌入式操作系统实时性比通用操作系统的要高。
17. 嵌入式操作系统有不同种类,用在火星探测器上的是哪一个?
用在火星探测器上的嵌入式操作系统是Vxworks.
18. 代码的可移植是指什么?
代码的可移植是指同一代码可以在不同型号处理器的计算机平台上运行。
19. 当前最热门嵌入式操作系统是什么系统?是否开放源码和免费使用?
当前最热门嵌入式操作系统是Linux,其开放源码和免费使用。
2. 嵌入式系统开发过程
1. 何为宿主机?何为目标机?两者可以合二为一吗?
(1)用于进行嵌入式软件开发的通用计算机称为宿主机;
(2)嵌入式软件最终运行所在的平台称为目标机;
(3)除了目标机为仿真机的情况,两者不可以合二为一。
2. 如何理解交叉开发环境的“交叉”二字?
交叉二字是指开发软件和运行软件不在同一个平台上进行。
3. 嵌入式系统开发工作可以分为哪三个层次?
(1)从底层硬件开始开发;
(2)从驱动程序开发和操作系统移植开始;
(3)从现成平台开始顶层应用程序开发。
4. 交叉编译链接生成哪两种类型的可执行文件?
(1)调试用的可执行文件;(2)固化的可执行文件。
5. 简述高级语言和汇编语言编程优缺点?
(1)高级语言程序可移植,但是效率低、速度慢;
(2)汇编语言程序不可移植,但是效率高、速度块。
6. 嵌入式系统调试方法有哪三种?以一种处理器模拟另一种处理器的运行的是哪一种?
(1)嵌入式系统调试方法有:源程序模拟器方式、监控器方式、仿真器方式;
(2)以一种处理器模拟另一种处理器的运行的是源程序模拟器方式。
7. 嵌入式系统的仿真器调试方式是否进入嵌入式操作系统?其主要任务是什么?
仿真器调试方式不进入嵌入式操作系统,其主要任务是通过微处理器外部特设的通信口直接访问各种寄存器、存储器资源,并执行相应的调试指令。
8. JTAG全称是什么?简述JTAG接口主要功能。
JTAG全称是Joint Test Action Group(联合测试行动组)。JTAG接口主要用于测试集成度高的微处理器功能,只需5根引脚就可以实现芯片在线测试(仿真)的功能。
9. 简述板级支持包主要功能。
(1)充当操作系统和硬件设备的桥梁;
(2)为设备驱动程序提供访问硬件的接口。
3. ARM 体系结构
(一)
1. ARM的全称及其中文表达是什么?
ARM: Advanced RISC Machines,先进精简指令集计算机。
2. 简述ARM处理器的3大特点?
(1)耗电少、成本低、功能强;
(2)16位/32位双指令集;
(3)全球众多合作伙伴保证供应
3. RISC的全称及其中文表达是什么?
RISC:Reduced Instruction Set Computer,精简指令集计算机
4. 简述Cache,寄存器和存储器这三者区别。
(1)Cache和寄存器都位于处理器内部,存储器位于处理器之外;
(2)Cache速度最快,寄存器次之,存储器最慢。
5. AMBA的全称及其中文表达是什么?其包含哪3组总线?
(1)AMBA:Advanced Microcontroller Bus Architecture,先进微控制器总线结构;
(2)AMBA包括3组总线:APB、AHB、ASB
6. ARM处理器有多少个寄存器?通用和状态寄存器各几个?
ARM处理器有37个寄存器。其中通用寄存器有31个,状态寄存器有6个。
7. 6级流水线是指哪6个步骤?哪些步骤访问存储器?
(1)6级流水线的6个步骤:取指、译码、取操作数、执行运算、存储器访问、
结果写回寄存器;
(2)一般情况下访问存储器的步骤有:取指、存储器访问。
8. 3级流水线是指哪3个步骤?哪些步骤访问存储器?
(1)3级流水线的3个步骤:取指、译码、执行;
(2)一般情况下访问存储器的步骤有:取指。
9. 5级流水线是指哪5个步骤?哪些步骤访问存储器?
(1)5级流水线的5个步骤:取指、指令译码、执行、数据缓存和写回;
(2)一般情况下访问存储器的步骤有:取指、数据缓存。
10. 以3级流水线为例子说明流水线结构高速率的原因。
(1)3级流水线包括3个步骤:取指、译码、执行,一般情况下这3个步骤占用不同资源,所以它们可以独立运行;
(2)在3级流水线情况下,一条指令到达执行步骤时,可以对另外两条指令分别进行译码和取指,从长远来看,指令的处理速率是原来的3倍。
11. 简述出现流水线阻塞的原因。
出现流水线阻塞的原因在于多周期指令和后续指令占用相同资源(存储器和数据通路)。
12. ARM处理器核有没有I/O部件?如要访问I/O端口采用何种方式?
ARM处理器核没有I/O部件,如要访问I/O端口采用存储器映像I/O的方式,即把I/O端口地址作为特殊的存储器地址(把I/O端口看成存储器端口)。
13. DMA方式被应用在哪些场合?需要处理器介入吗?
DMA方式被应用在在I/O的数据流量比较大和中断处理比较频繁的场合,I/O的数据块
直接传送至存储器的缓冲器区域,不需要处理器介入。
14. 简述JTAG调试接口5个测试信号主要功能。
(1)TRST:测试复位输入信号;(2)TCK:测试时钟;(3)TMS:测试模式选择信号;
(4)TDI:测试数据输入线;(5)TDO:测试数据输出线。
15. ARM7采用几级流水线?其最高时钟频率是多少?
ARM7采用3级流水线,其最高时钟频率是66MHz.
16. ARM9采用几级流水线?其最高时钟频率是多少?
ARM9采用5级流水线,其最高时钟频率是200MHz.
17. MMU的全称及其中文表达是什么?
MMU:Memory Management Unit,存储器管理单元。
(二)
1. 在字对准数据中,字16是指哪4个字节?在半字对准数据中,半字4是指哪2个字节?
字16是指字节16、字节17、字节18、字节19,半字4是指字节4、字节5.
2. ARM体系结构支持哪几种处理器模式?简述FIQ模式的功能。
ARM体系结构支持7种处理器模式。FIQ模式称为快速中断请求模式,用于支持高速数
据传送或通道处理。
3. 32位ARM指令的32位是指什么?
32位ARM指令的32位是指每条指令长度为32位(每条指令占4个字节)。
4. ARM处理器寄存器的位宽是多少?
ARM处理器寄存器的位宽是32位。
5. 寄存器R13,R14和R15的英文简称分别是什么?
寄存器R13,R14和R15的英文简称分别是SP,LR,PC.
6. 简述寄存器R13功能。
寄存器R13常作为堆栈指针(SP)。堆栈指针指向一片特殊存储器区域,该区域称为堆栈。当异常发生时,堆栈用于保护现场(保存被异常处理程序占用的寄存器的值);当异常处理程序结束时,将这些已保存的值从堆栈中重新加载到刚被占用的寄存器,恢复现场。
7. 简述寄存器R14功能。
寄存器R14称为链接寄存器(LR),主要功能包括:(1)用于保存子程序返回地址或异常返回地址;(2)子程序或异常结束后,将LR的内容写入PC,返回主程序。
8. 简述寄存器R15功能。
寄存器R15为程序计数器(PC),主要功能包括:(1)读PC时,从PC读取的值是处理器正在取指的指令地址;(2)写PC时,写入PC 的值被当作一个指令地址,程序从这个地址处继续取指(相当于执行一次无条件跳转)。
9. 三级流水线中正在取指指令地址为什么是正在执行指令地址加8?
(1)三级流水线包括:取指、译码、执行;
(2)由三级流水线结构可知,正在执行的指令的下一条指令处于译码阶段,而正在译码的指令的下一条指令处于取指阶段;
(3)每条指令占4个字节(32位),地址是以字节为单位进行排序的,正在执行的指令和正在取指的指令隔了一条指令,所以正在执行的指令的地址加上8就是正在取指的指令的地址。
10. 简述寄存器R15最低两位为0的原因。
(1)寄存器R15(PC)里面的内容是某条指令的地址;
(2)存储器地址从0开始,相邻指令的地址相差4个字节,因此指令地址用二进制码表示时的最低两位为0;
(3)综合(1)(2),寄存器R15最低两位为0.
11. 程序状态状态寄存器(PSR)的保留位,条件码标志位和中断禁止位各有多少位?
程序状态状态寄存器(PSR)保留位有20位,条件码标志位有4位和中断禁止位有2位。
12. 简述程序状态保存寄存器SPSR作用。
(1) 程序状态寄存器(PSR)分为当前程序状态寄存器(CPSR)和程序状态保存寄存器(SPSR);
(2)当异常发生时,SPSR用于保留CPSR的状态;异常结束时,把SPSR传送回CPSR。
13. 结合LR,PC,CPSR和SPSR四个寄存器来说明ARM处理器进入异常的过程。
(1)将下一条指令地址加上偏移量(由异常类型决定)存入LR;
(2)将CPSR复制到SPSR中;
(3)将CPSR模式位强制设置为与异常类型相对应的值;
(4)将相关的异常向量存入PC,开始从跳转地址取指,进入异常处理程序。
14. 简述异常向量作用。
(1)异常处理程序被存放在存储器某片固定区域中,该片区域的起始地址称为异常向量;
(2)在异常发生时,PC从异常向量开始取指,ARM处理器依赖异常向量得以进入异常处理程序。
15. 简述大端和小端存储系统区别。
(1)大端存储系统从数据线低位开始存储高地址字节数据;
(2)小端存储系统从数据线低位开始存储低地址字节数据。
16. ARM系统是如何实现I/O端口输入和输出?
(1)ARM完成I/O功能是使用存储器映射I/O,即把I/O端口看作存储器地址;
(2)从存储器映射I/O地址加载用于输入,向存储器映射I/O地址存储用于输出。
(3)存储器映射I/O位置的操作不同于一个正常存储器的操作。
(三)
1. 出现Load-store 结构的原因是什么?
(1)数据平时是存放在存储器中的;
(2)ARM指令只对寄存器中的数据进行处理。
2. 寻址是指对什么内容寻址?ARM指令有几种寻址方式?
(1)寻址是指对真实操作数寻址;
(2)ARM指令有9种寻址方式。
3. 算术右移时高端空位值由什么因素决定?
算术右移时高端空位值由源操作数的符号位决定
4. 简述寄存器间接寻址的过程。
(1)操作数的地址存放在寄存器中;
(2)根据该地址从存储器中存取操作数。
5. 指出R0和[R0]的区别。
(1)R0是指寄存器R0中的操作数;
(2)[R0]是指寄存器R0中的地址所指向存储器单元中操作数(当R0中的数据是地址时)。
6. 简述前变址寻址和后变址寻址的区别。
(1)前变址寻址是先更新操作数地址,然后传送操作数;
(2)后变址寻址的先传送操作数,后更新基址寄存器(下一操作数地址)。
7. 简述“ ! ” 符号在前变址寻址中的作用。
在前变址寻址中使用到“ ! ” 符号表示传送操作数后自动更新基址寄存器。
8. 在多寄存器寻址中,基地址寄存器每次更新时自动增加多少?
在多寄存器寻址中,基地址寄存器每次更新时自动增加4个字节。
9. 简述堆栈的作用及其类型。
(1)堆栈是一个按后进先出(LIFO)进行存取的存储区域,用于保存异常发生时各寄存器值;
(2)堆栈的类型有:满递增、满递减、空递增、空递减。
10. 简述块复制寻址的作用及其与堆栈寻址的异同点。
(1)块复制寻址的作用是将一块数据从存储器的某一位置复制到另一位置;
(2)复制寻址和堆栈寻址都是针对存储器进行块数据操作,都采用多寄存器存储和加载指
令:LDM指令和STM指令;
(3)堆栈寻址按后进先出顺序进行数据存取,堆栈寻址按设定顺序进行数据存取。
11. 简述相对寻址的过程。
PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。
(四)
1. ARM指令是三地址格式,三地址是指哪三个地址?
三地址是指:目标寄存器地址、第1个操作数寄存器地址、第2个操作数地址。
2. 简述ARM指令中后缀“S”的作用。
后缀“S”用来区分是否根据执行结果修改条件码标志。
3. ARM指令集有多少种基本指令类型?分成几大类?简述每一大类指令的作用。
(1)ARM指令集由13种基本指令类型组成,分成4大类;
(2)存储器访问指令:控制存储器和寄存器之间的数据传送;
数据处理指令:使用片内ALU、桶形移位器和乘法器完成高速数据处理操作;
分支指令:控制程序执行流程、指令优先级以及ARM代码和Thumb代码的切换;
协处理器指令及杂项与伪指令:专用于控制外部协处理器。
4. 简述ARM指令中数据类型B,SB,H,SH和D的含义。
B:对无符号字节;SB:对有符号字节(仅LDR);H:对无符号半字;
SH:对有符号半字(仅LDR);D:双字。
5. 解释下列指令具体含义:
(1)LDRHI R1 , [R2 , #100]!
有条件地将R2+100指向地址的字节数据加载到R1,R2ßR2+100.
(2)STR R2 , [R9 , #4000]
将R2的数据存储到R9+4000地址.
(3)STR R3 , [R4] , #6
将R3的数据存储到R4地址,R4ßR4+6.
(4)LDRSB R5 , label
加载位于标号label地址中的字节到R5,带符号扩展.
(5)LDRSH R2 , [R1 , R4]
R2ß[R1+ R4],加载16位半字,带符号扩展到32位.
(6)LDRGTD R2 , [R7] , R5
有条件地R2ß[R7],R3ß[R7+4],R7ßR7+R5,加载64位双字.
(7)STRB R1 , [R2 , -R5 , ASR #3]
R1à[R2-R5/8],存储R1的最低有效字节,R2和R5不变.
(8)LDMIB R2! , {R3-R8}
[R2+4]àR3,R2ßR2+4,[R2+8]àR4,……
(9)STMED R13! , {R7-R9}
R9à[R13],R13ßR13-4 ,R8à[R13-4],……
(10)SWPB R1 , R1 , [R0]
将R0指向存储单元的低字节数据与R1的低字节数据交换(高24位清零).
(五)
1. 说明立即数#20和立即数#0x20的区别。
立即数#20表示10进制数20;立即数#0x20表示16进制数20,对应10进制数32.
2. 说明0x104是合法常量,而0x102则不是的原因。
(1)0x104展开为二进制数:000100000100,由01000001(8位位图)循环左移2位(偶数位)得到;
(2)0x102展开为二进制数:000100000010,不能由8位常数循环移位偶数位得到。
3. 说明指令SUBS和指令CMP的作用,并指出两者区别。
(1)CMP指令将第一操作数减去第二操作数,根据操作的结果更新CPSR中的相应条件标志位(N/Z/C/V),以便后面的指令根据相应的条件标志来判断是否执行;
(2)SUBS指令将第一操作数减去第二操作数,将相减结果存放在第一操作数寄存器,根据操作的结果更新CPSR中的相应条件标志位(N/Z/C/V),以便后面的指令根据相应的条件标志来判断是否执行;
(3)CMP指令不保存运算结果,而SUBS指令保存运算结果。
4. 解释下列指令具体含义:
(1) MOVS R2, R0, LSR #3
R2=R0/8,并影响标志位。
(2) MVN R1, #0x12
R1=0xFFFFFFED.
(3) ADDS R3, R4, R5, LSL #2
R3=R4+R5×4,并影响标志位。
(4) RSBS R3, R4, R5, LSL #3
R3=(R5×8)-R4,并影响标志位。
(5) SUBS R1, R1, R3
R1=R1-R3,并影响标志位。
(6) RSC R1, R2, #20
R1=20-R2- !Carry .
(7) ANDNE R1, R1, #0x0F
(有条件地)R1=R1 & 0x0F(保留R1中的低四位)。
(8) TST R1, #0xF
将寄存器R1的值与0xF按位作逻辑“与”操作(判断R1的低4位是否为0)。
(9) MULS R1, R2, R3
R1=R2×R3,并影响标志位(CPSR中的N位和Z位)。
(10)SMLAL R2, R3, R7, R6
(R3、R2)=R7×R6+(R3、R2).
5. 说明使用ADC实现64位加法的过程(也可以用例子说明)。
使用ADC实现64位加法,第一个64位数存于R3(高32位)、R2中,第二个64位数存于R5(高32位)、R4中,相加结果存于R3(高32位)、R2中。
应用示例:
ADDS R2,R2,R4 ;R2等于低32位相加,并影响标志位
ADC R3,R3,R5 ;R3等于高32位相加,并加上低位进位
è (R3、R2)=(R3、R2)+(R5、R4)
(六)
1. 解释下列指令具体含义:
(1) B 0xFF ;
PC←0xFF.
(2) BL 0xFF ;
LR←PC+4,PC←0xFF.
(3) BX R1;
PC←R1,根据R1最低位切换处理器状态.
(4) MRS R1,CPSR;
读取CPSR状态寄存器的值,保存到R1中.
(5) MSR CPSR_c,R1;
将R1寄存器值写到CPSR寄存器的对应控制域.
(6) ADR R1, label;
将程序标号label的地址存入R1.
2. 简述协处理器的作用。
(1)用于主处理器(ARM)初始化
(2)用于主处理器(ARM)与协处理器的数据处理操作
(3)用于主处理器(ARM)寄存器与协处理器寄存器之间传送数据
(4)用于协处理器寄存器和存储器之间传送数据
3. 简述伪指令的作用。
(1)伪指令是一些特殊指令助记符,没有相对应的操作码;
(2)伪指令为完成汇编程序做各种准备工作,仅在汇编过程中起作用。
(七)
1. 简述ADR伪指令的作用。
(1)将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中;
(2)编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能。
2. 简述ADRL伪指令的作用。
(1)将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中;
(2)ADRL伪指令被编译器替换成两条合适的指令;
(3)ADRL伪指令比ADR伪指令可以读取更大范围的地址 。
3. 简述LDR伪指令的作用及其与ARM指令LDR的区别。
(1)加载32位的常量或一个地址值到指定寄存器;
(2)被编译器替换成一条合适的指令(MOV、MVN或LDR);
(3)与ARM指令的LDR相比,伪指令的LDR的参数有“=”号。
4. 解释下列指令具体含义:
(1)ADR R2, label
将程序标号label的地址存入R2.
(2)LDR R3, =0x12
将常数0x12加载到R3寄存器.
(3)LDR R3, [r4]
将[r4]加载到R3寄存器.
- 指出示例中ADR伪指令经过编译后得到反汇编代码的PC值,并解释原因。(其中0x20是当前正在执行指令地址,0x64是Delay标号地址)
(1)读到PC的值是0x28;
(2)由于三级流水线的工作原理,读PC得到的值为当前正在取指指令的地址,是当前正在执行指令地址加8.
4. ARM 系统硬件设计基础
4. 简述MDK开发工具的四个主要特点。
(1)具有功能强大的源代码编辑器;
(2)具有可根据开发工具配置的设备数据库;
(3)具有用于创建和维护工程的工程管理器;
(4)具有集汇编、编译和链接过程于一体的编译工具;
2. ARM伪指令有哪些常见的伪指令?
(1)符号定义伪指令;(2)数据定义伪指令;(3)汇编控制伪指令;
(4)宏指令;(5)其他伪指令.
3. 简述高级语言编程和汇编语言编程的侧重点。
(1)高级语言编程重点关心程序功能;
(2)汇编语言编程除了程序功能,还重点关心程序的规模和运行速度。
4. 汇编语言是否区分大小写字母?要注意哪些方面?
(1)汇编语言区分大小写字母;
(2)助记符可以全部用大写、或全部用小写,但不能在一条指令中大、小写混用;
(3)同名的大、小写符号被视为两个不同的符号。
5. 简述可执行映像文件各个组成部分特点。
(1)代码段的内容为执行代码,代码段为只读属性;
(2)数据段存放代码运行时所需的数据,有两种数据段:包含初始化数据的数据段和不包含初始化数据的数据段,两种数据段均为可读写属性。
1. 简述硬件启动程序的工作步骤。
(1)分配异常向量表;(2)初始化存储器系统;(3)初始化各工作模式下的堆栈;
(4)初始化有特殊要求的硬件模块;(5)初始化用户程序的执行环境;
(6)切换处理器的工作模式;(7)呼叫主应用程序。
2. 请写出使用异常向量表的程序。
AREA Init ,CODE, READONLY
ENTRY
B ResetHandler
B UndefHandler
B SWIHandler
B PreAbortHandler
B DataAbortHandler
B.
B IRQHandler
B FIQHandler
3. 简述在不同模式下定义堆栈地址的方法。
(1)改变状态寄存器内的状态位,使处理器切换到不同的模式;
(2)给SP指定一个地址作为不同模式下的堆栈地址。
4. 可执行程序映像分为几部分?哪部分既可以在ROM/Flash中执行,也可以在RAM中执行?哪部分只能在RAM中执行?
(1)可执行程序映像分为3部分:RO(代码和只读数据);RW(可读写数据);ZI(初始化为0的可读写数据).
(2)RO可以在ROM/Flash和RAM中执行;RW和ZI只能在RAM中执行.
5. 解释下列代码含义。
LDR r0,=|Image$$RO$$Limit| ;得到RO数据源在ROM中的的起始地址
LDR r1,=|Image$$RW$$Base| ;RW区在RAM里的起始地址
LDR r3,=|Image$$ZI$$Base| ;ZI区在RAM里的起始地址
CMP r0,r1 ;比较它们是否相等
BEQ %F1 ;分配一片连续的存储单元
6. 简述C语言与汇编语言混合编程的3种方法。
(1)汇编程序调用C程序的方法为:在汇编程序中使用IMPORT伪指令声明将要调用的C语言函数;然后通过BL指令来调用C函数;
(2)C程序调用汇编子程序的方法为:在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;在C程序中使用extern关键字声明要调用的汇编子程序为外部函数;
(3)在C语言中内嵌汇编语句,对应语法格式为:_ _asm {汇编指令}.
5. 基于 S3C2410 的系统硬件设计
1. 说明S3C2410和ARM9处理器的关系。
(1) S3C2410是Samsung公司推出的16/32位RISC处理器;
(2) S3C2410的CPU内核采用ARM公司设计的16/32位ARM9处理器。
2. S3C2410的地址空间分为多少个bank?一共有多少个字节?哪两个bank的大小是可编程的?
(1) S3C2410的地址空间分为8个bank;
(2) S3C2410的地址空间一共有1G字节;
(3) 最后两个bank的大小是可编程的。
3. 简述时钟和电源管理模块的四种模式。
(1)正常模式:为CPU和外围设备提供时钟,电源消耗将达到最大;
(2)慢速模式:使用外部时钟,电源消耗依赖于外部时钟的频率;
(3)空闲模式:断开用于CPU核心的时钟,只为外围设备提供时钟,减少电源消耗;
(4)掉电模式:断开内部电源连接,CPU和内部逻辑(不包含唤醒逻辑)都没有电源消耗。
4. S3C2410共有多少个I/O口?这些I/O口分为多少组?哪一组I/O口不能作为输入口使用?
(1)S3C2410共有117个I/O口;
(2)S3C2410分为8组I/O口:PORT A~PORT H;
(3)PORT A除了作为功能口外,它只作为输出口使用。
5. 简述与配置I/O口相关的寄存器。
(1)端口控制寄存器(GPACON-GPHCON):决定每个引脚所使用的复用功能;
(2)端口数据寄存器(GPADAT-GPHDAT):向不同端口相关位写入数据或读入数据;
(3)端口上拉寄存器(GPBUP-GPHUP):控制每个端口组的上拉电阻的使能和禁止;
(4)外部中断控制寄存器(EXTINTN):配置不同的信号请求方式;
(5)杂项控制寄存器
6. 简述从RTOS角度理解I/O操作的含义。
(1)对I/O请求定位正确的设备;
(2)对设备定位正确的设备驱动程序,并解决对设备驱动程序的请求;
(3)有时要求RTOS保证对设备的同步访问。
7. 简述I/O接口与存储器统一编址方式的优缺点。
优点:(1)访问内存的指令都可用于I/O操作,数据处理功能强;(2)I/O接口可与存储器部分共用译码和控制电路;
缺点:(1)要占用存储器地址空间的一部分;(2)因不用专门的I/O指令,程序中较难区分I/O或存储器操作。
8. 简述设置接口电路的必要性。
(1)解决CPU和外围设备之间的时序配合和通信联络问题;
(2)解决CPU和外围设备之间的数据格式转换和匹配问题;
(3)解决CPU的负载能力和外围设备端口选择问题。
9. 简述处理中断的步骤。
(1)保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR;
(2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式;
(3)获取中断源。PC跳到IRQ或FIQ的异常向量地址,进入中断服务子程序;
(4)中断处理;
(5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到
CPSR中,R14中保存的被中断程序的地址恢复到PC中,进而继续执行被中断的程序。
10. 修改下列代码,实现第7、第8位为输出引脚,且控制LED轮流闪烁。
void Main(void){
int flag, i;
Target_Init();
for(;;){
if(flag==0){
for(i=0;i<1000000;i++);
rGPGCON = rGPGCON & 0xfff0ffff | 0x00014000;
0xfffc3fff位[17:14]为零值,rGPGCON & 0xfffc3fff 将rGPGCON 的位[17:14]置为零值, rGPGCON & 0xfffc3fff | 0x00014000的最终效果令rGPGCON位[17:14]的值为0101,rGPGCON寄存器是两位控制一位引脚,设定第7、第8位为输出引脚,而其余控制位的值不变,要用到PORT G控制寄存器位描述(第3版教材表5.11)。
rGPGDAT = rGPGDAT & 0xeff | 0x80;
for(i=0;i<10000000;i++);
flag = 1;
}
else {
for(i=0;i<1000000;i++);
rGPGCON = rGPGCON & 0xfff0ffff | 0x00014000;
rGPGDAT = rGPGDAT & 0xf7f | 0x100;
for(i=0;i<1000000;i++);
flag = 0;
}
}
}
1. 简述DMA方式进行数据传输的具体过程。
(1)外设向DMA控制器发出DMA请求;
(2)DMA控制器向CPU发出总线请求信号;
(3)CPU执行完现行的总线周期后,向DMA控制器发出响应请求的回答信号;
(4)CPU将控制总线、地址总线及数据总线让出,由DMA控制器进行控制;
(5)DMA控制器向外部设备发出DMA请求回答信号;
(6)进行DMA传送;
(7)数据传送完毕,DMA控制器通过中断请求线发出中断信号。CPU在接收到中断信号后,转入中断处理程序进行后续处理。
(8)中断处理结束后,CPU返回到被中断的程序继续执行。CPU重新获得总线控制权。
2. 简述UART工作的基本原理。
(1)在一条传输线上完成单向传输。
(2)将传输数据的字符一位接一位的传送。
(3) 接收方对于同一条线上的一连串连续数字信号,首先将其分割成位,再按位组成字符。
(4)每个字符需要确定起始位和结束位,字符与字符间可能有长度不定的空闲时间。
3. 简述UART字符传输格式。
(1)发送前:线路处于空闲状态,连续发送 “1”;
(2)开始发送:首先,发送一位起始位 “0”;
然后,发送连续的二进制位,数据位可以为5、6、7、8;
随后,紧跟一位奇偶校验位(可选择奇/偶/无校验);
最后,发送停止位 “1”,可以有1位或2位停止位。
4. 简述驱动芯片HD7279A的主要功能(不用介绍引脚功能)。
(1)具有串行接口;
(2)可同时驱动8位共阴式数码管或64只独立LED;
(3)可连接多达64键的键盘矩阵;
(4)单个芯片即可完成驱动LED显示及键盘接口的全部功能。
5.解释下列代码中加下划线语句的寄存器置位过程,要用到教材上的哪些表?
(答案写在下一行)
(1)
#define SEND_DATA (*(volatile unsigned char *) 0x30200000)
#define SEND_ADDR ((volatile unsigned char *) 0x30200000) //待发送数据的起始地址
void Main(void){
volatile unsigned char* p = SEND_ADDR;
int i;
Target_Init();
Delay(1000);
SEND_DATA = 0x41; //初始化要发送的数据
for (i = 0; i < 128; i++){
*p++ = 0x41 + i;
}
rUCON0 = rUCON0 & 0xff3 | 0x8; //Uart设置成DMA形式
0xff3展开为111111110011,0x8展开为1000,rUCON0 & 0xff3令rUCON0的位[3:2]清零,rUCON0 & 0xff3 | 0x8的最终效果令位[3:2]的值为10,而其余控制位的值不变,要用到UART控制寄存器位描述(第3版教材表5.37)
rDISRC0 = (U32)(SEND_ADDR); //DMA0 初始化
rDISRCC0 = (0<<1)|(0<<0); //源=AHB,传送后地址增加
rDIDST0 = (U32)UTXH0; //发送FIFO缓冲区地址
rDIDSTC0 = (1<<1)|(1<<0); //目标=APB,地址固定
//设置DMA0控制寄存器:请求模式,与APB同步,使能中断,单位传输,单个模式,目标=UART0,
//硬件请求模式,不自动加载,字节,计数器初值=50
rDCON0=(0<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|(50);
rDCON0的位[31:20]的值分别置为001000011100,位[19:0]置为十进制数50,用到DMA控制寄存器的位描述(第3版教材表5.29)
rDMASKTRIG0 = (1<<1); //打开DMA通道0
while(1);
}
(2)
int Get_AD(unsigned char ch){
int i;
int val=0;
if(ch>7) return 0; //通道不能大于7
for(i=0;i<16;i++){ //为转换准确,转换16次
rADCCON |= 0x1; //启动 A/D 转换
rADCCON = rADCCON & 0xffc7 | (ch<<3);
令rADCCON的位[5:3]清零,使得通道号ch生效,用到ADC控制寄存器的位描述(第3版教材表5.42)
while (rADCCON & 0x1); //避免第一个标志出错
while (!(rADCCON & 0x8000)); //避免第二个标志出错
val += (rADCDAT0 & 0x03ff);
获得rADCDAT0的位[9:0]的值,用到ADC转换数据寄存器(第3版教材表5.45)
Delay(10);
}
return (val>>4); //为转换准确,除以16取均值
}
1. LCD每个像素由哪3种颜色组成?简述565格式显示的彩色。
(1)LCD每个像素由红、绿、蓝3种颜色组成;
(2)565格式显示彩色是指5位二进制码表示红色,6位表示绿色,5位表示蓝色。
2. 简述触摸屏和CPU的接口组成。
(1)1个触摸屏面板;
(2)4个外部晶体管;
(3)1个外部电压源;
(4)模拟信号输入AIN[7]和信号AIN[5]。
3. 解释下列代码中加下划线语句的寄存器置位过程,要用到教材上的哪些表?
(答案写在下一行)
(1)
……
#define MVAL_USED (0)
#define CLKVAL_CSTN (6)
……
void LCD_Init(int type){
rIISPSR=(2<<5)|(2<<0); //IIS_LRCK=44.1Khz @384fs,PCLK=50Mhz.
rGPHCON = rGPHCON & ~(0xf<<18)|(0x5<<18);
switch(type){
case MODE_CSTN_8BIT: //STN8位彩色模式
frameBuffer8Bit=(U32 (*)[SCR_XSIZE_CSTN / 4])LCDFRAMEBUFFER;
rLCDCON1=(CLKVAL_CSTN<<8)|(MVAL_USED<<7)|(2<<5)|(3<<1)|0;
令rLCDCON1的位[10:0] 置为11001000110,用到LCD控制寄存器1的位描述(第3版教材表5.46)
rLCDCON2=(0<<24)|(LINEVAL_CSTN<<14)|(0<<6)|0;
rLCDCON3=(WDLY_CSTN<<19)|(HOZVAL_CSTN<<8)|(LINEBLANK_CSTN<<0);
……
}
}
(2)
void Touch_Init(void){
rADCDLY = (0x5000); // ADC启动或间隔延时
rADCTSC = (0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);
令rADCTSC的位[8:0] 置为011010011,用到ADC触摸屏控制寄存器的位描述(第3版教材表5.43)
rADCCON = (1<<14)|(49<<6)|(7<<3)|(0<<2)|(1<<1)|(0);
//设置ADC控制寄存器
}
6. Linux 操作系统基础
1. 简述Linux内核五个子系统。
(1)进程调度;(2)内存管理;(3)虚拟文件系统;(4)网络接口;(5)进程间通信。
2. 简述Linux识别“设备文件”的三个指标。
(1)设备类型:字符设备或者块设备。
(2)主设备号:按照设备使用的驱动程序不同而赋予设备不同的主设备号。主设备号与驱动程序一一对应。
(3)次设备号:用来区分使用同一个驱动程序的不同设备。
3. 简述Linux控制设备的两种方式。
(1)轮询方式:用于不支持中断方式的机器,需要经常读取设备的状态来控制I/O过程,一直到设备状态表明请求已经完成为止。
(2)中断方式:在硬件支持中断的情况下,使用中断方式控制I/O过程,CPU根据接收到设备发出的中断信号启动中断服务例程。
4. 简述vi编辑器三种基本工作模式。
(1)命令模式:可以键入命令来删除、更改、移动文本、定位光标、搜索文本字符串或退出vi编辑器;
(2)编辑模式:键入i命令,可以向文件中输入文本,键入的所有文本都不会被翻译成命令;
(3)最后行模式:当处于命令模式时,通过键入“:”,将使光标处于屏幕的最后一行,称为最后行模式,这时可以执行更先进的编辑命令。
5. 简述在gcc编译器下makefile和make命令两者关系。
(1)makefile:makefile使用一系列的规则来指定文件编译的先后顺序,或者是否需要重新编译;
(2)make命令: make命令根据makefile中定义的文件之间依赖关系来自动维护目标文件,只更新修改过的文件 。
7. 嵌入式 Linux 软件设计
1.简述BootLoader的stage1和stage2工作步骤。
2.简述Linux移植的基本内容。
3.简述设备驱动程序功能。
4.简述Linux应用程序开发步骤。