blob: a6597e50e8e7f3e510c3213cc5d3cb5aaaf037a7 [file] [log] [blame]
Ollie Lhocbbf1252004-03-17 22:22:08 +00001#include <sys/time.h>
2#include <stdio.h>
3
4// count to a billion. Time it. If it's < 1 sec, count to 10B, etc.
5unsigned long micro = 1;
6
7void myusec_delay(int time)
8{
9 volatile unsigned long i;
Ollie Lhocec28792004-03-17 23:03:37 +000010 for (i = 0; i < time * micro; i++)
Ollie Lhocbbf1252004-03-17 22:22:08 +000011 ;
12}
13
14void myusec_calibrate_delay()
15{
16 int count = 1000;
17 unsigned long timeusec;
18 struct timeval start, end;
19 int ok = 0;
20 void myusec_delay(int time);
21
22 printf("Setting up microsecond timing loop\n");
23 while (!ok) {
24 //fprintf(stderr, "Try %d\n", count);
25 gettimeofday(&start, 0);
26 myusec_delay(count);
27 gettimeofday(&end, 0);
28 timeusec = 1000000 * (end.tv_sec - start.tv_sec ) +
29 (end.tv_usec - start.tv_usec);
30 //fprintf(stderr, "timeusec is %d\n", timeusec);
31 count *= 2;
32 if (timeusec < 1000000/4)
33 continue;
34 ok = 1;
35 }
36
37 // compute one microsecond. That will be count / time
38 micro = count / timeusec;
39
40 fprintf(stderr, "%ldM loops per second\n", (unsigned long)micro);
Ollie Lhocbbf1252004-03-17 22:22:08 +000041}