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

TMS320F28335: TMS320F28335内存变量被篡改

Part Number:TMS320F28335Other Parts Discussed in Thread:C2000WARE

大神们:

         我用28335芯片,在使用到某一个变量x时(这个这个变量内存地址0xC068),给定这个变量x=100,这个变量经过if(x>31100)时,这个变量x变成一个很大的值(比31100还大)。改变这个变量地址0xC068-0xC06F,这段地址都不行,只有到0xC070时才恢复正常。

请Ti工程师和大神们赐教,这是为什么,太诡异了。

Susan Yang:

user4129436 说:在使用到某一个变量x时(这个这个变量内存地址0xC068),给定这个变量x=100,这个变量经过if(x>31100)时,这个变量x变成一个很大的值(比31100还大)

会变成什么值呢?若是可以的话,能否给出相关代码?

user4129436 说:改变这个变量地址0xC068-0xC06F,这段地址都不行,只有到0xC070时才恢复正常。

您是如何定义变量的?

,

user4129436:

您好:我是定义的全局变量,Uint16 x=0;在进主循环前为变量赋值(x=100;while(1){}),在定时器中断中执行if(x>31100){}语句,x的值就变得很大了,超过了31100了

,

Susan Yang:

若是可以的话,能否给出相关代码?另外我会在明天进办公室测试

,

user4129436:

您好,这个是公司的项目,是加密的。这个问题也是不经意发现的,因为我们定义了好多全局变量,正巧赶上那个变量经过一个if比较语句,触发了一个故障,经过排查,感觉是这个内存的问题。目前指出的0xC068-0xC06F内存区间是我们测试出最大一个范围,有的芯片范围会小一些,目前我们测试了5、6个芯片都是这样的,所以感觉很奇怪。

我的测试代码特别简单:

Uint16 x=0;

void main()

{

     …

     x=101;

     while(1)

    {} 

}

__interrupt void TINT0_isr(void)

{

        test1=x;

       if(x>31100)

      {

        test2=x;

      }

}

变量x地址在0xC068-0xC06F范围内,if语句前test1的值是对的,经过if后test2变得很大,说明if条件为真。

注意:我们仿真的时候不会出现,只有芯片自己运行的时候会出,我们是有串口监测的这几个数据。

麻烦您了,帮我测试一下,谢谢!

,

Susan Yang:

好的,我会在明天测试后给您回复

,

user4129436:

您有什么问题咱们在沟通

,

Susan Yang:

user4129436 说:注意:我们仿真的时候不会出现,只有芯片自己运行的时候会出,我们是有串口监测的这几个数据。

仿真和芯片自己运行时程序均是在FLASH还是RAM运行?

,

user4129436:

我试过了,把这段比较程序考到RAM里运行,依然会出现。

,

Susan Yang:

我将您的代码写入例程内,debug模式下运行结果一直是

请问您的X值是在何处处理的,最终会增加x的值到31100?

,

user4129436:

您好,我在仿真时也不出现异常,断掉仿真器时,用串口检测,发现test1的值会变得很大

,

Susan Yang:

user4129436 说:我在仿真时也不出现异常

数值也是不会有变化?

,

user4129436:

是的,数据是正确的,之后我们把其他程序基本都删除了,只留串口程序,上传数据依然不对。

,

Susan Yang:

我的意思是在程序内没有看到可以改变x值的地方,一直是保持相同的值。

您在程序设计中是这样的?然后在这种情况下使用串口后数据不对?

根据您的描述,是否有可能是串口传输部分的程序问题?您可以测试下简单的串口程序

如 C2000Ware_3_04_00_00\device_support\f2833x\examples\sci_autobaud

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: TMS320F28335内存变量被篡改
分享到: 更多 (0)

© 2026 TI中文支持网   网站地图 鲁ICP备2022002796号-1