ARM中的对齐问题

发布者:gamma14最新更新时间:2016-08-01 来源: eefocus关键字:ARM  对齐问题 手机看文章 扫描二维码
随时随地手机看文章
在ARM中,当吧一个内存区域初始化为某个结构体时,必须注意字节对齐情况。

1. 简介

在ARM中,有ARM和Thumb两种指令。
ARM指令   :每执行一条指令,PC的值加4个字节(32bits).一次访问4字节内容,该字节的起始地址必须是4字节对齐的位置上,

                     即地址的低两位为bits[0b00],也就是说地址必须是4的倍数。
Thumb指令:每执行一条指令,PC的值加2个字节(16bits).).一次访问2字节内容,该字节的起始地址必须是2字节对齐的位置上,

                    即地址的低两位为bits=0,也就是说地址必须是2的倍数。

遵循以上方式叫对齐(aligned)方式,不遵守这样方式称为非对齐(unaligned)的存储访问操作。

ARM CPU不支持未对齐双字(8 bytes)访问。

双字访问必须是8字节/4字节对齐.

2. ARM平台中的字节对齐关键字

    (1) __align(num)

    (2) __packed

         进行一字节对齐。

    (3) __unaligned

         用于修饰某个变量,可按照非对齐方式访问。

3. __packed与#pragma pack(1)的区别

 

4. __attribute__((aligned))   

    用于指定类型的最低对齐要求.

 

5. --unaligned_access / --no_unaligned_access

   用于启用/禁止:CPU上的未对齐数据访问.

   ARMv6 / ARMv7-AR         : 默认值为--unaligned_access

   ARMv6之前的/ARMv7-M : 默认值为--no_unaligned_access

 

   EDK中RVCT_ALL_CC_FLAGS设为:--no_unaligned_access

   ARMGCC没有设。

 

6. 内存分配函数

    尽量保证返回的地址,都是4字节对齐的。

 

7. 如何查找与字节对齐方面的问题

   (1) 编译器的big little 设置

        EDK中ARMGCC的flag设为:-mlittle-endian

   (2) CPU是否支持非对齐访问


      ===================

字节对齐的故障只能出现在“引用”的使用过程中。当使用“对象名”来操作对象时,根本不用担心字节对齐问题。

 在ADS环境下,有“ALIGN” 、“__align(x)” 、“__packed”关键字用于字节对齐处理。ALIGN用于汇编语言,__align(x)用于C语言,

__packed用于放弃字节对齐。

 单字节对齐类型的引用可以操作任何对象,双字节对齐类型的引用可以操作双字节、四字节、八字节对齐的对象,…………。

只有遵守这个规则,程序才可能是健壮的。

 如果我们想使用双字节对齐类型的引用来操作单字节对齐对象,那么你在定义该引用时必须使用__packed关键字!

============================

关键字:ARM  对齐问题 引用地址:ARM中的对齐问题

上一篇:tmux在ARM上的移植
下一篇:ARM 协处理器及其指令

推荐阅读最新更新时间:2024-03-16 15:02

