你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C语言调试时遇到的if语句不成立,但是可以执行

[复制链接]
wanyisq 提问时间:2018-4-2 14:05 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2018-4-2 14:05
16个回答
toofree 回答时间:2018-4-2 22:39:24
多写几条语句,再看ret的值。
比如写4条语句,在最后一条处看ret的值是多少。
你这个是一进来if就看ret值的,上面的printf语句条件编译没有编译进来。

降低优化等级应该能改善。

反正keil仿真,只能去适应它,有时候还是实打实的IO点灯或串口打印来监控状态靠谱些。

我之前在IO模拟SPI时,遇到过,两个IO控制之间没有加延时,出来的波形呀,乱七八糟,整个把SPI的时序打乱了。稍加点延时,波形一切正常。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-4-2 23:26:25
先检查初始化是否有问题,再检查IF前后是否有类似语句,因我不符合要求不会运行,看你的配置参数是不是设置的不对

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2018-4-3 14:38:41
应该是编译器优化的问题导致的。

用 Disassembly Window 查看一下汇编代码,看看优化成什么了。
再用 0 优化级别,重新编译一次,再看看汇编,就知道什么问题了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

yu0405jie 回答时间:2018-4-3 15:51:50
应该是编译器优化的原因,在调试的时候界面中显示的是C语言,实际是按照汇编语言来进行调试的,而在优化过程中,编译器会对你写的C语言进行删减,增加以及顺序上的调整,所以汇编与C并不是对应的,最终导致了这种情况

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

农夫水0533 回答时间:2018-4-4 14:37:43
一般我遇到这个问题是由于编译器的问题,一般会加上volatile,然后打印日志调制,debug有时候确实会出现这个问题。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

a110-130038 回答时间:2018-4-4 14:58:24
看看!!!

评分

参与人数 1ST金币 -1 收起 理由
zero99 -1 求助帖不要灌水啊

查看全部评分

wanyisq 回答时间:2018-4-8 15:18:41
谢谢大家,是编译器优化问题。改一下优化等级就可以了
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版