为什么在STM32中访问寄存器时,这对于没有L值的C是合法的


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("hellon");

x++;

SPIx->DR;

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

最新更新