打印

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

[复制链接]
2305|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 | 只看该作者
一句话慨括一下:

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

使用特权

评论回复
5
ayb_ice| | 2015-6-15 15:09 | 只看该作者
lowe0822 发表于 2015-6-15 15:00
一句话慨括一下:

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

这不费话吗

任意地址本来就是字节对齐的

使用特权

评论回复
6
lowe0822|  楼主 | 2015-6-16 07:58 | 只看该作者
问题已经解决了,尝试增加空定义使其全为双字节,从而对其。

字节对齐指的是不同数据类型间存放方法,不是你说的地址存放的位,无知者无畏。
、、、、、、、、、、、、、、、、、、、、、、、、、
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
1.数据类型自身的对齐值:
  对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
  2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
  3.指定对齐值:#pragma pack (value)时的指定对齐值value。
  4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

使用特权

评论回复
7
hgjinwei| | 2015-6-16 08:25 | 只看该作者
当你试图强制执行时,最好还是想想丫会不会反抗。

使用特权

评论回复
8
xuesong10210| | 2017-4-5 16:36 | 只看该作者
遇到同样问题,通过联合体可顺利解决!楼主的处理方法看的不太明白!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

59

帖子

0

粉丝