打印
[AVR单片机]

求助 ICCAVR unsigned long型数据的高16位老是丢

[复制链接]
1271|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sanguanko|  楼主 | 2015-3-19 00:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char acc_data_start_EEPROM[4]={0x00,0x0f,0x42,0x34};//即二进制是00000000,00001111,01000010,00110100 这4个数合到一起是十进制数999988
unsigned long acc_data_start;
///////////////////////////方法1//////////////////////////////////////////////////////////////////////////
acc_data_start=((((acc_data_start_EEPROM[0]<<0x18)+(acc_data_start_EEPROM[1]<<0x10))+(acc_data_start_EEPROM[2]<<0x08))+(acc_data_start_EEPROM[3]));
///////////////////////////方法2////////////////////////////////////////////////////////////////////////////////////////////////
  acc_data_start=acc_data_start_EEPROM[0];
  acc_data_start=acc_data_start<<8;
  acc_data_start=acc_data_start+acc_data_start_EEPROM[1];
  acc_data_start=acc_data_start<<8;
  acc_data_start=acc_data_start+acc_data_start_EEPROM[2];
  acc_data_start=acc_data_start<<8;
  acc_data_start=acc_data_start+acc_data_start_EEPROM[3];


开发环境是ICCAVR,用以上两种方法把acc_data_start_EEPROM[4] 合并成00000000000011110100001000110100 即十进制数99988,保存到 acc_data_start,但是高16位好像丢了,只有低16位.这时为什么?该怎么处理?求助
经过我的验证,就是直接赋值  acc_data_start=0b00000000000011110100001000110100,acc_data_start也是保存不了高16位,ICCAVR是支持long型的啊!?
百度  ICCAVR long ,第一条,马老师在***电子论坛里有讲,但是看不懂,求高人用通俗的语言讲解,多谢。


相关帖子

沙发
SD10A| | 2015-9-20 11:47 | 只看该作者
你在compiler options 中选 Target 选Long

使用特权

评论回复
板凳
jrh200310| | 2015-11-1 13:29 | 只看该作者
我也碰到这个问题,选了也没用。不知道怎么处理

使用特权

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

本版积分规则

262

主题

290

帖子

2

粉丝