在IAR Workbench中进行调试时,如何在联合中“实时监视”变量

时间:2018-08-16 05:59:10

标签: debugging watch iar

我是编程新手,但需要一些有关IAR调试的帮助。

我创建了一个带浮点的联合,包含4个uint8和4个uint8变量的数组,并且工作正常,我可以设置浮点数,并且在打印到IO端子时其他值正确。

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

除了查看内存位置,还有其他方法吗? 如果所有变量均为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]);

“实时监视”窗口如下所示: enter image description here

输出看起来像这样: enter image description here

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

这是我的IAR手册所说的:

  

实时观看窗口

     

“实时监视”窗口(可从“查看”菜单中获得)反复进行采样和   在您的应用程序执行时显示表达式的值。 变量   表达式必须位于静态位置,例如全局变量。

变量union Eeprom Test;main函数中声明,因此具有自动存储期限。这些被放置在堆栈上,并且没有预定义的地址,这使得调试器难以保留。因此它们不能与Live Watch一起使用。

Test移动到main之外,或用static声明。

答案 1 :(得分:0)

现在,代码为:

y.b[1]

实时监视窗口如下所示:

enter image description here