我刚开始编程,但在IAR调试方面需要一些帮助。
我创建了一个带有浮点的联合,一个由4个uint8和4个uint8变量组成的数组,这很好,我可以设置浮点数,当打印到IO终端时,其他值都是正确的。
我希望在调试时监视活动监视窗口中的变量,但是它说“错误,不能接受测试的地址”(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]);Live窗口如下所示:

输出如下:

如有任何帮助,将不胜感激。
发布于 2018-08-16 07:14:23
这是我的IAR手册上说的:
活表窗 Live窗口--可从View菜单中获得--在应用程序执行过程中反复示例和显示表达式的值。表达式中的变量必须静态定位,例如全局变量.
变量union Eeprom Test;是在main函数中声明的,因此它具有自动存储持续时间。它们被放置在堆栈中,并且没有预定义的地址,这使得调试器更难保留。因此,它们不能与Live一起使用。
将Test移出main,或用static声明它。
发布于 2018-08-16 08:44:31
所以,现在的代码是:
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]);现场监视窗口看起来是这样的:

https://stackoverflow.com/questions/51870471
复制相似问题