我在Keil ARM编译器中为LPC1114编写中断处理程序时遇到问题。当我用C ++编写程序并指定--cpp编译器选项时,中断处理程序中的所有代码都会消失,它将被无限循环替换。我编写了说明我的麻烦的简单程序。
#include "LPC11xx.h" // LPC11xx definitions
#define SYSTICK_DELAY 120000 // for 10 ms systick @ 12MHz osc
void SysTick_Handler(void)
{
__NOP();
}
int main (void)
{
SystemInit(); // from system_LPC11xx.c
SysTick_Config(SYSTICK_DELAY); // from core_cm0.h
// Loop forever
while (1) __NOP();
}
当尝试使用--cpp编译器选项编译此代码时,我在disasm中遇到无限循环:
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
这是上面程序中的__NOP()所在的地方。当我使用--c99编译器选项或不使用其他选项来编译代码时,它就在那里。Keil MDK版本是4.12。谁能告诉我有什么解决方案或解决方法吗?
优化设置为-level0,时间优化-取消选择。__NOP()并非没有。但是我也尝试在中断处理程序中更改全局变量或调用函数。上面提供的代码已简化为很小,可以重现该问题。
—
x4mer 2010年
向Keil提出了技术支持请求,任何答复都将在此处重新发布。
—
x4mer 2010年
为什么需要__NOP(); 呼叫?您不能只使用简单的分号吗?
—
凯文·维米尔
volatile
在其中声明某些内容。