Debugging “我怎么能?”;“实时观察”;在IAR Workbench中调试时联合中的变量

Debugging “我怎么能?”;“实时观察”;在IAR Workbench中调试时联合中的变量,debugging,watch,iar,Debugging,Watch,Iar,我是编程新手,但在IAR中调试时需要一些帮助 我已经创建了一个带有浮点的并集,一个由4个uint8和4个uint8变量组成的数组,工作正常,当打印到IO终端时,我可以设置浮点值和其他值 我想在调试时监视live watch窗口中的变量,但它显示“错误,无法获取测试地址”(测试是联合体的名称) 除了查看内存位置之外,还有其他方法可以做到这一点吗? 如果所有的变量都是32位的,我会在几个小时后到办公室测试它吗 union Eeprom { struct { uint8_t Byte1; uint8_

我是编程新手,但在IAR中调试时需要一些帮助

我已经创建了一个带有浮点的并集,一个由4个uint8和4个uint8变量组成的数组,工作正常,当打印到IO终端时,我可以设置浮点值和其他值

我想在调试时监视live watch窗口中的变量,但它显示“错误,无法获取测试地址”(测试是联合体的名称)

除了查看内存位置之外,还有其他方法可以做到这一点吗? 如果所有的变量都是32位的,我会在几个小时后到办公室测试它吗

union Eeprom
{
struct
{
uint8_t Byte1;
uint8_t Byte2;
uint8_t Byte3;
uint8_t Byte4;
};
float floatvalue;
uint8_t Array[4];
};

int main(void)
{
  union Eeprom Test;

  Test.floatvalue = 23.1;

printf("floatvalue %3.2f \n Byte1 %x\n Byte2 %x\n Byte3 %x\n Byte4 %x\n 
   Array[0] %x\n Array[1] %x\n Array[2] %x\n Array[3] %x\n",      Test.floatvalue, 
   Test.Byte1, Test.Byte2, Test.Byte3, Test.Byte4, 
   Test.Array[0], Test.Array[1], Test.Array[2], Test.Array[3]);
“实时观察”窗口如下所示:

输出如下所示:


任何帮助都将不胜感激

以下是我的IAR手册:

实时观察窗口 “查看”菜单中的“实时观察”窗口会重复采样和 显示应用程序执行时表达式的值中的变量 表达式必须静态定位,例如全局变量。

变量<代码>联合Eeprom测试在
main
函数中声明,因此它具有自动存储持续时间。它们被放置在堆栈上,并且没有预定义的地址,这使得调试器很难保持。因此,它们不能与实时监视一起使用

Test
移到
main
之外,或使用
static
声明它,因此,代码现在是:

union Eeprom
{
struct
{
uint8_t Byte1;
uint8_t Byte2;
uint8_t Byte3;
uint8_t Byte4;
};
float floatvalue;
uint8_t Array[4];
};

union Eeprom Test;

int main(void)
{

  Test.floatvalue = 23.1;

printf("floatvalue %3.2f \n Byte1 %x\n Byte2 %x\n Byte3 %x\n Byte4 %x\n 
   Array[0] %x\n Array[1] %x\n Array[2] %x\n Array[3] %x\n",      Test.floatvalue, 
   Test.Byte1, Test.Byte2, Test.Byte3, Test.Byte4, 
   Test.Array[0], Test.Array[1], Test.Array[2], Test.Array[3]);
Live watch窗口如下所示:


非常愚蠢的错误,谢谢。我移动了它并添加了-union Eeprom测试;-在主管道外申报。