почему это допустимо для c без l-значения при доступе к регистру в STM32 - PullRequest
0 голосов
/ 01 мая 2018
for(i=0; i<headerLength; i++)
{
    SPIx->DR = headerBuffer[i];

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

    SPIx->DR ;
}

оператор SPIx-> DR; используется для очистки «регистра данных» периферийного устройства SPI stm32 при его чтении.

почему это допустимо без значения l? не должно ли это быть что-то вроде temp = SPIx-> DR;

Пол

1 Ответ

0 голосов
/ 01 мая 2018

почему это допустимо без значения l?

Значение l относится только к контексту присвоения. Выражение может быть написано без lvalue где-либо в поле зрения, например:

printf("hello\n");

или

x++;

или

SPIx->DR;

Все эти операторы являются допустимыми выражениями и могут использоваться в качестве значений r. (Вспомните, что printf возвращает значение.) Единственное, что отличается от последнего, это то, что у него не будет побочных эффектов, кроме объявления volatile SPIx.

...