我正在查看 ATmega2560 寄存器映射 ( iom2560.h) 的标头,其中包含寄存器的所有定义。例如:
#define PINA _SFR_IO8(0X00)
//Macro definition:
#define _SFR_IO8(io_addr) ((io_addr) + 0X20)
Run Code Online (Sandbox Code Playgroud)
所以PINA是一个8位的十六进制值,对应于8位单片机寄存器的地址。当我编写代码时,我只需输入以下代码即可更改寄存器内的值:
PINA |= (1 << 3); // Setting the third bit.
Run Code Online (Sandbox Code Playgroud)
问题是:为什么我可以_SFR_IO8(0X00)通过将值赋给PINA来写入寄存器值(“由他的地址指向”)?这不是指向的寄存器的地址吗?编译器如何工作?
预先非常感谢