久芯网

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

avatar weiwei4 提问时间: 2023-07-19 11:31:21 / 未解决
芯片使用G030,优化等级高于optimize for debug时,就会出现 main函数里的while()循环出现if()内语句不能正常执行的问题
cubeIDE 编译等级不同,if函数可能无法正常执行? [相关图片] cubeIDE 编译等级不同,if函数可能无法正常执行? [相关图片]


查了半天才发现跟优化等级的有关的cubeIDE 编译等级不同,if函数可能无法正常执行? [相关图片]
5个回答
  • avatar yr
    回答时间: 2023-07-19 11:59:11

    if的变量要申明成volatile了吗?否则编译不会每次读出变量的最新值做判断。

  • avatar xmshao
    回答时间: 2023-07-19 12:20:14

    这是正常现象,跟你的代码、跟优化等级息息相关。

  • avatar weiwei4
    回答时间: 2023-07-19 12:53:01
    yr 发表于 2022-8-31 16:37
    if的变量要申明成volatile了吗?否则编译不会每次读出变量的最新值做判断。 ...

    没有设置成 volatile ,但是最主要的是,如果将if写成一个函数 在 main 里进行调用, 同样没有设置成 volatile,相同优化等级下,程序是可以正常运行的 这个说明优化上还是有很多坑的

  • avatar yklstudent
    回答时间: 2023-07-19 13:20:18

    优化等级很考验C语言功底啊,要求不高就别开起优化等级了

  • avatar weiwei4
    回答时间: 2023-07-19 13:47:46
    yklstudent 发表于 2022-8-31 20:53
    优化等级很考验C语言功底啊,要求不高就别开起优化等级了

    的确,开优化需要注意程序的规范,但是这么个问题还是第一次见 以前用KEIL写一直都是开低等级优化的,也没遇到这样的问题,这次用cubeIDE只是开了O1优化就发现了这个问题

会员中心 微信客服
客服
回到顶部