barryzxy 发表于 2023-9-6 02:17:01

MDK for 循环不判断问题


软件之前执行OK, 最近突然发现FOR 循环不判断, 编译版本是V6.19,其他配置如图所示








eric2013 发表于 2023-9-6 10:06:18

把这个int i 在函数开头提前定义好,加前缀__IO试试,看看能解决不

barryzxy 发表于 2023-9-6 12:40:54

没有用,写了三个 for (int i = 0; i < 6; i++)最后一个循环不执行,删掉一个,后面那个还是同样的问题, 删除的剩最后一个,最后一个也有问题,将三个变量名字换了也不行, 刚加了__IO也不行, 我用的系统是CMSIS OS, 在一个任务里面的循环.

barryzxy 发表于 2023-9-6 13:05:51

附件中有图片

eric2013 发表于 2023-9-6 15:26:18

AC6的for循环,我只遇到过这种问题。

在MDK AC6的高等级优化下,for循环延迟执行异常了
https://www.armbbs.cn/forum.php?mod=viewthread&tid=98478

barryzxy 发表于 2023-9-6 16:39:45

搞不定,各种测试,又搞了一天, 两个相同的任务, 结构一样, 其中一个for 有问题, 另一个没有问题, 谢谢, 后续出问题再回帖

fyyxxm 发表于 2023-9-6 16:53:36

rtos出问题,首先判断是不是栈溢出

barryzxy 发表于 2023-9-6 19:50:37

fyyxxm 发表于 2023-9-6 16:53
rtos出问题,首先判断是不是栈溢出

也没有溢出, 任务分配的都够, 感觉是循环嵌套太深了,

庄永 发表于 2023-9-6 21:23:53

barryzxy 发表于 2023-9-6 19:50
也没有溢出, 任务分配的都够, 感觉是循环嵌套太深了,

应该定义的i被优化掉了,在最前面定义一个i,所有循环都使用这个i试试

2859932063 发表于 2023-9-7 09:10:26

换一个字母表示试试,你这个栈里面有两个i

Edmund1964 发表于 2023-9-11 20:46:33

我觉得问题出在sizeof(all_t), all_t如果是extern定义的, 那sizeof(all_t)会是0, AC6碰到这样的情况就会把if (..>sizeof(all_t)这么一段切底的移除。所以才有你认为它不循环
验证这个很用容, 你把sizeof(all_t)用个常量代替,再跑试试

AC6编译是很高效,所以有的时候它编译出来的代码可能跟码农原先的代码思路完全不一样,这时候最好你是有看懂汇编的能力,从汇编的窗口对照它把你的代码改成什么个样,否则很难查错。
页: [1]
查看完整版本: MDK for 循环不判断问题