【发布时间】:2014-08-29 21:59:02
【问题描述】:
我最近遇到了一个问题,一个变量只在中断处理程序中被修改。变量本身未声明为 volatile,因此在更高级别的优化中编译器会破坏代码。但是,编译器足够聪明,可以编译中断代码,因为中断仍然会触发。
所以这是我的问题:
如果编译器足够聪明,可以编译中断代码,为什么它还不够聪明,无法意识到中断内部的变量发生了变化?
在更高级别的优化中,未被调用的函数会得到优化。由于没有代码调用中断处理程序,因此应该对其进行优化。是什么导致编译器编译中断代码?
【问题讨论】:
-
发布您的代码以及可能的相关反汇编
-
您使用的是什么编译器(是GCC 的最新版本)?什么是优化标志?目标平台和处理器是什么?你为什么不使用
volatile(在你的情况下你真的应该)? -
可能是因为在加载带有地址的向量中断控制器时引用了它?如果引用了处理程序的地址,则编译器将假定它可能被调用。
标签: c optimization interrupt-handling cortex-m3