打印
[C语言]

if语句问题求教

[复制链接]
1059|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一叶倾城wwq|  楼主 | 2023-6-9 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一叶倾城wwq 于 2023-6-9 19:50 编辑

用的GD32F103单片机,问题是这样的:声明两个全局变量,volatile unsigned char a,b;一个代表当前温度,一个代表目标温度,当前温度由AD采集赋值,目标温度由用户设置,目前出现的问题是使用过程中,有时不执行if(a<b){}里的语句,重新设置目标值后又正常。一开始不加volatile的话好像被优化掉,直接不执行{}里的语句.
特来论坛求教。

使用特权

评论回复
沙发
一叶倾城wwq|  楼主 | 2023-6-10 08:27 | 只看该作者
大佬们

使用特权

评论回复
板凳
专注于嵌入式| | 2023-6-10 08:47 | 只看该作者
你不贴代码谁知道

使用特权

评论回复
地板
zchong| | 2023-6-10 09:06 | 只看该作者
debug

使用特权

评论回复
5
computer00| | 2023-6-10 09:34 | 只看该作者
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少

使用特权

评论回复
6
一叶倾城wwq|  楼主 | 2023-6-10 10:01 | 只看该作者

在几个文件都有调用,不太好贴,我觉得描述清楚了吧

使用特权

评论回复
7
一叶倾城wwq|  楼主 | 2023-6-10 10:04 | 只看该作者
computer00 发表于 2023-6-10 09:34
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少

机器不在我手上,看来也只能如此了,想办法看下运行数据

使用特权

评论回复
8
地瓜patch| | 2023-6-10 11:52 | 只看该作者
调低优化级别,keil的话在options for...-----c/c++----optimization

使用特权

评论回复
9
一叶倾城wwq|  楼主 | 2023-6-10 13:44 | 只看该作者
地瓜patch 发表于 2023-6-10 11:52
调低优化级别,keil的话在options for...-----c/c++----optimization

从level 3 调到0试过,也是会偶尔不运行if(a<b){}里面的语句,之前在辉芒单片机的IDE遇到过,加上volatile就解决了,在keil5里编写的GD32程序就没解决,大佬们遇到过此类问题吗?当if里的左值右值都是变量时。

使用特权

评论回复
10
专注于嵌入式| | 2023-6-10 14:06 | 只看该作者
我意思你把所有无关代码去掉,只留一个if语句来试试,看看问题是否存在,你不信不信,只要在if语句前加个小延迟就没事了

使用特权

评论回复
11
ayb_ice| | 2023-6-12 08:40 | 只看该作者
加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了

使用特权

评论回复
12
一叶倾城wwq|  楼主 | 2023-6-13 09:20 | 只看该作者
ayb_ice 发表于 2023-6-12 08:40
加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了 ...

您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制,而出现问题时这个值居然比我最小值还小,所以没执行,就是不知道实在哪里被改变的

使用特权

评论回复
13
ayb_ice| | 2023-6-13 10:41 | 只看该作者
一叶倾城wwq 发表于 2023-6-13 09:20
您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制 ...

如果没有地方明确改变变量值,那就可能是指针指错了,指针指错了比较难搞

使用特权

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

本版积分规则

80

主题

1340

帖子

11

粉丝