问题描述
我的目标是能够从外部(使用十六进制编辑器)更改校准变量的值。我已经使用Arduino IDE来开发我的代码。
定义为float的变量称为校正器,并在setup()之前定义为全局变量:float corrector;
在setup()中,我首先定义它的值:corrector = 1.0f;
然后,我打印变量所在的十六进制地址:
Serial.print("\tAddress: "); Serial.println((unsigned int)(&corrector),HEX);
我得到的地址是309,当我在十六进制编辑器中查看该地址时,发现的是30,表示0(错误,因为我给变量赋了值1)。
如果有人能告诉我我做得好不好,我将不胜感激。
谢谢。
解决方法
浮点值“ 1.0f”表示为四个字节3f800000(如果您的平台是低端字节序,则可能是相反的顺序)由于这是没有初始化程序的全局变量,因此其地址很可能是 runtime 地址,而不是二进制文件中的地址。
如果您这样更改定义:
float corrector = 1.0f;
您应该能够在符号表中corrector
符号所在的位置的二进制文件中找到这些字节。