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

为什么程序中偶尔出现赋值语句失效,判断语句出错的情况?

我是DSP新手,目前从事TMS320C6678型号DSP开发相关工作,开发环境是CCS5.0,在调试程序中偶尔出现赋值语句失效(赋值变量是单个核局部变量),和if-else判断语句错误的情况(调试中可以观察变量的值,因此判断if-else语句出错)十分不解,调试了很久也没有解决问题,想请教大家问题出现的原因,希望大家不吝赐教,谢谢!

user4523903:

检查下两个方面,控制变量或者要赋值的变量是否需要进行cache一致性维护,另外一点是堆栈空间是否够用

jinzhou li:

回复 user4523903:

十分感谢您的解答。如果变量只是单个核内的局部变量是否需要考虑cache一致性维护?我已经将栈的空间改大了,暂时未重复发现上述偶然问题,但不能确定是否已经彻底解决。这种问题是否也与编译器的优化有关系?

Allen35065:

回复 jinzhou li:

单个核内局部变量不需要一致性维护,但是否有其它变量来访问?

另外DSP里C代码必须遵循的一些原则还是要考虑的,比如volatile关键字的使用。

Thomas Yang1:

回复 jinzhou li:

如果变量是放在SL2和DDR3中的时候,和其他 核有交互的时候需要软件cache一致性维护的

user4523903:

回复 jinzhou li:

如果优化部分的代码不是规范的C的话,有可能优化的使其功能不完备。

jinzhou li:

回复 Allen35065:

十分感谢您的解答。定义相关变量时有使用Volatile关键字,但并不清楚对于单个变量,Volatile关键字是否也起到了cache一致性维护的作用?哪些变量应该使用Volatile关键字?如果想系统学习使用C语言编写DSP代码的相关原则,有没有参考书或者资料可以推荐的,我是新手,刚刚入门,十分感谢!

jinzhou li:

回复 Thomas Yang1:

十分感谢您的解答。变量是放在L2和DDR中的,L2中放的是单个核的局部变量;DDR中放的是多个核共用的一些标志变量,在定义标志变量时使用了Vilaitile关键字,这样是否可以起到Cache一致性维护的作用?如果对单个变量做Cache一致性维护,是否也只能采用Cache失效和写入的方法,感觉这种方法是作用于较大存储空间的?

jinzhou li:

回复 user4523903:

对于这种可能存在的问题,在CCS编译器里,关闭优化选项就可以避免了吧?

赞(0)
未经允许不得转载:TI中文支持网 » 为什么程序中偶尔出现赋值语句失效,判断语句出错的情况?
分享到: 更多 (0)