一叶倾城wwq 发表于 2023-6-9 19:42

if语句问题求教

本帖最后由 一叶倾城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

computer00 发表于 2023-6-10 09:34

判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少

一叶倾城wwq 发表于 2023-6-10 10:01

专注于嵌入式 发表于 2023-6-10 08:47
你不贴代码谁知道

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

一叶倾城wwq 发表于 2023-6-10 10:04

computer00 发表于 2023-6-10 09:34
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少

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

地瓜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 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了 ...
您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制,而出现问题时这个值居然比我最小值还小,所以没执行,就是不知道实在哪里被改变的{:sweat:}

ayb_ice 发表于 2023-6-13 10:41

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

如果没有地方明确改变变量值,那就可能是指针指错了,指针指错了比较难搞
页: [1]
查看完整版本: if语句问题求教