—————————————————————————————————
以下是clock的代码
#include <stdio.h>
#include <time.h>
void main(void)
{
int i;
clock_t start, end, sum = 0;
printf("Clock test start!\n");
start = clock();
for(i=0;i<100000000;i++)
{
;
}
end = clock();
sum += end – start;
printf("Total time : %.9f secs .\n",(float)sum/CLOCKS_PER_SEC);
}
—————————————————————————————————
运行结果
[C66xx_0] Clock test start!
[C66xx_0] Total time : 4.500000477 secs .
用秒表计时,约为9秒左右。
—————————————————————————————————
time.h里的定义 :
#define CLOCKS_PER_SEC 200000000 /* 200 MHz */
—————————————————————————————————
问题:
1、请问clock()是通过什么机制来计时的?
2、我上面的程序是否正确,为什么运行结果与实际相差4秒左右呢?
Yu Liu7:
楼主的代码没有问题。记得是通过主机端进行计时的不是很准确。建议使用TSCL。参见下面的帖子。
www.deyisupport.com/…/1184.aspx
另外这里可以找到更多的信息,上面的帖子在FAQ中就有。
www.deyisupport.com/…/955.aspx
bb qiuhua:
回复 Yu Liu7:
Yu Liu你好
我测试了一下clock和TSCL计时的cycle基本是一样的,我猜测clock是通过读取TSCL来计时的,不知道是否是这样?
另外,一个困惑的地方是,time.h里的定义 :
#define CLOCKS_PER_SEC 200000000 /* 200 MHz */
为何是200MHz呢,如果这里是100MHz的话,得到的结果还是比较准确的。
Andy Yin1:
回复 bb qiuhua:
您好,
请问你的#define CLOCKS_PER_SEC 200000000 /* 200 MHz */是怎么定义的?应该根据你的实际CPU 工作频率来计算当前的实际周期,需要首先清楚测试所配置的PLL。
bb qiuhua:
回复 Andy Yin1:
Andy Yin
您好,我的CPU的6678评估板的工作频率是100MHz,与GET文件里定义是一样的,所以我觉得这里是不是应该#define CLOCKS_PER_SEC 100000000 /*100MHz*/呢?
这个time.h是D:\Program Files\Texas Instruments\ccsv5\tools\compiler\c6000\include下的,没有做任何改动。
所以想问下clock()的机制是什么,如果是通过读TSCL寄存器来计时的话,那么200MHz就是不正确的(对我的实际情况来说)。