让我们说我想定义一个可以获取int8_t的指令并将其存储到指定的内存位置,例如0x0071。我该怎么做?
我知道我可以说
#define DDRA 0xAA
这会使DDRA = 0xAA,但我该怎么做才能输入
DDRA = 0xBB;
会在地址0x0071写入0xBB吗?
答案 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端口,那么您的部分标准标题应该已经这样做了。