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