OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3616|回复: 11

if语法问题,关于if得语法问题求助

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-2
在线时间
14 小时
发表于 2020-7-21 16:31:19 | 显示全部楼层 |阅读模式
1金钱
seesum=(usart5buf[0]+usart5buf[1]+usart5buf[2]+usart5buf[3]+usart5buf[4]+usart5buf[5]+usart5buf[6]+usart5buf[7]+usart5buf[8]+usart5buf[9]);
if(usart5buf[10]==seesum)
{
        sum=2;
}       
我这样写sum是等于2得,我换下面这种写法sum就不等于2了
********
seesum=(usart5buf[0]+usart5buf[1]+usart5buf[2]+usart5buf[3]+usart5buf[4]+usart5buf[5]+usart5buf[6]+usart5buf[7]+usart5buf[8]+usart5buf[9]);
                        if(usart5buf[10]==(usart5buf[0]+usart5buf[1]+usart5buf[2]+usart5buf[3]+usart5buf[4]+usart5buf[5]+usart5buf[6]+usart5buf[7]+usart5buf[8]+usart5buf[9]))
{
       sum=2;
}
这是为什么呢,是什么语法问题呢       

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-7-21 17:09:23 | 显示全部楼层
首先,求和这么求也是觉了,你敲得不觉得累,我看的都累,一个for(uint8_t i=0;i<9;i++){Sum+=usartbuf[i];}不香吗。其次,你sum和buff的变量类型一样吗?
回复

使用道具 举报

15

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-8-27
在线时间
44 小时
发表于 2020-7-21 17:14:43 | 显示全部楼层
是不是传回的数据出错了
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2020-7-21 18:54:07 | 显示全部楼层
如2楼说的,类型不一致,可能溢出,导致其实是不一样的
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-7-22 08:14:28 | 显示全部楼层
调试...
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-7-22 10:46:43 | 显示全部楼层
计算的值放入buf中都发生溢出了
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
发表于 2020-7-22 11:58:42 | 显示全部楼层
if一般不这样写(判断类型的数据运算拥挤),因为你0到第9位的数据加起来的数位极有可能超过  数组定义的数据类型长度
你倒是也可在if里做  或与 的结果判定
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-2
在线时间
14 小时
 楼主| 发表于 2020-7-22 13:37:16 | 显示全部楼层
姚先起 发表于 2020-7-21 17:09
首先,求和这么求也是觉了,你敲得不觉得累,我看的都累,一个for(uint8_t i=0;i

类型是一样的
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2019-2-2
在线时间
14 小时
 楼主| 发表于 2020-7-22 13:37:52 | 显示全部楼层
三叶草 发表于 2020-7-22 10:46
计算的值放入buf中都发生溢出了

确实溢出,不过不是取最后8位嘛
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2020-7-22 13:42:58 | 显示全部楼层
if(usart5buf[10]==(unsigned char)(usart5buf[0]+usart5buf[1]+usart5buf[2]+usart5buf[3]+usart5buf[4]+usart5buf[5]+usart5buf[6]+usart5buf[7]+usart5buf[8]+usart5buf[9]))

试下这个
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-7-22 15:13:56 | 显示全部楼层
本帖最后由 姚先起 于 2020-7-22 15:16 编辑
水边的一棵草 发表于 2020-7-22 13:37
确实溢出,不过不是取最后8位嘛

你最好写个checksum函数,比如
uint8_t CheckSum(uint8_t* buff,uint16_t len)
{
   uint8_t sum=0;
   for(uint16_t i=0;i<len;i++)
   {
     sum+=buff;
  }
   return sum;
}
这样可以确保计算类型的一致,其他地方调用也方便。哪怕不是uint8_t 的数据,也可以char buff[20]; check=CheckSum((uint8_t*)buff,9);来运算
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-7-23 09:09:37 | 显示全部楼层
水边的一棵草 发表于 2020-7-22 13:37
确实溢出,不过不是取最后8位嘛

谁和你说的取最后8位,这是比较语句,不是赋值语句。这种比较是按照硬件默认的int的位数进行的,其实就是你用了一个已经截取的数和一个没有截取的数进行比较,结果肯定不正确。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 01:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表