Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: __interrupt_handler
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
expflash
Приветствую! Пишу программу для MicroBlaze. Прога обрабатывает прерывания от нескольких внешних устройств, а в остальное время бездействует. Оказалось критичным время реакции, но увеличивать частоту нехочется. Все дело в следующем

void __interrupt_handler () __attribute__ ((interrupt_handler));

extern MB_InterruptVectorTableEntry MB_InterruptVectorTable;

void __interrupt_handler(void)
{
/* The compiler saves all volatiles and the MSR */
MB_InterruptVectorTable.Handler(MB_InterruptVectorTable.CallBackRef);
/* The compiler restores all volatiles and MSR, and returns from interrupt */
}

Тупо убрать атрибут не получается, при перекомпиляции файл microblaze_interrupt_handler.c генерится заново.
Подскажите, как обойти?
tolik1
Сам пользую РРС (механизм обработки прерываний немного разный), но думаю что никак. Упаковка в стек осуществляется самим ядром процессора (а не процедурой обработки прерывания). Если хотите повысить время реакции, то есть 2 пути:
1) Увеличивать такт. частоту
2) Пытаться реализовывать функции обработки на логике
expflash
Но в мануале на МВ отдельно написано, что для функций обработки прерывания в прототипе нужно добавлять атрибут __attribute__ ((interrupt_handler)) или __attribute__((save_volatiles)) и тогда компилятор добавляет инструкции записи в стек. Я так понял что этого можно и не делать. Но здесь функция обработки прерывания вызывается опосредованно через __interrupt_handler ().
expflash
Отбой! Похоже действительно нельзя. Если извернуться и убрать все атрибуты, при компиляции проекта всеравно выскакивает ошибка: нехватает атрибута interrupt_hendler.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.