Почему номер вектора 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 из таблицы данных.

Другие вопросы по тегам