[C语言] if语句问题求教

[复制链接]
1780|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 | 显示全部楼层
computer00 发表于 2023-6-10 09:34 | 显示全部楼层
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少
 楼主| 一叶倾城wwq 发表于 2023-6-10 10:01 | 显示全部楼层

在几个文件都有调用,不太好贴,我觉得描述清楚了吧
 楼主| 一叶倾城wwq 发表于 2023-6-10 10:04 | 显示全部楼层
computer00 发表于 2023-6-10 09:34
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少

机器不在我手上,看来也只能如此了,想办法看下运行数据
地瓜patch 发表于 2023-6-10 11:52 | 显示全部楼层
调低优化级别,keil的话在options for...-----c/c++----optimization
 楼主| 一叶倾城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里的左值右值都是变量时。
专注于嵌入式 发表于 2023-6-10 14:06 | 显示全部楼层
我意思你把所有无关代码去掉,只留一个if语句来试试,看看问题是否存在,你不信不信,只要在if语句前加个小延迟就没事了
ayb_ice 发表于 2023-6-12 08:40 | 显示全部楼层
加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了
 楼主| 一叶倾城wwq 发表于 2023-6-13 09:20 | 显示全部楼层
ayb_ice 发表于 2023-6-12 08:40
加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了 ...

您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制,而出现问题时这个值居然比我最小值还小,所以没执行,就是不知道实在哪里被改变的
ayb_ice 发表于 2023-6-13 10:41 | 显示全部楼层
一叶倾城wwq 发表于 2023-6-13 09:20
您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制 ...

如果没有地方明确改变变量值,那就可能是指针指错了,指针指错了比较难搞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

1381

帖子

11

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