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.
使用DM3730芯片,CCS版本为Version: 4.2.0.10018
在自己定义的某些函数中,定义一些局部变量。在函数执行的时候有时会出现局部变量不能修改的情况(在watch窗口里面查看变量的值,即使单步运行,确定代码已经执行了修改这些变量的操作,这些变量的值仍然不变),暂停核之后再watch窗口里面显示如下
图1
目前我的代码是使用O3优化的,查找TMS320C6000 Optimizing C.C++ Compiler User's Guide(spru187t)可以知道
图2
图3
在图1第三列,正常情况应该显示该局部变量的地址,但是现在显示的是Register A17,从图2、图3来分析,应该是这个变量使用的频率比较高,芯片就把这个变量的值放入寄存器里面,以后每次都从寄存器里面取值或者修改,而watch窗口看的时候内存中的值,所以可能会出现这种值不能修改的情况。另外,我在这个变量前面加上volatile,这个变量的值就能正常修改了(从watch里面看是这样)
以上是我的假设,请各位专家帮忙诊断一下,是不是这个原因?
如果是这个原因,有没有办法通过设置,让核不执行这种寄存器变量的优化操作?
谢谢
建议你看一下CCS的汇编窗口,单步看一下A17寄存器的使用情况,确定一下你的变量在汇编的具体执行期间是否是一直放在A17里面。另外你的执行结果与增加volatile是否一致?