Tôi gặp vấn đề với việc viết trình xử lý ngắt trong trình biên dịch Keil ARM cho LPC1114. Khi tôi viết chương trình trong C ++ và chỉ định tùy chọn trình biên dịch --cpp, tất cả mã từ các trình xử lý ngắt sẽ biến mất, nó được thay thế bằng vòng lặp vô hạn. Tôi đã viết chương trình đơn giản minh họa rắc rối của tôi.
#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();
}
Khi cố gắng biên dịch mã này với tùy chọn trình biên dịch --cpp, tôi nhận được vòng lặp vô hạn trong disasm:
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
Đây là nơi phải có __NOP () từ chương trình trên. Và nó ở đó khi tôi biên dịch mã với tùy chọn trình biên dịch --c99 hoặc không có tùy chọn bổ sung. Phiên bản MDK của Keil là 4,12. Bất cứ ai có thể cho tôi biết là có bất kỳ giải pháp hoặc giải pháp?
volatile
trong đó.