【问题标题】:why this is legal for c without l-value when accessing a register in STM32为什么在访问 STM32 中的寄存器时这对于没有 l 值的 c 是合法的
【发布时间】:2018-05-01 06:16:09
【问题描述】:
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外设的‘Data Register’。

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

保罗

【问题讨论】:

    标签: c stm32 cpu-registers


    【解决方案1】:

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

    左值仅在赋值的上下文中相关。一个表达式可以写成在任何地方都没有左值,比如:

    printf("hello\n");
    

    或

    x++;
    

    或

    SPIx->DR;
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 2018-03-08
      • 2012-09-22
      • 1970-01-01
      • 2020-11-17
      • 2019-12-02
      • 2020-01-09
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多