如何从此定义中检索指针?
定义:#define SPIE (*(SPI_t *) 0x0AC0) /* Serial Peripheral Interface */
,注册地址为0x0AC0
。 SPI_t是在头文件中进一步定义的结构:
/* Serial Peripheral Interface */
typedef struct SPI_struct
{
register8_t CTRL; /* Control Register */
register8_t INTCTRL; /* Interrupt Control Register */
register8_t STATUS; /* Status Register */
register8_t DATA; /* Data Register */
} SPI_t;
我真的不知道定义中发生了什么。它看起来像指针被转换为结构,但我不确定。
我需要的是一个uint16_t*
指针,所以我可以把它传递给一个函数。使用spi mySpi( &PORTB);
,构造函数为
spi::spi(volatile uint16_t* reg)
{
spiReg = reg;
} //spi
结果为Error 1 no matching function for call to 'spi::spi(PORT_t*)'
答案 0 :(得分:1)
define #define SPIE (*(SPI_t *) 0x0AC0
正在为位于0x0AC0的4个字节的内存创建一个符号名称(SPIE)。即0x0AC0是控制寄存器,0x0AC1是中断控制寄存器,依此类推。
您的C代码应该能够像这样引用这些
SPIE.CTRL = 7; // set low 3 bits for some reason
SPIE.INTCTRL = 4; // set 3rd bit, disable all others
要获取地址,您可以照常“抓住地址”:&SPIE
。评估时,这将是0x0AC0,但类型为SPI_t *
。
你的构造函数需要一个16位寄存器,但SPIE只定义了8位寄存器,所以我认为它不会很好用。