某些地址空间的预处理程序指令

时间:2015-09-30 00:53:19

标签: c++ c avr

让我们说我想定义一个可以获取int8_t的指令并将其存储到指定的内存位置,例如0x0071。我该怎么做?

我知道我可以说

#define DDRA 0xAA

这会使DDRA = 0xAA,但我该怎么做才能输入

DDRA = 0xBB;

会在地址0x0071写入0xBB吗?

1 个答案:

答案 0 :(得分:0)

AVR-GCC标头使用内部_SFR_IO8宏定义I / O端口,例如:在<avr/iom328p.h>

#define PORTB _SFR_IO8(0x05)

此宏在<avr/srf_defs.h>中定义为:

#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)

反过来,它由同一文件中的_MMIO_BYTE宏解决:

#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))

__SFR_OFFSET的定义是......有点模糊。它与AVR I / O空间和内存开始之间的32字节偏移有关。

TL; DR:#define DDRA _SFR_IO8(0x71),但如果它实际上是标准I / O端口,那么您的部分标准标题应该已经这样做了。