ARM嵌入式系统结构与编程习题复习资料 邱铁著Word文档格式.docx
- 文档编号:22065579
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:38
- 大小:141.04KB
ARM嵌入式系统结构与编程习题复习资料 邱铁著Word文档格式.docx
《ARM嵌入式系统结构与编程习题复习资料 邱铁著Word文档格式.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统结构与编程习题复习资料 邱铁著Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
intvalue=0xFF1;
int*p1,**p2,***p3,****p4;
p1=&
value;
p2=&
p1;
p3=&
p2;
p4=&
p3;
printf("
****p4=%d\n"
****p4);
}
程序输出结果为:
****p4=4081
5.分析宏定义#definePOWER(x)x*x是否合理,举例说明。
如果不合理,应如何更改?
#definePOWER(x)x*x不合理;
对于带参数的宏,其参数应该用括号括起来。
例:
如果按照下边方式使用该宏
POWER(2+3)则宏展开后为2+3*2+3
该宏应修改为:
#definePOWER(x)(x)*(x)
6.条件编译在程序设计中有哪些用途?
条件编译包括了6条预处理指令#ifdef,#ifndef.##if,#elif,#else,#endif.。
条件编译的功能在于对源程序中的一部分内容只有满足某种条件的情况下才进行编译。
7.何为可重入函数?
如果使程序具有可重入性,在程序设计中应该注意哪些问题?
如果某个函数可以被多个任务并发使用,而不会造成数据错误,我们就说这个函数具有可重入性(reentrant)。
可重入函数可以使用局部变量,也可以使用全局变量。
如果使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护,若不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使得此全局变量变为不可知状态。
8.现有模块module_1,module_2,module_3,要求在模块module_1中提供可供模块module_2,module_3使用的int型变量xx,请写出模块化程序设计框架。
首先在module_1的.c文件中定义intxx;
/*module_1.c*/
intxx=0;
然后在module_1的.h文件中声明xx为外部变量
/*module_1.h*/
externintxx;
接下来在module_2源文件中包括module_1的.h文件
/*module_2.c*/
#include"
module_1.h"
在module_3源文件中包括module_1的.h文件
/*module_3.c*/
这样在module_2,module_3中就可以使用module_1中提供的int型变量xx了。
9.ATPCS与AAPCS的全称是是什么,它们有什么差别?
掌握子程序调用过程中寄存器的使用规则,数据栈的使用规则及参数的传递规则,在具体的函数中能够熟练应用。
过程调用标准ATPCS(ARM-ThumbProduceCallStandard)规定了子程序间相互调用的基本规则,ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。
2007年,ARM公司推出了新的过程调用标准AAPCS(ARMArchitectureProduceCallStandard),它只是改进了原有的ATPCS的二进制代码的兼容性。
10.内嵌式汇编有哪些局限性?
编写一段代码采用C语言嵌入式汇编程序,在汇编程序中实现字符串的拷贝操作。
内嵌汇编的局限性
(1)操作数
•ARM开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或C语言表达式。
可以是char、short或int类型,而且是作为无符号数进行操作。
•当表达式过于复杂时需要使用较多的物理寄存器,有可能产生冲突。
•GNUARM编译环境下内嵌汇编语言ARM开发工具稍有差别,不能直接引用C语言中的变量。
(2)物理寄存器
不要直接向程序计数器PC赋值,程序的跳转只能通过B或BL指令实现。
一般将寄存器R0~R3、R12及R14用于子程序调用存放中间结果,因此在内嵌汇编指令中,一般不要将这些寄存器同时指定为指令中的物理寄存器。
在内嵌的汇编指令中使用物理寄存器时,如果有C语言变量使用了该物理寄存器,则编译器将在合适的时候保存并恢复该变量的值。
需要注意的是,当寄存器SP、SL、FP以及SB用作特定的用途时,编译器不能恢复这些寄存器的值。
通常在内嵌汇编指令中不要指定物理寄存器,因为有可能会影响编译器分配寄存器,进而可能影响代码的效率。
(3)标号、常量及指令展开
•C语言程序中的标号可以被内嵌的汇编指令所使用。
但是只有B指令可以使用C语言程序中的标号,BL指令不能使用C语言程序中的标号。
(4)内存单元的分配
•内嵌汇编器不支持汇编语言中用于内存分配的伪操作。
所用的内存单元的分配都是通过C语言程序完成的,分配的内存单元通过变量以供内嵌的汇编器使用。
•(5)SWI和BL指令
•SWI和BL指令用于内嵌汇编时,除了正常的操作数域外,还必须增加如下3个可选的寄存器列表:
•用于存放输入的参数的寄存器列表。
•用于存放返回结果的寄存器列表。
•用于保存被调用的子程序工作寄存器的寄存器列表。
《ARM嵌入式系统结构与编程》习题答案
第一章绪论
1.国内嵌入式系统行业对“嵌入式系统”的定义是什么?
如何理解?
国内嵌入式行业一个普遍认同的定义是:
以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专业计算机系统。
从这个定义可以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的剪裁利用。
因此有人把嵌入式系统比作是一个针对特定的应用而“量身定做”的专业计算机系统。
2.嵌入式系统是从何时产生的,简述其发展历程。
从20世纪70年代单片机的出现到目前各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了30多年的发展历史。
嵌入式系统的出现最初是基于单片机的。
Intel公司1971年开发出第一片具有4位总线结构的微处理器4004,可以说是嵌入式系统的萌芽阶段。
80年代初的8051是单片机历史上值得纪念的一页。
20世纪80年代早期,出现了商业级的“实时操作系统内核”,在实时内核下编写应用软件可以使新产品的沿着更快,更节省资金。
20世纪90年代实时内核发展为实时多任务操作系统。
步入21世纪以来,嵌入式系统得到了极大的发展。
在硬件上,MCU的性能得到了极大的提升,特别是ARM技术的出现与完善,为嵌入式操作系统提供了功能强大的硬件载体,将嵌入式系统推向了一个崭新的阶段。
3.当前最常用的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。
主要有嵌入式Linux和嵌入式实时操作内核uC/OS-II
嵌入式Linux操作系统是针对嵌入式微控制器的特点而量身定做的一种Linux操作系统,包括常用的嵌入式通信协议和常用驱动,支持多种文件系统。
主要有以下特点:
源码开放,易于移植,内核小,功能强大,运行稳定,效率高等。
uC/OS是源码工卡的实时嵌入式系统内核,主要有以下特点:
源码公开,可移植性强,可固化,可剪裁,占先式,多任务,可确定性,提供系统服务等。
4.举例说明嵌入式设备在工控设备中的应用。
由于工业控制系统特别强调可靠性和实时性,“量身定做”的嵌入式控制系统恰能满足工业控制的需求。
例如:
工业过程控制,数字控制机床,电网设备监测,电力自动控制系统,石油化工监控等。
5.嵌入式技术的发展趋势有哪些?
未来嵌入式系统的发展趋势有:
1.随着信息化与数字化的发展,嵌入式设备进行网络互联是未来发展的趋势。
2.优化嵌入式系统软硬件内核,提高系统运行速度,降低功耗和硬件成本。
3.指令集的并行计算技术将引入嵌入式微处理器。
4.嵌入式微处理器将会向多核技术发展。
5.嵌入式技术将引领信息时代。
第2章ARM技术与ARM体系结构
1.简述ARM处理器内核调试结构原理
ARM处理器一般都带有嵌入式追踪宏单元ETM(EmbeddedTraceMacro),它是ARM公司自己推出的调试工具。
ARM处理器都支持基于JTAG(JointTestActionGroup联合测试行动小组)的调试方法。
它利用芯片内部的EmbeddedICE来控制ARM内核操作,可完成单步调试和断点调试等操作。
当CPU处理单步执行完毕或到达断点处时,就可以在宿主机端查看处理器现场数据,但是它不能在CPU运行过程中对实时数据进行仿真。
ETM解决了上述问题,能够在CPU运行过程中实时扫描处理器的现场信息,并数据送往TAP(TestAccessPort)控制器。
上图中分为三条扫描链(图中的粗实线),分别用来监视ARM核,ETM,嵌入式ICE的状态。
2.分析ARM7TDMI-S各字母所代表的含义。
ARM7TDMI–S中
ARM是AdvancedRISCMachines的缩写
7是系列号;
T:
支持高密度16位的Thumb指令集;
D:
支持JTAG片上调试;
M:
支持用于长乘法操作(64位结果)ARM指令,包含快速乘法器;
;
I:
带有嵌入式追踪宏单元ETM,用来设置断点和观察点的调试硬件;
S:
可综合版本,意味着处理器内核是以源代码形式提供的。
这种源代码形式又可以编译成一种易于EDA工具使用的形式。
3.ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。
ARM技术的设计者将ARM处理器在应用中可能产生的状态进行了分类,并针对同一类型的异常状态设定了一个固定的入口点,当异常产生时,程序会自动跳转到对应异常入口处进行异常服务。
⏹1.用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式
⏹2.FIQ模式:
也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先级(fast)中断产生时将会进入这种模式。
⏹3.IRQ模式:
也称为普通中断模式,:
当一个低优先级(normal)中断产生时将会进入这种模式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中断处理都在IRQ模式下进行。
⏹4.SVC模式:
称之为管理模式,它是一种操作系统保护模式。
当复位或软中断指令执行时处理器将进入这种模式。
⏹5.中止模式:
当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。
⏹6.未定义指令异常模式:
当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。
⏹7.系统模式:
使用和User模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。
⏹在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
⏹在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式,每种异常都对应有自己的异常处理入口点。
4.分析程序状态寄存器(PSR)各位的功能描述,并说明C,Z,N,V在什么情况下进行置位和清零。
⏹条件位:
⏹N=1-结果为负,0-结果为正或0
⏹Z=1-结果为0,0-结果不为0
⏹C=1-进位,0-借位
⏹V=1-结果溢出,0结果没溢出
⏹Q位:
⏹仅ARM5TE/J架构支持
⏹指示增强型DSP指令是否溢出
⏹中断禁止位:
⏹I=1:
禁止IRQ.
⏹F=1:
禁止FIQ.
⏹TBit
⏹仅ARMxT架构支持
⏹T=0:
处理器处于ARM状态
⏹T=1:
处理器处于Thumb状态
⏹Mode位(处理器模式位):
⏹0b10000User
⏹0b10001FIQ
⏹0b10010IRQ
⏹0b10011Supervisor
⏹0b10111Abort
⏹0b11011Undefined
⏹0b11111System
5.简述ARM处理器异常处理和程序返回的过程。
只要正常的程序流被暂时中止,处理器就进入异常模式。
例如响应一个来自外设的中断。
在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。
如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常。
异常或入口
返回指令
向量表偏移
处理器模式
优先级
BL
MOVPC,R14
SWI
MOVSPC,R14_svc
SVC
6
0x00000008
未定义的指令
MOVSPC,R14_und
UND
0x00000004
预取指中止
SUBSPC,R14_abt,#4
ABT
5
0x0000000C
快中断
SUBSPC,R14_fiq,#4
FIQ
3
0x0000001C
中断
SUBSPC,R14_irq,#4
IRQ
4
0x00000018
数据中止
SUBSPC,R14_abt,#8
2
0x00000010
复位
无
1
0x00000000
在异常发生后,ARM7TDMI内核会作以下工作:
1.在适当的LR中保存下一条指令的地址
2.将CPSR复制到适当的SPSR中;
3.将CPSR模式位强制设置为与异常类型相对应的值;
4.强制PC从相关的异常向量处取指。
ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。
注:
异常总是在ARM状态中进行处理。
当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。
当异常结束时,异常处理程序必须:
1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;
2.将SPSR的值复制回CPSR;
3.清零在入口置位的中断禁止标志。
恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。
6.ARM处理器字数据的存储格式有哪两种?
并指出这两种格式的区别。
ARM7TDMI处理器可以将存储器中的字以下列格式存储
▪大端格式(Big-endian)
▪小端格式(Little-endian)
▪小端存储器系统:
在小端格式中,高位数字存放在高位字节中。
因此存储器系统字节0连接到数据线7~0。
▪大端存储器系统:
在大端格式中,高位数字存放在低位字节中。
因此存储器系统字节0连接到数据线31~24。
7.分析带有存储器访问指令(LDR)的流水线运行情况,并用图示说明流水线的运行机制。
存储器访问指令LDR流水线举例
取指的存储器访问和执行的数据路径占用都是不可同时共享的资源,对于多周期指令来说,如果指令复杂以至于不能在单个时钟周期内完成执行阶段,就会产生流水线阻塞。
对存储器的访问指令LDR是非单周期指令
LDR指令的执行,访问存储器,回写寄存器(占用了3个周期)。
造成了MOV指令的执行被阻断。
8.简述ARM9的5级流水线每一级所完成的功能和实现的操作。
ARM920在指令操作上采用5级流水线.
取指:
从指令Cache中读取指令。
译码:
对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。
执行:
进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。
存储器访问:
如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache)。
寄存器回写:
将指令运算或操作结果写回到目标寄存器中。
9.什么叫流水线互锁?
应如何来解决,举例说明。
互锁:
当前指令的执行需要前面指令的执行结果,但前面的指令没有执行完毕,引起流水线的等待。
互锁发生时,硬件会停止指令的执行,直到数据准备好。
上边程序中ORR指令执行时需要使用LDR指令加载后的R4寄存器,因此造成了ORR指令的等待。
编译器以及汇编程序员可以通过重新设计代码的顺序或者其他办法来减少互锁的数量。
第3章ARM指令集寻址方式
1.在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的?
条件码占4位,最多有15个条件
操作码
条件助记符
标志
含义
0000
EQ
Z=1
相等
0001
NE
Z=0
不相等
0010
CS/HS
C=1
无符号数大于或等于
0011
CC/LO
C=0
无符号数小于
0100
MI
N=1
负数
0101
PL
N=0
正数或零
0110
VS
V=1
溢出
0111
VC
V=0
没有溢出
1000
HI
C=1,Z=0
无符号数大于
1001
LS
C=0,Z=1
无符号数小于或等于
1010
GE
N=V
有符号数大于或等于
1011
LT
N!
=V
有符号数小于
1100
GT
Z=0,N=V
有符号数大于
1101
LE
Z=1,N!
有符号数小于或等于
1110
AL
任何
无条件执行(指令默认条件)
1111
NV
从不执行(不要使用)
2.指令条件码中,V标志位在什么情况下才能等于1?
V—溢出标志位
对于加减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其他指令通常不影响V位。
3.在ARM指令中,什么是合法的立即数?
判断下面各立即数是否合法,如果合法则写出在指令中的编码格式(也就是8位常数和4位移位数)
0x54300x1080x3040x501
0xfb100000x3340000x3FC0000x1FE0000
0x55800000x7F8000x39C0000x1FE80000
立即数必须由1个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。
即一个8位的常数通过循环右移2*rotate_4位(即0,2,4,。
。
30)得到
0X5430
0000,0000,0000,0000,0101,0100,0011,0000非法立即数
0X108
0000,0000,0000,0000,0000,0001,0000,10000x42循环右移30位(rotate_4=0xF)
0X304
0000,0000,0000,0000,0000,0011,0000,01000xC1循环右移30位(rotate_4=0xF)
0x501
0000,0000,0000,0000,0000,0101,0000,0001非法立即数
0xfb10000
0000,1111,1011,0001,0000,0000,0000,0000非法立即数
0x334000
0000,0000,0011,0011,0100,0000,0000,00000Xcd循环右移18位(rotate_4=0x9)
0x3FC000
0000,0000,0011,1111,1100,0000,0000,00000XFF循环右移18位(rotate_4=0x9)
0x1FE0000
0000,0001,1111,1110,0000,0000,0000,0000非法立即数
0x5580000
0000,0101,0101,1000,0000,0000,0000,0000非法立即数
0x7F800
0000,0000,0000,0111,1111,1000,0000,0000非法立即数
0x39C000
0000,0000,0011,1001,1100,0000,0000,00000XE7循环右移18位(rotate_4=0x9)
0x1FE80000
0001,1111,1110,1000,0000,0000,0000,0000非法立即数
4.分析逻辑右移,算术右移,循环右移,带扩展的循环右移它们间的差别。
LSL逻辑左移:
LSR逻辑右移:
ASR算术右移:
ROR循环右移:
RRX带扩展的循环右移:
5.ARM数据处理指令具体的寻址方式有哪些,如果程序计数器PC作为目标寄存器,会产生什么结果?
数据处理指令寻址方式具体可分为5种类型:
1)第二操作数为立即数2)第二操作数为寄存器3)第二操作数为寄存器移位方式且移位的位数为一个5位立即数4)第二操作数为寄存器移位方式且移位数值放在寄存器中5)第二操作数位寄存器进行RRX移位得到。
如果PC(R15)用作目标寄存器,指令会产生不可预知的结果。
6.在Load/Store指令寻址中,字,无符号字节的Load/Store指令寻址和半字,有符号字节寻址,试分析它们之间的差别。
在Load/Store指令寻址中,
字,无符号字节的Load/Store指令寻址中共有以下3种内存地址构成格式:
1)Addressing_mode中的偏移量为立即数2)Addressing_mode中的偏移量为寄存器的值
3)Addressing_mode中的偏移量通过寄存器移位得到
半字,有符号字节的Load/Store指令寻址中共有以下2种内存地址构成格式:
1)Addressi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM嵌入式系统结构与编程习题复习资料 邱铁著 ARM 嵌入式 系统 结构 编程 习题 复习资料