ARM体系结构下的程序设计经验_第1页
ARM体系结构下的程序设计经验_第2页
ARM体系结构下的程序设计经验_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM体系结构下的程序设计经验RM系列处理器是RISC(ReducdedInSTructiONSetComputing)处理器。很多基于ARM的高效代码的程序设计策略都源于RISC处理器。和很多RISC处理器一样,ARM系列处理器的内存访问,也要求数据对齐,即存取“字(Word)”数据时要求四字节对齐,地址的bits[1:0]==0b00;存取“半字(Halfwords)”时要求两字节对齐,地址的bit[0]==0b0;存取“字节(Byte)”数据时要求该数据按其自然尺寸边界(NaturalSizeBoundary)定位。

ARM编译程序通常将全局变量对齐到自然尺寸边界上,以便通过使用LDR和STR指令有效地存取这些变量。这种内存访问方式与多数CISC(ComplexInstructionSetComputing)体系结构不同,在CISC体系结构下,指令直接存取未对齐的数据。因而,当需要将代码从CISC体系结构向ARM处理器移植时,内存访问的地址对齐问题必须予以注意。在RISC体系结构下,存取未对齐数据无论在代码尺寸或是程序执行效率上,都将付出非常大的代价。

本文将从以下几个方面讨论在ARM体系结构下的程序设计问题。

未对齐的数据指针

C和C++编程标准规定,指向某一数据类型的指针,必须和该类型的数据地址对齐方式一致,所以ARM编译器期望程序中的C指针指向存储器中字对齐地址,因为这可使编译器生成更高效的代码。

比如,如果定义一个指向int数据类型的指针,用该指针读取一个字,ARM编译器将使用LDR指令来完成此操作。如果读取的地址为四的倍数(即在一个字的边界)即能正确读取。但是,如果该地址不是四的倍数,那么,一条LDR指令返回一个循环移位结果,而不是执行真正的未对齐字载入。循环移位结果取决于该地址向对于字的边界的偏移量和系统所使用的端序(Endianness)。例如,如果代码要求从指针指向的地址0x8006载入数据,即要载入0x8006、0x8007、0x8008和0x8009四字节的内容。但是,在ARM处理器上,这个存取操作载入了0x8004、0x8005、0x8006和0x8007字节的内容。这就是在未对齐的地址上使用指针存取所得到的循环移位结果。

因而,如果想将指针定义到一个指定地址(即该地址为非自然边界对齐),那么在定义该指针时,必须使用__packed限定符来定义指针:例如,

__packedint*pi;//指针指向一个非字对其内存地址

使用了_packed限定符限定之后,ARM编译器将产生字节存取命令(LDRB或STRB指令)来存取内存,这样就不必考虑指针对齐问题。所生成的代码是字节存取的一个序列,或者取决于编译选项、跟变量对齐相关的移位和屏蔽。但这会导致系统性能和代码密度的损失。

值得注意的是,不能使用__packed限定的指针来存取存储器映射的外围寄存器,因为ARM编译程序可使用多个存储器存取来获取数据。因而,可能对实际存取地址附近的位置进行存取,而这些附近的位置可能对应于其它外部寄存器。当使用了位字段(Bitfield)时,ARM程序将访问整个结构体,而非指定字段。

编译器的缺省行为

多数嵌入式应用程序最初都是在原型环境下开发的。无论什么样的原型环境的资源与最终产品环境都是有差异的。因此,考虑如何将嵌入式应用程序从其所依赖的开发工具或调试环境中移植到在目标硬件上独立运行是非常重要的。

开始编写嵌入式应用程序时,开发者可能并不清楚目标硬件的具体规格。如,目标系统使用了什么样的外围设备、存储器映射情况甚至不能确定处理器的型号。为在了解这些详细信息前能够继续软件的开发,RVCT工具提供了很多默认的操作,使用户能编译和调试与目标系统无关的应用程序代码。下面详细介绍介绍这些编译选项,只有深入了解这些编译选项设置,才能使开发更顺利的进行。

调整C库使其适应目标硬件

默认情况下,C库利用semihostig机制来提供设备驱动级的功能,使得主机主机能够用作输入和输出设备。这种机制对于嵌入式开发十分有用,因为用于开发的硬件系统通常没有最终系统的输入和输出设备。

最简单的函数重定向的例子就是用户希望fputc()函数能够将字符从目标系统的串口输出而不是在调试时,将字符从调试器的控制台输出。这时就需要重新实现该函数。下面的例子将fputc()的输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论