基于嵌入式ARM-Linux无线ZigBee协调器驱动设计
农田中大范围的环境信息监测已成为网络应用范围重点之一。针对农田布线不便的特点,ZigBee无线节点网络成为农田信息采集系统的首选,可对其所分布区域内的各种环境和检测对象的信息进行实时的监控 。然而,控制下层整个网络状态的核心是上位机ARM处理器,而且上位机与下位机通信大多以串口模式来实现 。但串口通信模式存在串口传输速率低(波特率双方一致)、传送距离短 、数据冗余差(数据校验)以及设计串口协议繁琐(帧格式)等不足。因此本文研究了ZigBee在ARM9内核中的协调器字符驱动,利用I/O传输数据,控制具有协调器驱动的设备在农田任何位置即可组网,以减少协调器的布局,实现方便快捷的动态数据监测。 1 田间监测系统的要求  因监测节点需要
[工业控制]
基于嵌入式<font color='red'>ARM</font>-Linux无线ZigBee协调器驱动设计
工控机巨头华北工控发布多款ARM产品,意欲剑指3C市场
编者按:近期国内工控机、工业计算机代表企业华北工控,连续举行了多场发布、推介会,宣传其基于ARM平台研发的系列产品。作为一家著名的工控机、工业计算机、特种计算机研发生产企业,华北工控多年来一直致力于计算机在专业领域和行业应用领域的推广与发展,而众所周知多年来ARM平台多应用于通迅及消费电子产品,在众多IT企业纷纷向数字化3C领域进军,把数字化3C融合技术产品作为发展突破口的今天,华北工控做出的这一系列动作是否预示着:华北工控即将涉足数字3C?如果猜测为真,一家擅长工业级产品研发生产的计算机公司,在数字3C市场开疆拓土,是所向披靡,还是水土不服?这样的一条鲶鱼进入数字3C市场,将会产生什么样的效应?带着一系列的疑问,本网记者专访了华
[工业控制]
工控机巨头华北工控发布多款<font color='red'>ARM</font>产品,意欲剑指3C市场
arm学习笔记006之redhat5.0的安装定制以及tftp服务器的安装
一、小红帽的安装定制 新建虚拟机时Ethernet要选择Bridged方式; 要定制; 定制中有程序配置的选择:服务器- 老的网络服务器- 可选的软件包- tftp-server-0.42-3.1.i386,如下图 在重新引导中: 防火墙我选的是禁用; SELinux选的是默认的强制,选择“禁用“麻烦,其实在后面配置tftp服务器是查看到的SELinux是disable的 Kdump可以选择”启用“ 设置软件更新:以后注册 注意:这样安装好的小红帽,其中的tftp服务器是不能用的,需要进行下面的配置 在”定制“中没有选择tftp时,小红帽中是没有”/tftpboot“的文件夹路径的
[单片机]
<font color='red'>arm</font>学习笔记006之redhat5.0的安装定制以及tftp服务器的安装
ARM处理器异常处理步骤
简介:处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。当一个异常出现以后,ARM微处理器会执行以下几步操作: ARM处理器状态、指令集 ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令,对应ARM指令集; 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令,对应Thumb指令集。 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM微处理器在开始执行代码时,应该处于ARM状态。 ARM处理器共有37个寄存器。其中包括:
[单片机]
ARM新架构剑指笔记本市场 英特尔腹背受敌
  最近高通正在将骁龙处理器应用到Windows 10  ARM 系统上, ARM 又发布新的高性能CPU和GPU设计,分别是Cortex A76和Mali G76。下面就随嵌入式小编一起来了解一下相关内容吧。 Cortex A76处理器 Mali G76处理器   虽然 ARM 架构已经是安卓系统主流的SOC架构,但在发布会中ARM一直强调新CPU的笔记本级性能。架构师Mike Filippo表示,Cortex A76相当于i5-7300,如果IP厂商缓存设计得更好,那么可以媲美i7。   官标的数据方面,基于台积电7nm工艺的3GHz A76核心比10nm 2.8GHz的A75核心性能提升35%、省电40%
[嵌入式]
ARM 处理器的几个相关术语
生产ARM的厂商很多,自然ARM处理器的名字就五花八门。但是,它们有些共同点,那就是:架构和核心。 架构这个概念太宽不太懂,一般不同的架构会有不同的指令集,在不同的架构下面还可以有多种核心。核心就是指处理器中ALU等几个关键部件的集合。可以参看百度百科中的arm条目,在相同的架构下,有多个核心,有的MMU不同,有的MIPS不同。 如果从软件角度看,主要应该关心这个处理器支持的指令集。如果知道了arm的核心,也就知道了它的架构和指令集。
[单片机]
S2C发布基于FPGA新的Prototype Ready ARM11和ARM9模块
利用GUC的ARM测试芯片提供一个简单的原型验证环境   S2C今日宣布为其全面的Prototype Ready配件家族新增ARM1176和ARM926 GUC测试芯片模块,用于搭建基于FPGA的原型并将基于FPGA的原型验证板接到用户的目标操作环境。这两款新的ARM测试芯片模块可用于所有S2C SoC/ASIC原型验证硬件包括Virtex-7 TAI Logic Modules, Stratix-4 TAI Logic Modules, Stratix-4 TAI Verification modules, Virtex-6 TAI Logic Modules以及Virtex-6 TAI Verification Modul
[半导体设计/制造]
S2C发布基于FPGA新的Prototype Ready <font color='red'>ARM</font>11和<font color='red'>ARM</font>9模块
基于ARM7微处理器的中文液晶显示技术
1 引言 液晶显示屏LCD作为一种功耗低、体积小、无辐射的显示器件,近几年被广泛应用于各式各样的嵌入式电子产品中,LCD可分为段位式、字符式和点阵式三种,其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求,而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动动画功能,分区开窗口、反转、闪烁等功能,用途十分广泛,为了简化液晶 显示电路的设计和应用,生产厂家通常将液晶显示单元、显示控制器,显示内存和显示驱动电路等装配在一起,做成液晶显示模块LCD Module(LCM) 。LCM对外提供标准数据和控制接口以及控制指令,本文以ATM12864C为例,
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved