首页 > 解决方案 > 为什么在访问 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 外设的“数据寄存器”。

为什么没有左值是合法的?不应该是 temp = SPIx->DR; ?

保罗

标签: cstm32cpu-registers

解决方案


为什么没有左值是合法的?

左值仅在赋值的上下文中相关。可以在任何地方都没有左值的情况下编写表达式,例如:

printf("hello\n");

或者

x++;

或者

SPIx->DR;

所有这些语句都是有效的表达式,并且可以用作右值。(回想一下,它printf返回一个值。)与最后一个唯一不同的是,除了volatile声明SPIx.


推荐阅读