Other Parts Discussed in Thread: C2000WARE
大神们:
我用28335芯片,在使用到某一个变量x时(这个这个变量内存地址0xC068),给定这个变量x=100,这个变量经过if(x>31100)时,这个变量x变成一个很大的值(比31100还大)。改变这个变量地址0xC068-0xC06F,这段地址都不行,只有到0xC070时才恢复正常。
请Ti工程师和大神们赐教,这是为什么,太诡异了。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大神们:
我用28335芯片,在使用到某一个变量x时(这个这个变量内存地址0xC068),给定这个变量x=100,这个变量经过if(x>31100)时,这个变量x变成一个很大的值(比31100还大)。改变这个变量地址0xC068-0xC06F,这段地址都不行,只有到0xC070时才恢复正常。
请Ti工程师和大神们赐教,这是为什么,太诡异了。
在使用到某一个变量x时(这个这个变量内存地址0xC068),给定这个变量x=100,这个变量经过if(x>31100)时,这个变量x变成一个很大的值(比31100还大)
会变成什么值呢?若是可以的话,能否给出相关代码?
改变这个变量地址0xC068-0xC06F,这段地址都不行,只有到0xC070时才恢复正常。
您是如何定义变量的?
您好:我是定义的全局变量,Uint16 x=0;在进主循环前为变量赋值(x=100;while(1){}),在定时器中断中执行if(x>31100){}语句,x的值就变得很大了,超过了31100了
若是可以的话,能否给出相关代码?另外我会在明天进办公室测试
您好,这个是公司的项目,是加密的。这个问题也是不经意发现的,因为我们定义了好多全局变量,正巧赶上那个变量经过一个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条件为真。
注意:我们仿真的时候不会出现,只有芯片自己运行的时候会出,我们是有串口监测的这几个数据。
麻烦您了,帮我测试一下,谢谢!
注意:我们仿真的时候不会出现,只有芯片自己运行的时候会出,我们是有串口监测的这几个数据。
仿真和芯片自己运行时程序均是在FLASH还是RAM运行?
我将您的代码写入例程内,debug模式下运行结果一直是

请问您的X值是在何处处理的,最终会增加x的值到31100?
您好,我在仿真时也不出现异常,断掉仿真器时,用串口检测,发现test1的值会变得很大
我在仿真时也不出现异常
数值也是不会有变化?
是的,数据是正确的,之后我们把其他程序基本都删除了,只留串口程序,上传数据依然不对。
我的意思是在程序内没有看到可以改变x值的地方,一直是保持相同的值。
您在程序设计中是这样的?然后在这种情况下使用串口后数据不对?
根据您的描述,是否有可能是串口传输部分的程序问题?您可以测试下简单的串口程序
如 C2000Ware_3_04_00_00\device_support\f2833x\examples\sci_autobaud