小编Ale*_*Crb的帖子

AVR I/O 宏定义如何工作以允许访问寄存器?

我正在查看 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来写入寄存器值(“由他的地址指向”)?这不是指向的寄存器的地址吗?编译器如何工作?

预先非常感谢

c atmega cpu-registers avr-gcc atmel

2
推荐指数
1
解决办法
841
查看次数

标签 统计

atmega ×1

atmel ×1

avr-gcc ×1

c ×1

cpu-registers ×1