Господа, Вы занимаетесь просто какой-то х.р..й ...

Вот это обертка в асм файле isr.s :
Код
.extern curr_isr
.global TIMER1_COMPA_vect; прерывание с переключаемым обработчиком
TIMER1_COMPA_vect:
push r30
push r31
lds r30, curr_isr
lds r31, curr_isr + 1
icall
pop r31
pop r30
reti
а вот это сам файл с обработчиками и примером:
Код
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char tmp;
void INT0_vect(void) __attribute__((interrupt)); // свободный вектор прерывания
void INT0_vect(void)
{
tmp = 0; // тело обработчика 0
}
void INT1_vect(void) __attribute__((interrupt)); // свободный вектор прерывания
void INT1_vect(void)
{
tmp = 1; // тело обработчика 1
}
//Указатель на функцию обработчик
void (* curr_isr)(void) = INT1_vect;
int main(void)
{
curr_isr = INT1_vect;
asm("sei");
while (1);
}
Накладные расходы примерно 16МЦ... на фсе...