请选择 进入手机版 | 继续访问电脑版

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

cubeIDE 编译等级不同,if函数可能无法正常执行?

[复制链接]
weiwei4 提问时间:2022-8-31 16:01 / 未解决
芯片使用G030,优化等级高于optimize for debug时,就会出现 main函数里的while()循环出现if()内语句不能正常执行的问题
testcode.jpg testcode1.jpg


查了半天才发现跟优化等级的有关的
收藏 评论5 发布时间:2022-8-31 16:01

举报

5个回答
yr 回答时间:2022-8-31 16:37:45
if的变量要申明成volatile了吗?否则编译不会每次读出变量的最新值做判断。

xmshao 回答时间:2022-8-31 16:47:11
这是正常现象,跟你的代码、跟优化等级息息相关。
weiwei4 回答时间:2022-8-31 17:11:57
yr 发表于 2022-8-31 16:37
if的变量要申明成volatile了吗?否则编译不会每次读出变量的最新值做判断。

...

没有设置成 volatile ,但是最主要的是,如果将if写成一个函数 在 main 里进行调用, 同样没有设置成 volatile,相同优化等级下,程序是可以正常运行的
这个说明优化上还是有很多坑的
yklstudent 回答时间:2022-8-31 20:53:00
优化等级很考验C语言功底啊,要求不高就别开起优化等级了
weiwei4 回答时间:2022-9-1 09:22:45
yklstudent 发表于 2022-8-31 20:53
优化等级很考验C语言功底啊,要求不高就别开起优化等级了

的确,开优化需要注意程序的规范,但是这么个问题还是第一次见
以前用KEIL写一直都是开低等级优化的,也没遇到这样的问题,这次用cubeIDE只是开了O1优化就发现了这个问题
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版