c - 为什么在访问 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; ?
保罗
解决方案
为什么没有左值是合法的?
左值仅在赋值的上下文中相关。可以在任何地方都没有左值的情况下编写表达式,例如:
printf("hello\n");
或者
x++;
或者
SPIx->DR;
所有这些语句都是有效的表达式,并且可以用作右值。(回想一下,它printf
返回一个值。)与最后一个唯一不同的是,除了volatile
声明SPIx
.
推荐阅读
- hibernate - 有没有办法“使用同一实体两次”执行单查询 JOIN FETCH?
- linux - 在linux终端中同时修剪字符串的开头/结尾
- c++ - 随机化不同的 cout 语句(例如获得 4 个可能的测验答案)
- html - 有没有办法让我的页面在 html 中响应?
- android - Android Dev - 如何处理音频输出通道
- javascript - 使用纯 Javascript 创建具有自定义格式的唯一标识符
- javascript - Assign div html as attribute - Jquery
- php - 当 php 标签不在开头时,header("HTTP/1.1 400 Bad Request") 无法正确重定向
- apache-kafka - Spring-Kafka:消费者组再平衡对有状态重试的影响
- javascript - React-Axios => 无法读取未定义的属性(读取“长度”)