首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在中调试时,我如何“实时监视”联合中的变量

在中调试时,我如何“实时监视”联合中的变量
EN

Stack Overflow用户
提问于 2018-08-16 05:59:09
回答 2查看 4.1K关注 0票数 2

我刚开始编程,但在IAR调试方面需要一些帮助。

我创建了一个带有浮点的联合,一个由4个uint8和4个uint8变量组成的数组,这很好,我可以设置浮点数,当打印到IO终端时,其他值都是正确的。

我希望在调试时监视活动监视窗口中的变量,但是它说“错误,不能接受测试的地址”(Test是联合的名称)。

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

代码语言:javascript
复制
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窗口如下所示:

输出如下:

如有任何帮助,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 07:14:23

这是我的IAR手册上说的:

活表窗 Live窗口--可从View菜单中获得--在应用程序执行过程中反复示例和显示表达式的值。表达式中的变量必须静态定位,例如全局变量.

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

Test移出main,或用static声明它。

票数 1
EN

Stack Overflow用户

发布于 2018-08-16 08:44:31

所以,现在的代码是:

代码语言:javascript
复制
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]);

现场监视窗口看起来是这样的:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51870471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档