在下面的代码中,while ((uart[2] & (1<<6)) == 0);
行检查是否在硬件寄存器中设置了一个位。
我的问题是 - 代码创建一个指向地址0x00021000的指针*uart
。如果您想要{1 <}中的&
,那么您是否需要取消引用指针?
#define UART_BASE 0x00021000
void putstring(char *str) {
volatile uint32_t *uart = (volatile uint32_t*) UART_BASE;
while (1)
{
while (*str != '\0')
{
while ((uart[2] & (1<<6)) == 0);
uart[1] = *str;
str++;
}
}
}
答案 0 :(得分:1)
在C中,x[y]
相当于*(x+y)
。因此,当您执行uart[2]
时,您将取消引用指针。
答案 1 :(得分:0)
uart[2]
是写*(uart + 2)
的另一种方式,因此 取消引用指针。