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

 
 
> __interrupt_handler, Как отключить сохранение в стек при обработке?
expflash
сообщение Mar 20 2008, 07:25
Сообщение #1


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

Группа: Свой
Сообщений: 97
Регистрация: 6-02-08
Из: Казань
Пользователь №: 34 802



Приветствую! Пишу программу для 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 генерится заново.
Подскажите, как обойти?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
tolik1
сообщение Mar 20 2008, 09:32
Сообщение #2


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

Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016



Сам пользую РРС (механизм обработки прерываний немного разный), но думаю что никак. Упаковка в стек осуществляется самим ядром процессора (а не процедурой обработки прерывания). Если хотите повысить время реакции, то есть 2 пути:
1) Увеличивать такт. частоту
2) Пытаться реализовывать функции обработки на логике
Go to the top of the page
 
+Quote Post
expflash
сообщение Mar 20 2008, 10:10
Сообщение #3


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

Группа: Свой
Сообщений: 97
Регистрация: 6-02-08
Из: Казань
Пользователь №: 34 802



Но в мануале на МВ отдельно написано, что для функций обработки прерывания в прототипе нужно добавлять атрибут __attribute__ ((interrupt_handler)) или __attribute__((save_volatiles)) и тогда компилятор добавляет инструкции записи в стек. Я так понял что этого можно и не делать. Но здесь функция обработки прерывания вызывается опосредованно через __interrupt_handler ().
Go to the top of the page
 
+Quote Post
expflash
сообщение Mar 26 2008, 12:02
Сообщение #4


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

Группа: Свой
Сообщений: 97
Регистрация: 6-02-08
Из: Казань
Пользователь №: 34 802



Отбой! Похоже действительно нельзя. Если извернуться и убрать все атрибуты, при компиляции проекта всеравно выскакивает ошибка: нехватает атрибута interrupt_hendler.

Сообщение отредактировал expflash - Mar 26 2008, 12:03
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:54
Рейтинг@Mail.ru


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