Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не переопределяется функция в CrossWorks
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Andrei....
Не переопределяется функция irq_handler в CrossWorks, точнее будет сказать из этого файла не видится другая функция с таким именем. тест примерно такой:
...
ldr pc, [pc, #irq_handler_address - . - 8]
...
irq_handler_address:
.word irq_handler

irq_handler:
b irq_handler

.weak irq_handler

в другом файле:
void irq_handler(void) __attribute__ ((interrupt ("IRQ")));
void irq_handler(void)
{
...
}

что бы могло быть???
etoja
Попробуй в ассемблерном тексте написать так:

.extern __irq_handler
или
.word __irq_handler
Andrei....
пробовал, не видит из асембленого файла идентификатор __irq_handler, собственно в этом то и проблема, если бы видел внешний идентификатор, то и irq_handler бы переопределился.
Andrei....
сейчас выяснил, что если файл в котором описана ф-ия irq_handler компилировать как си, то всё нормально, а если как с++, то внешняя ф-ия irq_handler не видится. не понятно почему?
etoja
У меня твой пример корректно компилируется. Тебе следует поставить патч на компилятор.
Посмотри обсуждение некорректной обработки прерывания IRQ в присоединённом документе.

http://electronix.ru/forum/lofiversion/index.php/t21799.html
Alex03
Цитата(Andrei.... @ Nov 29 2006, 12:14) *
сейчас выяснил, что если файл в котором описана ф-ия irq_handler компилировать как си, то всё нормально, а если как с++, то внешняя ф-ия irq_handler не видится. не понятно почему?


extern "C" попробуй для irq_handler-а.
Alexey Bishletov
Цитата(Andrei.... @ Nov 29 2006, 10:14) *
сейчас выяснил, что если файл в котором описана ф-ия irq_handler компилировать как си, то всё нормально, а если как с++, то внешняя ф-ия irq_handler не видится. не понятно почему?

Для С и С++ используются разные способы превращения имен функций и переменных из исходного текста в ассемблерный текст. Для С это превращение как-то прогнозируемо (т.е. добавляется _ в начале имени или совсем не изменяется), а для С++ полный бардак.
Andrei....
Цитата(Alexey Bishletov @ Nov 29 2006, 11:45) *
Для С и С++ используются разные способы превращения имен функций и переменных из исходного текста в ассемблерный текст. Для С это превращение как-то прогнозируемо (т.е. добавляется _ в начале имени или совсем не изменяется), а для С++ полный бардак.

Да, спасибо, extern "C" помогло.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.