if语句问题求教
本帖最后由 一叶倾城wwq 于 2023-6-9 19:50 编辑用的GD32F103单片机,问题是这样的:声明两个全局变量,volatile unsigned char a,b;一个代表当前温度,一个代表目标温度,当前温度由AD采集赋值,目标温度由用户设置,目前出现的问题是使用过程中,有时不执行if(a<b){}里的语句,重新设置目标值后又正常。一开始不加volatile的话好像被优化掉,直接不执行{}里的语句.
特来论坛求教。 大佬们 你不贴代码谁知道 debug 判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少 专注于嵌入式 发表于 2023-6-10 08:47
你不贴代码谁知道
在几个文件都有调用,不太好贴,我觉得描述清楚了吧 computer00 发表于 2023-6-10 09:34
判断之前加个log,printf("a=%d,b=%d\n", a, b);看看里面的值到底是多少
机器不在我手上,看来也只能如此了,想办法看下运行数据{:cry:} 调低优化级别,keil的话在options for...-----c/c++----optimization 地瓜patch 发表于 2023-6-10 11:52
调低优化级别,keil的话在options for...-----c/c++----optimization
从level 3 调到0试过,也是会偶尔不运行if(a<b){}里面的语句,之前在辉芒单片机的IDE遇到过,加上volatile就解决了,在keil5里编写的GD32程序就没解决,大佬们遇到过此类问题吗?当if里的左值右值都是变量时。 我意思你把所有无关代码去掉,只留一个if语句来试试,看看问题是否存在,你不信不信,只要在if语句前加个小延迟就没事了 加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了 ayb_ice 发表于 2023-6-12 08:40
加了volatile 是不会被优化的,应该执行了,只是你感觉没有执行,或是其它问题导致变量值已经变了 ...
您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制,而出现问题时这个值居然比我最小值还小,所以没执行,就是不知道实在哪里被改变的{:sweat:} 一叶倾城wwq 发表于 2023-6-13 09:20
您说的对,打印查看后程序反复运行,出现问题的时候确实目标值被改变了,我在计算目标值时有最大最小限制 ...
如果没有地方明确改变变量值,那就可能是指针指错了,指针指错了比较难搞
页:
[1]