4

当我尝试做外部中断 0 的驱动程序时,我正在使用 ATmega32 做中断,遇到了一个问题

ATmega32 中的中断向量表

ISR(向量)中的中断向量代码

在 iom32.h 代码中,我们看到 ((INT0_vect "_VECTOR(1) ")) 它是数字 1,但在数据表中我们看到数字是 2,为什么?

4

1 回答 1

2

数据表以复位向量开始编号。但是不需要对复位向量进行显式定义(如 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。

于 2018-09-25T09:34:37.857 回答