TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28379S: 在线仿真时,上位机显示long型数据在0附近波动会出现异常值65535

Part Number:TMS320F28379S

你好,

1、首先说明问题:在变量在线监测表中可以看到IqFdb这个变量的值可以出现-65514这个值,而根据我的设计,这是绝对不可能的,此时电流为0,它应该如上面的变量IdFdb所示,在几十–负几十之间波动

2、给出我观察到的现象:

图中红框内的数据地址为0xd38c,也就是上面提到的那个会出现异常值的变量IqFdb,可以看到它的高16位此时没有更新(显示为黑色),值为0x0000;低16位更新了(显示为红色),值为0xFFF9,所以此时监控框内用了分别用了先后两个数据的高16位和低16位,拼接出的数据是"0x0000 FFF9"也就是“61433”,这绝对超出我的限值范围了!

3、我的推论:由于2中描述的现象,我认为是long型的变量高16位和低16位没有同时更新,导致的显示错误。而此时该变量的值应该是“0xFFFF FFF9”,也就是"-7"。

4、本次提问的目的:想咨询一下这种BUG大家也经常遇到吗?两个字节没有同时更新显示的问题是由什么引起的?应如何避免。毕竟我之前的工程当中没有出现这种情况。

**附加说明:由于操作困难,上面出现的两张截图不是同时截取的,所以变量的值不能对应上。

Susan Yang:

谢谢您的详细说明。请问能否私信一下工程,我们具体看一下?目前我也没有遇到过“两个字节没有同时更新显示的问题”

,

user6407498:

为方便您的查看,我在一个十分简单的例程上复现了上述现象。

首先导入c2000->device_support->f2837xs->examples->cpu1->timed_led_blink

并仅在main.c中做两处修改,修改内容如下:

首先定义变量

int ix = 2,iy = 3,iu = 2,iv = -2;

long rr = 0;

然后添加循环函数

while (1) {   if (iv>2)       iv = -2;   else       iv++;   rr = (long)ix*iu+(long)iy*iv;   if ((rr1 > 600)||(rr1 < – 600))      return;

}

在线运行以后就可以观察到我前面描述的现象

即,rr的结果本应该在-2至10之间变化,但是在观测窗口中可以看到65534之类的数值

,

user6407498:

我的CCS安装包版本是CCS8.3.1.00004_win32,运行平台是LAUNCHXL-F28379S Development Kit

,

Susan Yang:

好的,我在379D的板子上看一下哈。另外您的编译器版本是多少?

,

user6407498:

当前使用的是v20.12.0.sts

另外我还换过20.2,18.1,6.4均如上述结果

,

Susan Yang:

我将代码改为如下进行测试,rr1一直为4,而rr2是偶尔会出现65534的值

while (1) { if (iv>2) iv = -2; else iv++;

rr1=(long)ix*iu; rr2=(long)iy*iv; rr = rr1+rr2; if ((rr > 600)||(rr < – 600)) return;

}

,

user6407498:

因为rr1是不变的啊,而rr2在正负数之间跳变的时候就是会出现65534

,

Susan Yang:

是的,我能复现您的错误。我会在确认后给您回复

,

user6407498:

非常感谢您的关注!!!

期待您的回复

,

Susan Yang:

我认为和负数有关系。我今天用iv为2测试了一下,没有问题。查看iv为2或者-2时的反汇编情况,两者使用的mov语句不同,分别为

mov和movw(w用于16位的字值)

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28379S: 在线仿真时,上位机显示long型数据在0附近波动会出现异常值65535
分享到: 更多 (0)