3426|4

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

很奇怪的现象,大家来帮我看看, [复制链接]

我定义个数组,用来存储不同类型的数
INT8U I2cData[32];
然后 *((INT16U*)I2cData)=1234; 1234的16进制是0x04d2;
这样,应该是 I2cData[0]=0xd2,I2cData[1]=0x04; 才对,
可是我再仿真时,发现数据都向前偏移了1个地址,比如
I2cData 的首地址为 0x20fb,
本来应该 在地址0x20fb,0x20fc 的值为0xd2,0x04,
可是实际中查看memory , 却变成 0x20fa,0x20fb 的值为0xd2,0x04,

也就是16位整数,和浮点数等需要多字节存储的, 实际存储地址不对,向前偏移了1个地址,
这是什么原因呢??
如果我想 在EEPROM里存储不同类型的数值,应该怎么做呢,比如 怎样把浮点数转换成16进制,逐个字节存储呢,

我以前在F149上用上边的方法(定义个通用数组,然后*((INT16U*)I2cData)= xxx 来存储不同类型数值)
就没问题,换成F5437,就出现上面的莫名其妙的奇怪问题...

最新回复

ls说得很对 偶地址!!  详情 回复 发表于 2009-8-7 10:38
 
点赞 关注

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

最终,我用联合union解决了

上边出现的现象 一直 百思不得其解, 没办法,我最后只能用union来解决了
就是定义如下联合
union I2C_DATA
{
INT8U int8u[32];
INT16U int16u[16];
FP32 fp32[8];
}I2cData;

需要操作8位数时,用 I2cData.int8u[] ,操作浮点数时,用 I2cData.fp32[]


不过上边的问题一直困惑着我,为什么用上边定义int8u数组, 转换类型存储 的方法在430F149上运行的好好的,在F5437上就不行,会不会是IAR软件有bug,,~~~~

有时候真的很奇怪,一句很简单的C程序,在某些时候, 运行时就会出问题,没办法,只能改成别的同样功能的语句就可以~~~
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
呵呵,C嘛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
问题很简单呀,你定义成长整型,就不会有问题了;整形起始地址必须为偶数(0,2,4等),长整型起始地址必须为4的倍数(0,4,8等);你定义的联合体的起始地址一定是4的倍数。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
ls说得很对
偶地址!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表