我有一个浮点数,需要将它存储在一个4字节的寄存器中。 但是当我按照下面的例子进行操作时,我没有得到正确的值,因为它被破坏为0x0000C000。
typedef float FLT;
FLT val , temp_val;
val = -6.513467;
(volatile FLT*)0x402174 = val;
相反,如果我使用如下的寻址变量并检查& _temp_val,它就可以工作。
temp_val = val;
_temp_val的值为0xC0D06E52(IEEE 754格式)
我无法理解为什么我无法写入寄存器。
答案 0 :(得分:0)
您应该通过平台定义标题中的一个变量访问该寄存器,而不是通过其地址进行硬编码。
您的C编译器也可能会使用该寄存器,因此您的分配可能会被破坏。
您可以通过查看C编译器为您的代码生成的汇编代码来检查这一点。
您的C编译器也可能允许这样的语法。
register float *f asm ("r0") = ...;