IAR定义变量数组占用奇地址

[复制链接]
2680|7
 楼主| lowe0822 发表于 2015-6-15 10:51 | 显示全部楼层 |阅读模式
430F2芯片
IAR5.3
程序中定义了很多数组,按照字节对齐,应该都是从RAM偶地址分配空间,但是有一个数组,却是从奇地址开始。

这样导致我强制类型转换就会出错。


朋友们,有没有遇到这种情况的,怎样处理。
ayb_ice 发表于 2015-6-15 10:59 | 显示全部楼层
字节对齐等于没有用,

应该是字对齐
 楼主| lowe0822 发表于 2015-6-15 12:51 | 显示全部楼层
唯一区别是此数组被3个C文件引用,其他都是一个两个文件
 楼主| lowe0822 发表于 2015-6-15 15:00 | 显示全部楼层
一句话慨括一下:

定义字节型数组变量有可能会分配为奇地址起始,这样导致无法指针强制转换为浮点数
ayb_ice 发表于 2015-6-15 15:09 | 显示全部楼层
lowe0822 发表于 2015-6-15 15:00
一句话慨括一下:

定义字节型数组变量有可能会分配为奇地址起始,这样导致无法指针强制转换为浮点数 ...

这不费话吗

任意地址本来就是字节对齐的
 楼主| lowe0822 发表于 2015-6-16 07:58 | 显示全部楼层
问题已经解决了,尝试增加空定义使其全为双字节,从而对其。

字节对齐指的是不同数据类型间存放方法,不是你说的地址存放的位,无知者无畏。
、、、、、、、、、、、、、、、、、、、、、、、、、
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
1.数据类型自身的对齐值:
  对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
  2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
  3.指定对齐值:#pragma pack (value)时的指定对齐值value。
  4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
hgjinwei 发表于 2015-6-16 08:25 | 显示全部楼层
当你试图强制执行时,最好还是想想丫会不会反抗。
xuesong10210 发表于 2017-4-5 16:36 | 显示全部楼层
遇到同样问题,通过联合体可顺利解决!楼主的处理方法看的不太明白!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部