大家好!
我在使用CCS5.5 开发环境调试C6455的程序,为了统计一个函数void foo();的执行时间,将断点设置在该函数所在行,然后再【run】/【clocl】/【enable】工具中打开了clock,并设置为统计CPU 执行周期数,从而确定该函数void foo()的执行时间。结果遇到了如下问题:
有时板卡上电后,链接仿真器,单步执行即step over统计该函数的执行周期数,结果该函数所需周期数目特别大,如下图:
从图可以看出,执行一次foo()函数的时间为15,004,187个周期。说明该函数肯定执行不正常了(正常情况下周期数不会大于6,000,000)。多次执行该函数重新统计用时依然是这么多个周期。
于是硬件复位DSP,仿真器保持连接状态,重新reload program后,再次统计该函数的执行时间,则周期数缩短为5,000,000左右,从此以后永远是5,000,000左右,不会再出现超时现象。
该超时现象是偶发,大概10次上电中有2次会碰到这种超时现象,每次发现超时后,复位DSP都会解决。请问有可能是什么原因导致同一个函数的执行周期数发生如此巨大的变化?
我自己做了几个实验,依然没找到头绪:
实验1)将代码与二次bootloader烧写到flashh中,并设置为8bit EMIF启动,依然偶尔会出现超时现象(通过其它方法观察到的);复位后则程序回复正常;
实验2)连接仿真器,一旦该次上电出现超时现象,则查看了DEVSTAT寄存器,发现与正常时的值一致,boot mode与硬件板卡的配置也一致;观察PC指针,其值始终在0x800000空间中运行,并未指向falsh所在的0xb0000000空间中,因此并不是在flash中直接运行程序导致的。
请大家帮忙分析一下,可能的问题原因在哪里?小弟在此谢过了。。。。。。。

