方法:IAR+ARM cortex A7出现非对齐异常(Alignment Fault)的解决办法

14 篇文章 0 订阅
6 篇文章 1 订阅

1.问题描述

在IAR+ARM cortex A7的环境下,需要按照非4字节对齐方式访问结构体成员,其中结构体定义如下:

#pragma pack(1)			//强制使用1字节对齐
typedef struct
{	
	unsigned int a;
	unsigned short b;
	unsigned int c;
}DATA_1;
#pragma pack()			//恢复默认对齐方式

对结构体类型DATA_1执行sizeof(DATA_1)操作,发现其大小已变为10字节,而非按照4字节对齐的12字节。说明 #pragma pack(1)已生效;

但是,当执行如下代码中的赋值语句时,程序将进入非对齐异常(Alignment Fault):

DATA_1 data1;
int dataR=10;
memcpy(&data1.c,&dataR,sizeof(int));
int temp=data1.c;			//此处赋值语句将进入异常

2.问题原因及解决办法

通过查询IAR官方帮助手册,发现问题的原因是编译器未使能非对齐访问。所以,若需要使用非4字节对齐则需要在编译器设置时添加
–no_unaligned_access”选项,如下图所示。
千万别被这个选项的字面意思误导,实际意义以官方文档的说明为准!
千万别被这个选项的字面意思误导,实际意义以官方文档的说明为准!
千万别被这个选项的字面意思误导,实际意义以官方文档的说明为准!
重要的事情说三遍!

在这里插入图片描述
官方文档中的说明内容如下。注意:该选项仅支持ARMv6及以上的架构。
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weekman93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值