Почему номер вектора INT0 равен 1, а не 2 в виде таблицы?
Я использую ATmega32, чтобы сделать прерывание, когда я пытаюсь сделать драйвер внешнего прерывания 0, столкнулся со мной проблема
Таблица векторов прерываний в ATmega32
Код Векторов Прерываний в ISR(вектор)
В коде iom32.h мы видим, что ((INT0_vect " _VECTOR(1) ")) это номер 1, но в листе данных мы видим, что число равно 2, почему?
1 ответ
Решение
Таблица начинает нумерацию с вектора сброса. Но нет необходимости в явном определении (например, RESET_vect) для вектора сброса, так как он не будет использоваться вместе с ISR(). Так что в реализации header/AVRGCC это опущено.
Если вы скомпилируете это
ISR(INT0_vect) { }
и посмотрите на таблицу векторов прерываний
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
4: 0c 94 5f 00 jmp 0xbe ; 0xbe <__vector_1>
Вы можете видеть, что __vector_1 размещен по байтовому адресу 4, который соответствует слову адреса 2 из таблицы данных.