打印
[STM8]

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

[复制链接]
1531|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 赞一个!
5
chuangpu| | 2013-8-9 20:27 | 只看该作者
问题解决了就好   楼主   常来21ic哦   飘过  

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shaowei2072009 + 3 很给力!
6
shaowei2072009|  楼主 | 2013-8-15 14:41 | 只看该作者
问题解决了,确实如楼上的兄弟说的,+ 优先级大于>>..必须的加括号,一般还合并字节用|,不用加。

使用特权

评论回复
7
xiaolanghahaha| | 2013-8-16 11:07 | 只看该作者
3L的修改是正确的

使用特权

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

本版积分规则

23

主题

108

帖子

0

粉丝