This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR4133:变量写入同一寄存器

Guru**** 656470 points
Other Parts Discussed in Thread: MSP430FR4133
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1159687/msp430fr4133-variables-being-written-on-same-register

器件型号:MSP430FR4133

大家好。 我正在尝试使用 MSP430FR4133 EVM 处理一些数据、我遇到了将变量写入同一寄存器的问题。 这个代码片段我将采用一些8位值的虚拟数组、将它们组合成一个16位值、然后将它们分解成指数(位15-12)和尾数(位11-0)。 每当我运行代码时、指数变量与"value"变量共享其值。 我查看了它们、它们使用与它们的地址相同的寄存器。 我如何指定它们不是这样的?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    编译器可以随意重复使用它认为合适的寄存器。 如果它发现不再需要寄存器中的某些内容、它可以在那里放置其他内容。 这对编译器来说永远不会是问题、因为它会仔细跟踪这些内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么、为什么我的变量会写入同一个寄存器? 当我在调试模式下单步执行代码时、只要其他更改、我就可以看到"指数"和"值"都在变化。 我在对其执行运算之前实例化"尾 数"、"指数"和"值"、您可以在右侧看到、它选择将尾数本身放在寄存器 R10上、而将指数和值放在寄存器 R15上。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我说过的、编译器会非常小心地跟踪寄存器的使用情况。 如果发现稍后不需要寄存 器中的值、它可以并且将使用该寄存器执行其他操作。 但您的调试器没有该信息(它必须复制编译器和优化器的源代码上的操作)、这就是您看到这两个更改的原因。 它不知道每一个的范围是什么。

    将自动变量分配给寄存器不是静态变量、而是一种完成的操作。 编译器根据需要使用寄存器。

    您说您选择在 R10中放置一个变量、但我在您发布的内容中看不到任何可能实现该目的的内容。