From f4a24c811a668a072b6688bcdfcd927529977b26 Mon Sep 17 00:00:00 2001 From: bernie Date: Thu, 3 Jun 2004 09:01:06 +0000 Subject: [PATCH] Import into DevLib. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@12 38d2e660-2303-0410-9eaa-f027e97ec537 --- os/hptime.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ os/hptime.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100755 os/hptime.c create mode 100755 os/hptime.h diff --git a/os/hptime.c b/os/hptime.c new file mode 100755 index 00000000..07b0a30f --- /dev/null +++ b/os/hptime.c @@ -0,0 +1,60 @@ +/*! + * \file + * + * + * \brief Portable abstraction for high-resolution time handling (implementation) + * + * \version $Id$ + * \author Bernardo Innocenti + */ + +/* + * $Log$ + * Revision 1.1 2004/06/03 09:01:06 bernie + * Import into DevLib. + * + */ + +#include "hptime.h" + +#if defined(_WIN32) + +#include + +hptime_t hptime_get(void) +{ + FILETIME ft; + + /* + * La precisione dei FileTime sarebbe 100ns, ma il + * valore viene ottenuto convertendo una struttura + * SYSTEMTIME, che ha precisione di 1ms. Il numero + * che otteniamo e' quindi sempre un multiplo di + * 100000. + */ + GetSystemTimeAsFileTime(&ft); + + /* Copy the upper/lower into a quadword. */ + return (((hptime_t)ft.dwHighDateTime) << 32) + (hptime_t)ft.dwLowDateTime; +} + +#elif defined(__unix__) + +#include + +hptime_t hptime_get(void) +{ + struct timeval tv; + + gettimeofday(&tv, 0); + return (hptime_t)tv.tv_sec * HPTIME_TICKS_PER_SECOND + + (hptime_t)tv.tv_usec; +} + +#else /* !__unix__ */ + #error OS dependent support code missing for this OS +#endif /* !__unix__ */ + diff --git a/os/hptime.h b/os/hptime.h new file mode 100755 index 00000000..7b05dbe6 --- /dev/null +++ b/os/hptime.h @@ -0,0 +1,64 @@ +/*! + * \file + * + * + * \brief Portable abstraction for high-resolution time handling (interface) + * + * \version $Id$ + * \author Bernardo Innocenti + */ + +/* + * $Log$ + * Revision 1.1 2004/06/03 09:01:06 bernie + * Import into DevLib. + * + */ +#ifndef HPTIME_H +#define HPTIME_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef _WIN32 + + /* type for time expressed in ms */ + typedef unsigned long mtime_t; + + /* our type for "high precision absolute time" */ + typedef unsigned __int64 hptime_t; + + #define HPTIME_TICKS_PER_SECOND ((hptime_t)10000000I64) + #define HPTIME_TICKS_PER_MILLISEC ((hptime_t)10000I64) + #define HPTIME_TICKS_PER_MICRO ((hptime_t)10I64) + +#elif defined(__unix__) + + /* type for time expressed in ms */ + typedef long mtime_t; + + /* our type for "high precision absolute time" */ + typedef long long hptime_t; + + #define HPTIME_TICKS_PER_SECOND ((hptime_t)1000000LL) + #define HPTIME_TICKS_PER_MILLISEC ((hptime_t)1000LL) + #define HPTIME_TICKS_PER_MICRO ((hptime_t)1LL) + +#else /* !__unix__ */ + #error OS dependent support code missing for this OS +#endif /* !__unix__ */ + +/*! + * Return the current time with the maximum precision made available from the hosting OS + */ +extern hptime_t hptime_get(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* HPTIME_H */ -- 2.25.1