您是否需要取消引用指针以对寄存器执行按位操作?

时间:2017-03-09 11:43:16

标签: c pointers bitwise-operators

在下面的代码中,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++;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在C中,x[y]相当于*(x+y)。因此,当您执行uart[2]时,您将取消引用指针。

答案 1 :(得分:0)

uart[2]是写*(uart + 2)的另一种方式,因此 取消引用指针。