Подскажите, плз, почему так происходит.
LPC2366, IAR 5.11 Kickstart, модифицированный код мигания светодиодом в прерывании из примеров, JLINK, работа из RAM.
Суть проблемы:
при выборе языка С - все собирается и работает, при выборе EC++ - собирается, но не работает. По коду видно, что функция IRQ_Handler берется не из проекта, а подставляется бесконечная заглушка. Варианты включения и правки vectortrap.s в проект не помогают, даже если полностью исключить упоминания IRQ_Handler кроме cstartup.s, все равно линкер подставляет бесконечную заглушку.
Обработчик в main.cpp:
Код
__irq __arm void IRQ_Handler(void)
{
void (*interrupt_function)();
unsigned int vector;
vector = VICADDRESS; // Get interrupt vector.
interrupt_function = (void(*)())vector;
if(interrupt_function != NULL)
{
interrupt_function(); // Call vectored interrupt function.
}
else
{
VICADDRESS = 0; // Clear interrupt in VIC.
}
}
map-файл:
Код
IRQ_Handler 0x40001ad8 Code Wk vectortrap.o [4]
При переопределении, например, putchar все как положено.