for(i=0; i<headerLength; i++)
{
    SPIx->DR = headerBuffer[i];

    while ((SPIx->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);

    SPIx->DR ;
}

语句SPIx->DR;用于读取stm32的SPI外设时清除其“数据寄存器”。
为什么没有l值是合法的?
是不是应该像temp=SPIx->DR?
保罗

最佳答案

为什么没有l值是合法的?
左值只与赋值的上下文相关。表达式可以在任何可见的地方不使用左值,例如:

printf("hello\n");


x++;


SPIx->DR;

所有这些语句都是有效的表达式,可以用作右值。(回想一下,printf返回一个值。)上一个的唯一不同之处是,如果没有volatileSPIx声明,它不会有任何副作用。

关于c - 为什么在STM32中访问寄存器时这对于不带l值的c是合法的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50112112/

10-10 22:48