реклама на сайте
подробности

 
 
> Как переопределить прерывание в IAR/EC++?, Объясните почему так?
id_Alx
сообщение Aug 18 2009, 18:45
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 12-08-06
Из: Минск
Пользователь №: 19 504



Подскажите, плз, почему так происходит.
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 все как положено.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.0157 секунд с 7
ELECTRONIX ©2004-2016