Цитата(kamedi_clab @ Jan 4 2007, 18:23)

и для радиолюбителей. а по списку компаний его использующих и по голосованию на этом сайте и для проффи тоже.
Цитата(aesok @ Jan 4 2007, 15:36)

INTERRUPT(SIG_OVERFLOW1) Интерпретируеться компилятором ни как описание функции обработчика прерывания, а как описание обычной функции с именем INTERRUPT.
Анатолий.
Анатолий, напишите пожалуйста окончательно пример - как в последнем WinAVR объявлять прерывание. например по переполнению Timer0.
Спасибо !
Короткий ответ:
ISR(TIMER0_OVF_vect)
{
код
}
Длинный ответ:
1. В '.с' файл где пишете обработчик прерывания должен быть включен заголовочный файл <avr/interrupt.h>:
#include <avr/interrupt.h>
2. Описываете обработчик прерывания:
ISR(*_vect)
{
код
}
3. Для того чтобы правильно написать имя вектора прерывания '*_vect', открываете в даташите таблицу с описанием векторов прерывания (Table XX. Reset and Interrupt Vectors), находите нужное вам прерывание. Слова в имени прерывания должны быть разделены одним знаком подчеркивания и в конец добавлено _vect. Примеры:
TIMER1 OVF -> TIMER1_OVF_vect;
USART, RXC -> USART_RXC_vect.
Но проще открыть заголовочный файл на ваш контроллер и скопировать оттуда (например 'include/avr/iom8.h'), для некоторых контроллеров заголовочные файлы идут на семейство, например для AT90USB1286 ищете не в 'iousb1286.h' а в 'iousbxx6_7.h'.
4. Компилируете проект и внимательно смотрите на варинги компилятора, если выскочило что-то типа:
"XXXX appears to be a misspelled signal handler" - значит вы ошиблись с именем прерывания повторить пункт 3.
5. Если вы хотите быть уверенным на 100%, открываете файл листинга, находите 0-вой адрес:
Код
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end>
2: 2a c0 rjmp .+84 ; 0x58 <__vector_1>
4: 29 c0 rjmp .+82 ; 0x98 <__vector_2>
6: 27 c0 rjmp .+78 ; 0x56 <__bad_interrupt>
8: 26 c0 rjmp .+76 ; 0x56 <__bad_interrupt>
a: 25 c0 rjmp .+74 ; 0x56 <__bad_interrupt>
c: 24 c0 rjmp .+72 ; 0x56 <__bad_interrupt>
e: 23 c0 rjmp .+70 ; 0x56 <__bad_interrupt>
10: 22 c0 rjmp .+68 ; 0x56 <__bad_interrupt>
12: 21 c0 rjmp .+66 ; 0x56 <__bad_interrupt>
14: 20 c0 rjmp .+64 ; 0x56 <__bad_interrupt>
.....
Для тех векторов для которые есть обработчики осуществляется переход на метки __vector_XX, для которых нет на __bad_interrupt.
Анатолий.
Сообщение отредактировал aesok - Jan 4 2007, 22:15