我用TSCL测程序运行的时间,大体流程如下:
TSCL = 0;
TSCH = 0;
timeStart = _itoll(TSCH,TSCL);
for(i = 0;i<100000000;i++);
timeEnd = _itoll(TSCH,TSCL);
period= timeEnd – timeStart;
得到 period= 900,000,000,实际运行时间约为10秒,有两个问题:
①我的时钟频率为1GHZ,那么这个时间不是应该约为0.9秒吗?是不是跟仿真器有关啊?我用的XDS100仿真器;
②将这个空循环换为我的一段程序以后,period= 30,000,000左右,可是这段程序实际运行的时间却为40秒以上,请问这和什么因素有关呢?
希望能够得到解答,非常感谢!
Jim Liao:
想问你的TSCL和TSCH是像这样声明:volatile Uint32 TSCL的吗?还有就是你这个实际运行时间是怎么估算出来的呢?
Andy Yin1:
在1GHz下对应时间为0.9s没错,程序执行的快慢跟仿真器没有关系,仿真器只是负责将代码下载到DSP上。你的10s是怎么得到的,还有确认的你的主频配置是否正确,很有可能是主频配置错误。
ziye:
回复 Jim Liao:
感谢您的关注,这两个变量我都没有声明,是直接用的。实际运行时间是自己看表估计的,大约是10秒钟程序执行完。设置断点看也是从timeStart到timeEnd大约耗时10s,我感觉这个数量级不对啊。
ziye:
回复 Andy Yin1:
感谢Andy的关注。这个10s是我自己看表估计的,程序大约执行了10s。我用ROV和TimestampC66XLocal_getFreq(&freq)函数看主频都是1GHz啊。请问在主频不变的情况下,这个时钟周期数和实际执行时间并不是正比的吗?我用其他方法如Timestamp_get64()等测程序执行的周期数,结果一致。
ziye:
回复 ziye:
第一个问题解决了,是由于我进行了system reset,主频将为了100MHz,但是第二个问题还在。
lucky2:
回复 ziye:
您好
请问下,点击system reset会把DSP主频降下来吗?