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

28335灵异事件,2个不用变量的定义影响程序执行结果!!!!?高手请进

很神奇的一个事情。定义两个不用的变量(INT16U X,INT16UY),而且是必须定义,否则程序中的一个有用结构体变量就是不对的。

我在PWM中断测量AD,函数中用了一个静态局部变量 static INT16U nCount,另外一个全局的结构体计数strAVG_SumTemp.Cnt【10】,结构体有十个不同的计数,结构体中的SumTemp.Cnt【i】和这个变量nCount同步计数中断的次数,当计数到一定值(10ms的计数个数)的时候清零。这个定值是用一个宏定义的。意外的发现,nCount计数打出显示是对的,但是其他结构体SumTemp.Cnt【10】的10个计数都是错的。但是只要不定义(INT16U X,INT16U Y)就会出问题,不对。定义了就是固定的160,何解!!当不定义(INT16U X,INT16U Y)发现那结构体计数值SumTemp.Cnt【i】就是不对,是个乱的,一会大一会小,而那个nCount计数却是对的160,按道理PWM中断周期是固定的16K,所以10ms应该是160个值。这两个变量是没有任何地方使用的,但是是个全局的。我试着随意的定义两个变量((INT16U A,INT16U B)代替原来的(INT16U X,INT16U Y)变量名,也是可以的,就是说必须要有两个那样的变量存在,即使是任意的定义。

nCount ++和那个结构体SumTemp.Cnt【i】++是同步的,两个语句挨着的,清零也是同步挨着的,为什么nCount是对的,结构体SumTemp.Cnt【i】是错的??

mangui zhang:

很奇怪。这两个变量不用的话 编译时也会被优化掉的

很神奇的一个事情。定义两个不用的变量(INT16U X,INT16UY),而且是必须定义,否则程序中的一个有用结构体变量就是不对的。

我在PWM中断测量AD,函数中用了一个静态局部变量 static INT16U nCount,另外一个全局的结构体计数strAVG_SumTemp.Cnt【10】,结构体有十个不同的计数,结构体中的SumTemp.Cnt【i】和这个变量nCount同步计数中断的次数,当计数到一定值(10ms的计数个数)的时候清零。这个定值是用一个宏定义的。意外的发现,nCount计数打出显示是对的,但是其他结构体SumTemp.Cnt【10】的10个计数都是错的。但是只要不定义(INT16U X,INT16U Y)就会出问题,不对。定义了就是固定的160,何解!!当不定义(INT16U X,INT16U Y)发现那结构体计数值SumTemp.Cnt【i】就是不对,是个乱的,一会大一会小,而那个nCount计数却是对的160,按道理PWM中断周期是固定的16K,所以10ms应该是160个值。这两个变量是没有任何地方使用的,但是是个全局的。我试着随意的定义两个变量((INT16U A,INT16U B)代替原来的(INT16U X,INT16U Y)变量名,也是可以的,就是说必须要有两个那样的变量存在,即使是任意的定义。

nCount ++和那个结构体SumTemp.Cnt【i】++是同步的,两个语句挨着的,清零也是同步挨着的,为什么nCount是对的,结构体SumTemp.Cnt【i】是错的??

user4184198:

回复 mangui zhang:

 static volatile INT16U nCount试试

很神奇的一个事情。定义两个不用的变量(INT16U X,INT16UY),而且是必须定义,否则程序中的一个有用结构体变量就是不对的。

我在PWM中断测量AD,函数中用了一个静态局部变量 static INT16U nCount,另外一个全局的结构体计数strAVG_SumTemp.Cnt【10】,结构体有十个不同的计数,结构体中的SumTemp.Cnt【i】和这个变量nCount同步计数中断的次数,当计数到一定值(10ms的计数个数)的时候清零。这个定值是用一个宏定义的。意外的发现,nCount计数打出显示是对的,但是其他结构体SumTemp.Cnt【10】的10个计数都是错的。但是只要不定义(INT16U X,INT16U Y)就会出问题,不对。定义了就是固定的160,何解!!当不定义(INT16U X,INT16U Y)发现那结构体计数值SumTemp.Cnt【i】就是不对,是个乱的,一会大一会小,而那个nCount计数却是对的160,按道理PWM中断周期是固定的16K,所以10ms应该是160个值。这两个变量是没有任何地方使用的,但是是个全局的。我试着随意的定义两个变量((INT16U A,INT16U B)代替原来的(INT16U X,INT16U Y)变量名,也是可以的,就是说必须要有两个那样的变量存在,即使是任意的定义。

nCount ++和那个结构体SumTemp.Cnt【i】++是同步的,两个语句挨着的,清零也是同步挨着的,为什么nCount是对的,结构体SumTemp.Cnt【i】是错的??

jianxing ding:

回复 user4184198:

谢谢回复,定义那个volatile也没有用!

神奇的是,我如果把nCount直接赋值给那个结构体的计数strAVG_SumTemp.Cnt[i]就没有问题呢。程序中写的是 nCount ++;strAVG_SumTemp.Cnt[i]++;这样就是有问题的,但是strAVG_SumTemp.Cnt[i]=nCount;就是没有问题的,就是160

很神奇的一个事情。定义两个不用的变量(INT16U X,INT16UY),而且是必须定义,否则程序中的一个有用结构体变量就是不对的。

我在PWM中断测量AD,函数中用了一个静态局部变量 static INT16U nCount,另外一个全局的结构体计数strAVG_SumTemp.Cnt【10】,结构体有十个不同的计数,结构体中的SumTemp.Cnt【i】和这个变量nCount同步计数中断的次数,当计数到一定值(10ms的计数个数)的时候清零。这个定值是用一个宏定义的。意外的发现,nCount计数打出显示是对的,但是其他结构体SumTemp.Cnt【10】的10个计数都是错的。但是只要不定义(INT16U X,INT16U Y)就会出问题,不对。定义了就是固定的160,何解!!当不定义(INT16U X,INT16U Y)发现那结构体计数值SumTemp.Cnt【i】就是不对,是个乱的,一会大一会小,而那个nCount计数却是对的160,按道理PWM中断周期是固定的16K,所以10ms应该是160个值。这两个变量是没有任何地方使用的,但是是个全局的。我试着随意的定义两个变量((INT16U A,INT16U B)代替原来的(INT16U X,INT16U Y)变量名,也是可以的,就是说必须要有两个那样的变量存在,即使是任意的定义。

nCount ++和那个结构体SumTemp.Cnt【i】++是同步的,两个语句挨着的,清零也是同步挨着的,为什么nCount是对的,结构体SumTemp.Cnt【i】是错的??

user4184198:

回复 jianxing ding:

中断函数里都执行了一些什么操作,很多异常问题都是由于在中断函数里调用了某些函数导致的

赞(0)
未经允许不得转载:TI中文支持网 » 28335灵异事件,2个不用变量的定义影响程序执行结果!!!!?高手请进
分享到: 更多 (0)