我通过 I2C 和 STM32 逐字节读取 16 位二进制补码传感器数据,因此我必须将高字节和低字节粘在一起并将这个数字转换为浮点数以获得实际值。
我在 C 中的表达是
// Convert temperature value (256 LSBs/°C with +25°C Offset)
float temp = (tmpData[1] << 8 | tmpData[0])/256.0 + 25.0;
当我使用 STM32CubeIDE 的调试器检查计算时,表达式显示数据的正确转换(见截图)。但是分配给 temp 变量的值始终是 25!在我看来,表达式的第一项总是被假定为 0 还是什么?我已经尝试将括号中的术语直接转换为浮动,但这并没有改变任何东西。
谁能指出我的问题?为什么调试器显示正确的值,但代码分配了错误的值?
以下屏幕截图中的表达式是通过在调试模式下将鼠标悬停在上述代码行的相应部分上来捕获的。
图 4:临时结果(始终为 25,即使上面的表达式显示了预期值)
temp目前只是一个 volatile,因为我还没有使用那个值,编译器会优化它。