[STM8] STM8 返回值为32位出错,在线等待

[复制链接]
1786|6
 楼主| shaowei2072009 发表于 2013-8-9 15:52 | 显示全部楼层 |阅读模式
STM, STM8, ST, TE, AD
给位大大,今天遇到奇怪的事情
u32 CalRead()
{
   u32 temp;
   temp = (u32)VerifyPara.u8ATTReadBuf[2]<<16 + (u16)VerifyPara.u8ATTReadBuf[1]<<8 + VerifyPara.u8ATTReadBuf[0];
   return temp;
}这个函数返回的值一直都是0,如果我把加(+)改为(|),值就对了。我用的是IAR,如果单个验证也是对的(比如 temp = (u32)VerifyPara.u8ATTReadBuf[2]<<16),输出的值是对的,但是加上后面就出错。
feilusia 发表于 2013-8-9 16:01 | 显示全部楼层
应该是U32+U16的原因,你改成U32+U32就对了。
fxd0h 发表于 2013-8-9 16:01 | 显示全部楼层
   Temp = (U32) (VerifyPara.u8ATTReadBuf [2] << 16 + (u16) VerifyPara.u8ATTReadBuf [1] << 8 + VerifyPara.u8ATTReadBuf [ 0]);


评分

参与人数 1威望 +3 收起 理由
shaowei2072009 + 3 很给力!

查看全部评分

sjnh 发表于 2013-8-9 16:10 | 显示全部楼层
兄弟 << 的优先级 比 + 低,
你的是VerifyPara.u8ATTReadBuf [2]左翼了不知几百位,当然是0了

记住括号要经常用

评分

参与人数 1威望 +1 收起 理由
feilusia + 1 赞一个!

查看全部评分

chuangpu 发表于 2013-8-9 20:27 | 显示全部楼层
问题解决了就好   楼主   常来21ic哦   飘过  

评分

参与人数 1威望 +3 收起 理由
shaowei2072009 + 3 很给力!

查看全部评分

 楼主| shaowei2072009 发表于 2013-8-15 14:41 | 显示全部楼层
问题解决了,确实如楼上的兄弟说的,+ 优先级大于>>..必须的加括号,一般还合并字节用|,不用加。
xiaolanghahaha 发表于 2013-8-16 11:07 | 显示全部楼层
3L的修改是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

108

帖子

0

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