我是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编译器里,关闭优化选项就可以避免了吧?