ARM嵌入式系统结构与编程测验完整答案邱铁著.docx
- 文档编号:2875223
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:38
- 大小:141.05KB
ARM嵌入式系统结构与编程测验完整答案邱铁著.docx
《ARM嵌入式系统结构与编程测验完整答案邱铁著.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统结构与编程测验完整答案邱铁著.docx(38页珍藏版)》请在冰豆网上搜索。
ARM嵌入式系统结构与编程测验完整答案邱铁著
第8章ARM汇编语言与嵌入式C混合编程
1.严格按照嵌入式C语言的编程规范,写一个C语言程序,实现将一个二维数组内的数据行和列进行排序。
答:
略
2.嵌入式C程序设计中常用的移位操作有哪几种,请说明每种运算所对应的ARM指令实现。
答:
移位操作分为左移操作与右移操作
左移运算符“<<”实现将“<<”左边的操作数的各个二进制位向左移动“<<”右边操作数所指定的位数,高位丢弃,低位补0。
其值相当于乘以:
2“左移位数”次方。
右移运算符“>>”实现将“>>”左边的操作数的各个二进制位向右移动“<<”右边操作数所指定的位数。
•对于空位的补齐方式,无符号数与有符号数是有区别的。
•对无符号数进行右移时,低位丢弃,高位用0补齐,其值相当于除以:
2“右移位数”次方
•对有符号数进行右移时,根据处理器的不同选择逻辑右移或算术右移
3.volatile限制符在程序中起到什么作用。
请举例说明。
答:
volatile的本意为“暂态的”或.“易变的”,该说明符起到抑制编译器优化的作用。
如果在声明时用“volatile”关键进行修饰,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供特殊地址的稳定访问。
•例:
硬件端口寄存器读取
•Charx=0,y=0,z=0。
•x=ReadChar(0x54000000)。
//读端口
•y=x。
•x=ReadChar(0x54000000)。
//再读端口
•z=x。
•以上代码可能被编译器优化为
•Charx=0,y=0,z=0。
•x=ReadChar(0x54000000)。
//读端口
•y=x。
•z=x。
•为了确保x的值从真实端口获取,声明时应该为
•Volatilecharx。
•Chary,z。
4.请分析下列程序代码的执行结果。
#include
main(){
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*/
#include"module_1.h"
这样在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.用户模式:
非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。
在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 嵌入式 系统 结构 编程 测验 完整 答案 邱铁著