你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
C语言调试时遇到的if语句不成立,但是可以执行
[复制链接]
wanyisq
提问时间:2018-4-2 14:05 /
在调试板子时,遇到的现象。
if语句判断,并不成立。ret的值是0,但是if(1==ret)语句却可以执行。这是什么情况。大家有碰到过的吗。指教一下
赞
0
收藏
0
评论
16
分享
发布时间:2018-4-2 14:05
举报
请先
登录
后回复
16个回答
七哥
回答时间:2018-4-2 22:39:24
a0a.1 32b0c
多写几条语句,再看ret的值。
比如写4条语句,在最后一条处看ret的值是多少。
你这个是一进来if就看ret值的,上面的printf语句条件编译没有编译进来。
降低优化等级应该能改善。
反正keil仿真,只能去适应它,有时候还是实打实的IO点灯或串口打印来监控状态靠谱些。
我之前在IO模拟SPI时,遇到过,两个IO控制之间没有加延时,出来的波形呀,乱七八糟,整个把SPI的时序打乱了。稍加点延时,波形一切正常。
评分
参与人数
1
蝴蝶豆
+3
收起
理由
zero99
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
随风飘扬
回答时间:2018-4-3 15:51:50
a0a.1 32b0c
应该是编译器优化的原因,在调试的时候界面中显示的是C语言,实际是按照汇编语言来进行调试的,而在优化过程中,编译器会对你写的C语言进行删减,增加以及顺序上的调整,所以汇编与C并不是对应的,最终导致了这种情况
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
Angel_YY_ST
回答时间:2018-4-2 15:31:06
a0a.1 32b0c
提示:
作者被禁止或删除 内容自动屏蔽
赞
0
评论
回复
支持
反对
琦子
回答时间:2018-4-2 14:16:05
a0a.1 32b0c
我经常遇到这种情况 不知道为什么 但是奇怪的是最后并不影响我的判断结果
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
STMWoodData
回答时间:2018-4-2 14:23:48
a0a.1 32b0c
提示:
作者被禁止或删除 内容自动屏蔽
赞
0
评论
回复
支持
反对
wenyangzeng
回答时间:2018-4-2 14:30:17
a0a.1 32b0c
1、降低优化等级;
2、ret定义为uint32_t;
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
废鱼
回答时间:2018-4-2 15:36:48
a0a.1 32b0c
编译器优化等级调到0
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
butterflyspring
回答时间:2018-4-2 16:05:04
a0a.1 32b0c
没遇过,坐等答案..
赞
0
评论
回复
支持
反对
qianfan
回答时间:2018-4-2 16:23:36
a0a.1 32b0c
volatile 吧
评分
参与人数
1
蝴蝶豆
+1
收起
理由
zero99
+ 1
查看全部评分
赞
0
评论
回复
支持
反对
不吃肉的羊
回答时间:2018-4-2 17:24:17
a0a.1 32b0c
file:///C:\Users\CJ\AppData\Roaming\Tencent\Users\2839084093\TIM\WinTemp\RichOle\OAW@659P72I07P04D}VJ73X.png
这里选为0.就不会进去了
评分
参与人数
1
蝴蝶豆
+3
收起
理由
zero99
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
STM1024
回答时间:2018-4-2 18:00:52
a0a.1 32b0c
首先看他初始化没有,再看看这个值怎么来的?受到硬件影响大吗,要不要加上volatile?
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
feixiang20
回答时间:2018-4-2 23:26:25
a0a.1 32b0c
先检查初始化是否有问题,再检查IF前后是否有类似语句,因我不符合要求不会运行,看你的配置参数是不是设置的不对
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
无薪税绵
回答时间:2018-4-3 14:38:41
a0a.1 32b0c
应该是编译器优化的问题导致的。
用 Disassembly Window 查看一下汇编代码,看看优化成什么了。
再用 0 优化级别,重新编译一次,再看看汇编,就知道什么问题了。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
农夫水0533
回答时间:2018-4-4 14:37:43
a0a.1 32b0c
一般我遇到这个问题是由于编译器的问题,一般会加上volatile,然后打印日志调制,debug有时候确实会出现这个问题。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
1
2
/ 2 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
比如写4条语句,在最后一条处看ret的值是多少。
你这个是一进来if就看ret值的,上面的printf语句条件编译没有编译进来。
降低优化等级应该能改善。
反正keil仿真,只能去适应它,有时候还是实打实的IO点灯或串口打印来监控状态靠谱些。
我之前在IO模拟SPI时,遇到过,两个IO控制之间没有加延时,出来的波形呀,乱七八糟,整个把SPI的时序打乱了。稍加点延时,波形一切正常。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
2、ret定义为uint32_t;
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
这里选为0.就不会进去了
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
用 Disassembly Window 查看一下汇编代码,看看优化成什么了。
再用 0 优化级别,重新编译一次,再看看汇编,就知道什么问题了。
评分
查看全部评分
评分
查看全部评分