diff options
| author | Meco Man <[email protected]> | 2021-02-12 20:36:17 +0800 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2021-02-12 20:36:17 +0800 |
| commit | 598aa86f750bdc96ffb427fc8507a426a99fc63f (patch) | |
| tree | 4f1e75f0587c23761a5d0dbae2956b636a13aae6 /components/libc/compilers/common | |
| parent | 40bb949cd552ea4f71b138712680f8e08246f9d8 (diff) | |
move clock_time_to_tick to time.c
Diffstat (limited to 'components/libc/compilers/common')
| -rw-r--r-- | components/libc/compilers/common/sys/time.h | 1 | ||||
| -rw-r--r-- | components/libc/compilers/common/time.c | 34 |
2 files changed, 35 insertions, 0 deletions
diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index df5b4fae93..e4d60d2d11 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -86,6 +86,7 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz); int clock_getres (clockid_t clockid, struct timespec *res); int clock_gettime (clockid_t clockid, struct timespec *tp); int clock_settime (clockid_t clockid, const struct timespec *tp); +int clock_time_to_tick(const struct timespec *time); #endif /* RT_USING_POSIX */ #ifdef __cplusplus diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index c73bb0f26c..c2fbd6f333 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -512,4 +512,38 @@ int clock_settime(clockid_t clockid, const struct timespec *tp) return 0; } RTM_EXPORT(clock_settime); + +int clock_time_to_tick(const struct timespec *time) +{ + int tick; + int nsecond, second; + struct timespec tp; + + RT_ASSERT(time != RT_NULL); + + tick = RT_WAITING_FOREVER; + if (time != NULL) + { + /* get current tp */ + clock_gettime(CLOCK_REALTIME, &tp); + + if ((time->tv_nsec - tp.tv_nsec) < 0) + { + nsecond = NANOSECOND_PER_SECOND - (tp.tv_nsec - time->tv_nsec); + second = time->tv_sec - tp.tv_sec - 1; + } + else + { + nsecond = time->tv_nsec - tp.tv_nsec; + second = time->tv_sec - tp.tv_sec; + } + + tick = second * RT_TICK_PER_SECOND + nsecond * RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND; + if (tick < 0) tick = 0; + } + + return tick; +} +RTM_EXPORT(clock_time_to_tick); + #endif /* RT_USING_POSIX */ |
