使用GCC Arm编译器和优化时,Switch Case语句不起作用

使用GCC Arm编译器和优化时,Switch Case语句不起作用,gcc,arm,switch-statement,Gcc,Arm,Switch Statement,我正在使用带有ARM M0平台的2011年第三季度ARM GCC编译器。在我当前的应用程序上,如果我不使用优化(使用-O0编译),我的代码太大,不适合。如果我使用任何优化(-O1,-O2,-O3,-Os),SWITCH CASE语句都不起作用。我已经验证了这个块中的代码没有被执行,因为简单的GPIO切换操作没有通过 我在某个地方读到过-O1及以上版本的任何优化都会遇到goto代码的问题。然而,我在任何地方都找不到解决这个问题的办法 我还尝试使用最新的GCC ARM编译器,但我的工具与此版本不兼容

我正在使用带有ARM M0平台的2011年第三季度ARM GCC编译器。在我当前的应用程序上,如果我不使用优化(使用-O0编译),我的代码太大,不适合。如果我使用任何优化(-O1,-O2,-O3,-Os),SWITCH CASE语句都不起作用。我已经验证了这个块中的代码没有被执行,因为简单的GPIO切换操作没有通过

我在某个地方读到过-O1及以上版本的任何优化都会遇到goto代码的问题。然而,我在任何地方都找不到解决这个问题的办法

我还尝试使用最新的GCC ARM编译器,但我的工具与此版本不兼容


在此问题上的任何帮助都将不胜感激

试着像这样拆分您的源代码:您不想优化的代码(例如访问内存映射区域,如GPIO)和它的其余部分

在使用不同的优化级别编译每个源文件之后,您将获得一个包含“脆弱”代码的工作版本


然后,当您调试代码时,您将使用一个对象(.o)文件并编译其余的文件。

很可能编译器认为GPIO切换是无用的。您是否使用了
volatile
?请举一个例子,还有一个问题是switch语句的反汇编,“2011 Q3 ARM GCC”是什么?GCC的版本号类似于4.8.1。您正在使用某种预构建版本。你从哪里弄来的?