summaryrefslogtreecommitdiffstats
path: root/linux/timer-lx.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/timer-lx.c')
-rw-r--r--linux/timer-lx.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/linux/timer-lx.c b/linux/timer-lx.c
new file mode 100644
index 0000000000..0460aaa024
--- /dev/null
+++ b/linux/timer-lx.c
@@ -0,0 +1,49 @@
+// Precise timer routines for LINUX (C) LGB & A'rpi/ASTRAL
+
+#include <unistd.h>
+#include <sys/time.h>
+
+// Returns current time in seconds
+unsigned int GetTimer(){
+ struct timeval tv;
+ struct timezone tz;
+// float s;
+ gettimeofday(&tv,&tz);
+// s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
+ return (tv.tv_sec*1000000+tv.tv_usec);
+}
+
+// Returns current time in microseconds
+int uGetTimer(){
+ struct timeval tv;
+ struct timezone tz;
+ gettimeofday(&tv,&tz);
+ return (int)(tv.tv_usec+1000000*tv.tv_sec);
+}
+
+static unsigned int RelativeTime=0;
+
+// Returns time spent between now and last call in seconds
+float GetRelativeTime(){
+unsigned int t,r;
+ t=GetTimer();
+// t*=16;printf("time=%ud\n",t);
+ r=t-RelativeTime;
+ RelativeTime=t;
+ return (float)r * 0.000001F;
+}
+
+// Initialize timer, must be called at least once at start
+void InitTimer(){
+ GetRelativeTime();
+}
+
+
+#if 0
+void main(){
+ float t=0;
+ InitTimer();
+ while(1){ t+=GetRelativeTime();printf("time= %10.6f\r",t);fflush(stdout); }
+}
+#endif
+