From 291fe36139788cf31bd5c6cdb2ac3919dfa0b0cb Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 01:30:41 +0800 Subject: [pthread][libc] move 'clock_time' to libc --- components/libc/compilers/common/sys/time.h | 33 ++++++ components/libc/compilers/common/time.c | 163 +++++++++++++++++++++++++++- 2 files changed, 195 insertions(+), 1 deletion(-) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index 599b8b5262..34ca9427b9 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -10,6 +10,7 @@ #ifndef _SYS_TIME_H_ #define _SYS_TIME_H_ +#include #include #ifdef __cplusplus @@ -53,6 +54,38 @@ time_t timegm(struct tm * const t); int gettimeofday(struct timeval *tv, struct timezone *tz); int settimeofday(const struct timeval *tv, const struct timezone *tz); +#ifdef RT_USING_PTHREADS +/* posix clock and timer */ +#define MILLISECOND_PER_SECOND 1000UL +#define MICROSECOND_PER_SECOND 1000000UL +#define NANOSECOND_PER_SECOND 1000000000UL + +#define MILLISECOND_PER_TICK (MILLISECOND_PER_SECOND / RT_TICK_PER_SECOND) +#define MICROSECOND_PER_TICK (MICROSECOND_PER_SECOND / RT_TICK_PER_SECOND) +#define NANOSECOND_PER_TICK (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND) + +#ifndef CLOCK_REALTIME +#define CLOCK_REALTIME 1 +#endif + +#define CLOCK_CPUTIME_ID 2 + +#ifndef CLOCK_PROCESS_CPUTIME_ID +#define CLOCK_PROCESS_CPUTIME_ID CLOCK_CPUTIME_ID +#endif +#ifndef CLOCK_THREAD_CPUTIME_ID +#define CLOCK_THREAD_CPUTIME_ID CLOCK_CPUTIME_ID +#endif + +#ifndef CLOCK_MONOTONIC +#define CLOCK_MONOTONIC 4 +#endif + +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); +#endif /*RT_USING_PTHREADS*/ + #ifdef __cplusplus } #endif diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index a980f742fb..d7048acc4a 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -14,6 +14,9 @@ * 2021-02-11 Meco Man fix bug #3183 - align days[] and months[] to 4 bytes * add difftime() * 2021-02-12 Meco Man add errno + * 2012-12-08 Bernard fix the issue of _timevalue.tv_usec initialization, + * which found by Rob + * 2021-02-12 Meco Man move all of the functions located in to this file */ #include @@ -26,7 +29,7 @@ #define SPD 24*60*60 /* days per month -- nonleap! */ -const short __spm[13] = +static const short __spm[13] = { 0, (31), @@ -97,12 +100,14 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r) r->tm_isdst = 0; return r; } +RTM_EXPORT(gmtime_r); struct tm* gmtime(const time_t* t) { static struct tm tmp; return gmtime_r(t, &tmp); } +RTM_EXPORT(gmtime); /*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) @@ -114,18 +119,21 @@ struct tm* localtime_r(const time_t* t, struct tm* r) local_tz = *t + utc_plus * 3600; return gmtime_r(&local_tz, r); } +RTM_EXPORT(localtime_r); struct tm* localtime(const time_t* t) { static struct tm tmp; return localtime_r(t, &tmp); } +RTM_EXPORT(localtime); /* TODO: timezone */ time_t mktime(struct tm * const t) { return timegm(t); } +RTM_EXPORT(mktime); char* asctime_r(const struct tm *t, char *buf) { @@ -147,28 +155,33 @@ char* asctime_r(const struct tm *t, char *buf) buf[24] = '\n'; return buf; } +RTM_EXPORT(asctime_r); char* asctime(const struct tm *timeptr) { static char buf[25]; return asctime_r(timeptr, buf); } +RTM_EXPORT(asctime); char *ctime_r (const time_t * tim_p, char * result) { struct tm tm; return asctime_r (localtime_r (tim_p, &tm), result); } +RTM_EXPORT(ctime_r); char* ctime(const time_t *tim_p) { return asctime (localtime (tim_p)); } +RTM_EXPORT(ctime); double difftime (time_t tim1, time_t tim2) { return (double)(tim1 - tim2); } +RTM_EXPORT(difftime); /** * Returns the current time. @@ -216,11 +229,13 @@ RT_WEAK time_t time(time_t *t) return time_now; } +RTM_EXPORT(time); RT_WEAK clock_t clock(void) { return rt_tick_get(); } +RTM_EXPORT(clock); int stime(const time_t *t) { @@ -246,6 +261,7 @@ int stime(const time_t *t) return -1; #endif /* RT_USING_RTC */ } +RTM_EXPORT(stime); time_t timegm(struct tm * const t) { @@ -320,6 +336,7 @@ time_t timegm(struct tm * const t) i = 60; return ((day + t->tm_hour) * i + t->tm_min) * i + t->tm_sec; } +RTM_EXPORT(timegm); /* TODO: timezone */ int gettimeofday(struct timeval *tv, struct timezone *tz) @@ -338,6 +355,7 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) return -1; } } +RTM_EXPORT(gettimeofday); /* TODO: timezone */ int settimeofday(const struct timeval *tv, const struct timezone *tz) @@ -352,3 +370,146 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz) return -1; } } +RTM_EXPORT(settimeofday); + +#ifdef RT_USING_PTHREADS +static struct timeval _timevalue; +static int clock_time_system_init() +{ + time_t time; + rt_tick_t tick; + rt_device_t device; + + time = 0; + device = rt_device_find("rtc"); + if (device != RT_NULL) + { + /* get realtime seconds */ + rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time); + } + + /* get tick */ + tick = rt_tick_get(); + + _timevalue.tv_usec = (tick%RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK; + _timevalue.tv_sec = time - tick/RT_TICK_PER_SECOND - 1; + + return 0; +} +INIT_COMPONENT_EXPORT(clock_time_system_init); + +int clock_getres(clockid_t clockid, struct timespec *res) +{ + int ret = 0; + + if (res == RT_NULL) + { + rt_set_errno(EINVAL); + return -1; + } + + switch (clockid) + { + case CLOCK_REALTIME: + res->tv_sec = 0; + res->tv_nsec = NANOSECOND_PER_SECOND/RT_TICK_PER_SECOND; + break; + +#ifdef RT_USING_CPUTIME + case CLOCK_CPUTIME_ID: + res->tv_sec = 0; + res->tv_nsec = clock_cpu_getres(); + break; +#endif + + default: + ret = -1; + rt_set_errno(EINVAL); + break; + } + + return ret; +} +RTM_EXPORT(clock_getres); + +int clock_gettime(clockid_t clockid, struct timespec *tp) +{ + int ret = 0; + + if (tp == RT_NULL) + { + rt_set_errno(EINVAL); + return -1; + } + + switch (clockid) + { + case CLOCK_REALTIME: + { + /* get tick */ + int tick = rt_tick_get(); + + tp->tv_sec = _timevalue.tv_sec + tick / RT_TICK_PER_SECOND; + tp->tv_nsec = (_timevalue.tv_usec + (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK) * 1000; + } + break; + +#ifdef RT_USING_CPUTIME + case CLOCK_CPUTIME_ID: + { + float unit = 0; + long long cpu_tick; + + unit = clock_cpu_getres(); + cpu_tick = clock_cpu_gettime(); + + tp->tv_sec = ((int)(cpu_tick * unit)) / NANOSECOND_PER_SECOND; + tp->tv_nsec = ((int)(cpu_tick * unit)) % NANOSECOND_PER_SECOND; + } + break; +#endif + default: + rt_set_errno(EINVAL); + ret = -1; + } + + return ret; +} +RTM_EXPORT(clock_gettime); + +int clock_settime(clockid_t clockid, const struct timespec *tp) +{ + int second; + rt_tick_t tick; + rt_device_t device; + + if ((clockid != CLOCK_REALTIME) || (tp == RT_NULL)) + { + rt_set_errno(EINVAL); + + return -1; + } + + /* get second */ + second = tp->tv_sec; + /* get tick */ + tick = rt_tick_get(); + + /* update timevalue */ + _timevalue.tv_usec = MICROSECOND_PER_SECOND - (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK; + _timevalue.tv_sec = second - tick/RT_TICK_PER_SECOND - 1; + + /* update for RTC device */ + device = rt_device_find("rtc"); + if (device != RT_NULL) + { + /* set realtime seconds */ + rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, &second); + } + else + return -1; + + return 0; +} +RTM_EXPORT(clock_settime); +#endif /*RT_USING_PTHREADS*/ -- cgit v1.3.1 From 107c27f38d1a8683db5a2af55fb6a4bc54533005 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 01:40:45 +0800 Subject: update --- components/libc/compilers/common/time.c | 16 ---------------- 1 file changed, 16 deletions(-) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index d7048acc4a..8aaf8893dc 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -100,14 +100,12 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r) r->tm_isdst = 0; return r; } -RTM_EXPORT(gmtime_r); struct tm* gmtime(const time_t* t) { static struct tm tmp; return gmtime_r(t, &tmp); } -RTM_EXPORT(gmtime); /*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) @@ -119,21 +117,18 @@ struct tm* localtime_r(const time_t* t, struct tm* r) local_tz = *t + utc_plus * 3600; return gmtime_r(&local_tz, r); } -RTM_EXPORT(localtime_r); struct tm* localtime(const time_t* t) { static struct tm tmp; return localtime_r(t, &tmp); } -RTM_EXPORT(localtime); /* TODO: timezone */ time_t mktime(struct tm * const t) { return timegm(t); } -RTM_EXPORT(mktime); char* asctime_r(const struct tm *t, char *buf) { @@ -155,33 +150,28 @@ char* asctime_r(const struct tm *t, char *buf) buf[24] = '\n'; return buf; } -RTM_EXPORT(asctime_r); char* asctime(const struct tm *timeptr) { static char buf[25]; return asctime_r(timeptr, buf); } -RTM_EXPORT(asctime); char *ctime_r (const time_t * tim_p, char * result) { struct tm tm; return asctime_r (localtime_r (tim_p, &tm), result); } -RTM_EXPORT(ctime_r); char* ctime(const time_t *tim_p) { return asctime (localtime (tim_p)); } -RTM_EXPORT(ctime); double difftime (time_t tim1, time_t tim2) { return (double)(tim1 - tim2); } -RTM_EXPORT(difftime); /** * Returns the current time. @@ -229,13 +219,11 @@ RT_WEAK time_t time(time_t *t) return time_now; } -RTM_EXPORT(time); RT_WEAK clock_t clock(void) { return rt_tick_get(); } -RTM_EXPORT(clock); int stime(const time_t *t) { @@ -261,7 +249,6 @@ int stime(const time_t *t) return -1; #endif /* RT_USING_RTC */ } -RTM_EXPORT(stime); time_t timegm(struct tm * const t) { @@ -336,7 +323,6 @@ time_t timegm(struct tm * const t) i = 60; return ((day + t->tm_hour) * i + t->tm_min) * i + t->tm_sec; } -RTM_EXPORT(timegm); /* TODO: timezone */ int gettimeofday(struct timeval *tv, struct timezone *tz) @@ -355,7 +341,6 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) return -1; } } -RTM_EXPORT(gettimeofday); /* TODO: timezone */ int settimeofday(const struct timeval *tv, const struct timezone *tz) @@ -370,7 +355,6 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz) return -1; } } -RTM_EXPORT(settimeofday); #ifdef RT_USING_PTHREADS static struct timeval _timevalue; -- cgit v1.3.1 From 417f8b9bed25d12a4b61150138125e8bd9c38fc4 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 01:46:16 +0800 Subject: update --- components/libc/compilers/common/time.c | 16 ++++++++++++++++ components/libc/compilers/newlib/libc_syms.c | 4 ---- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 8aaf8893dc..d7048acc4a 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -100,12 +100,14 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r) r->tm_isdst = 0; return r; } +RTM_EXPORT(gmtime_r); struct tm* gmtime(const time_t* t) { static struct tm tmp; return gmtime_r(t, &tmp); } +RTM_EXPORT(gmtime); /*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) @@ -117,18 +119,21 @@ struct tm* localtime_r(const time_t* t, struct tm* r) local_tz = *t + utc_plus * 3600; return gmtime_r(&local_tz, r); } +RTM_EXPORT(localtime_r); struct tm* localtime(const time_t* t) { static struct tm tmp; return localtime_r(t, &tmp); } +RTM_EXPORT(localtime); /* TODO: timezone */ time_t mktime(struct tm * const t) { return timegm(t); } +RTM_EXPORT(mktime); char* asctime_r(const struct tm *t, char *buf) { @@ -150,28 +155,33 @@ char* asctime_r(const struct tm *t, char *buf) buf[24] = '\n'; return buf; } +RTM_EXPORT(asctime_r); char* asctime(const struct tm *timeptr) { static char buf[25]; return asctime_r(timeptr, buf); } +RTM_EXPORT(asctime); char *ctime_r (const time_t * tim_p, char * result) { struct tm tm; return asctime_r (localtime_r (tim_p, &tm), result); } +RTM_EXPORT(ctime_r); char* ctime(const time_t *tim_p) { return asctime (localtime (tim_p)); } +RTM_EXPORT(ctime); double difftime (time_t tim1, time_t tim2) { return (double)(tim1 - tim2); } +RTM_EXPORT(difftime); /** * Returns the current time. @@ -219,11 +229,13 @@ RT_WEAK time_t time(time_t *t) return time_now; } +RTM_EXPORT(time); RT_WEAK clock_t clock(void) { return rt_tick_get(); } +RTM_EXPORT(clock); int stime(const time_t *t) { @@ -249,6 +261,7 @@ int stime(const time_t *t) return -1; #endif /* RT_USING_RTC */ } +RTM_EXPORT(stime); time_t timegm(struct tm * const t) { @@ -323,6 +336,7 @@ time_t timegm(struct tm * const t) i = 60; return ((day + t->tm_hour) * i + t->tm_min) * i + t->tm_sec; } +RTM_EXPORT(timegm); /* TODO: timezone */ int gettimeofday(struct timeval *tv, struct timezone *tz) @@ -341,6 +355,7 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) return -1; } } +RTM_EXPORT(gettimeofday); /* TODO: timezone */ int settimeofday(const struct timeval *tv, const struct timezone *tz) @@ -355,6 +370,7 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz) return -1; } } +RTM_EXPORT(settimeofday); #ifdef RT_USING_PTHREADS static struct timeval _timevalue; diff --git a/components/libc/compilers/newlib/libc_syms.c b/components/libc/compilers/newlib/libc_syms.c index b150c10fd6..4b0ee355f0 100644 --- a/components/libc/compilers/newlib/libc_syms.c +++ b/components/libc/compilers/newlib/libc_syms.c @@ -39,10 +39,6 @@ RTM_EXPORT(snprintf); RTM_EXPORT(fwrite); -#include -RTM_EXPORT(localtime); -RTM_EXPORT(time); - #include RTM_EXPORT(longjmp); RTM_EXPORT(setjmp); -- cgit v1.3.1 From 789f1a875346d47edc7b11dd423ce891acbae3a9 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 02:12:33 +0800 Subject: move all functions located in to this file --- components/libc/compilers/common/unistd.c | 23 ++++++++++++++++++++++- components/libc/pthreads/posix_sleep.c | 30 ------------------------------ 2 files changed, 22 insertions(+), 31 deletions(-) delete mode 100644 components/libc/pthreads/posix_sleep.c (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/unistd.c b/components/libc/compilers/common/unistd.c index df970b2b59..b7471ee029 100644 --- a/components/libc/compilers/common/unistd.c +++ b/components/libc/compilers/common/unistd.c @@ -5,10 +5,13 @@ * * Change Logs: * Date Author Notes - * 2020-09-01 Meco Man First Version + * 2020-09-01 Meco Man first Version + * 2021-02-12 Meco Man move all functions located in to this file */ #include +#include +#include #ifdef RT_USING_POSIX_TERMIOS #include "termios.h" @@ -24,3 +27,21 @@ char *ttyname(int fd) { return "/dev/tty0"; /*TODO: need to add more specific*/ } + +unsigned int sleep(unsigned int seconds) +{ + rt_tick_t delta_tick; + + delta_tick = rt_tick_get(); + rt_thread_delay(seconds * RT_TICK_PER_SECOND); + delta_tick = rt_tick_get() - delta_tick; + + return seconds - delta_tick/RT_TICK_PER_SECOND; +} + +int usleep(useconds_t usec) +{ + rt_thread_mdelay(usec / 1000u); + rt_hw_us_delay(usec % 1000u); + return 0; +} diff --git a/components/libc/pthreads/posix_sleep.c b/components/libc/pthreads/posix_sleep.c deleted file mode 100644 index e50bda7d4a..0000000000 --- a/components/libc/pthreads/posix_sleep.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2006-2018, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2020-12-16 Meco Man add usleep - */ -#include -#include -#include - -unsigned int sleep(unsigned int seconds) -{ - rt_tick_t delta_tick; - - delta_tick = rt_tick_get(); - rt_thread_delay(seconds * RT_TICK_PER_SECOND); - delta_tick = rt_tick_get() - delta_tick; - - return seconds - delta_tick/RT_TICK_PER_SECOND; -} - -int usleep(useconds_t usec) -{ - rt_thread_mdelay(usec / 1000u); - rt_hw_us_delay(usec % 1000u); - return 0; -} -- cgit v1.3.1 From e3a32e807cf92230a33963834e431c7b2ce1b804 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 02:20:22 +0800 Subject: update --- components/libc/compilers/armlibc/libc_syms.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/armlibc/libc_syms.c b/components/libc/compilers/armlibc/libc_syms.c index 0e1c42d899..a2e8af17f1 100644 --- a/components/libc/compilers/armlibc/libc_syms.c +++ b/components/libc/compilers/armlibc/libc_syms.c @@ -10,8 +10,6 @@ #include #include #include -#include - #include /* some export routines for module */ @@ -35,11 +33,6 @@ RTM_EXPORT(memchr); RTM_EXPORT(toupper); RTM_EXPORT(atoi); -#ifdef RT_USING_RTC -RTM_EXPORT(localtime); -RTM_EXPORT(time); -#endif - /* import the full stdio for printf */ #if defined(RT_USING_MODULE) && defined(__MICROLIB) #error "[RT_USING_LIBC] Please use standard libc but not microlib." -- cgit v1.3.1 From fa8e8ed31fa3b069e50d393888e46065649b3c8d Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 02:21:30 +0800 Subject: add RTM_EXPORT label for unistd.c --- components/libc/compilers/common/unistd.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/unistd.c b/components/libc/compilers/common/unistd.c index b7471ee029..48e6beee4e 100644 --- a/components/libc/compilers/common/unistd.c +++ b/components/libc/compilers/common/unistd.c @@ -21,12 +21,14 @@ int isatty(int fd) struct termios ts; return(tcgetattr(fd,&ts) != -1);/*true if no error (is a tty)*/ } +RTM_EXPORT(isatty); #endif char *ttyname(int fd) { return "/dev/tty0"; /*TODO: need to add more specific*/ } +RTM_EXPORT(ttyname); unsigned int sleep(unsigned int seconds) { @@ -38,6 +40,7 @@ unsigned int sleep(unsigned int seconds) return seconds - delta_tick/RT_TICK_PER_SECOND; } +RTM_EXPORT(sleep); int usleep(useconds_t usec) { @@ -45,3 +48,4 @@ int usleep(useconds_t usec) rt_hw_us_delay(usec % 1000u); return 0; } +RTM_EXPORT(usleep); -- cgit v1.3.1 From e33e7822d7a7aaa027e511f59c5533664a02f31e Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 02:58:44 +0800 Subject: add --- components/libc/compilers/common/sys/time.h | 1 + 1 file changed, 1 insertion(+) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index 34ca9427b9..4c522a524a 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -55,6 +55,7 @@ int gettimeofday(struct timeval *tv, struct timezone *tz); int settimeofday(const struct timeval *tv, const struct timezone *tz); #ifdef RT_USING_PTHREADS +#include /* posix clock and timer */ #define MILLISECOND_PER_SECOND 1000UL #define MICROSECOND_PER_SECOND 1000000UL -- cgit v1.3.1 From ac500f35d6a4517243e5a290e8a97b3a6c6bf3c1 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 12:08:14 +0800 Subject: change RT_USING_PTHREADS to RT_USING_POSIX --- components/libc/compilers/common/sys/time.h | 4 ++-- components/libc/compilers/common/time.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index 4c522a524a..6e74b901e5 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -54,7 +54,7 @@ time_t timegm(struct tm * const t); int gettimeofday(struct timeval *tv, struct timezone *tz); int settimeofday(const struct timeval *tv, const struct timezone *tz); -#ifdef RT_USING_PTHREADS +#ifdef RT_USING_POSIX #include /* posix clock and timer */ #define MILLISECOND_PER_SECOND 1000UL @@ -85,7 +85,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); -#endif /*RT_USING_PTHREADS*/ +#endif /* RT_USING_POSIX */ #ifdef __cplusplus } diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index d7048acc4a..c73bb0f26c 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -372,7 +372,7 @@ int settimeofday(const struct timeval *tv, const struct timezone *tz) } RTM_EXPORT(settimeofday); -#ifdef RT_USING_PTHREADS +#ifdef RT_USING_POSIX static struct timeval _timevalue; static int clock_time_system_init() { @@ -512,4 +512,4 @@ int clock_settime(clockid_t clockid, const struct timespec *tp) return 0; } RTM_EXPORT(clock_settime); -#endif /*RT_USING_PTHREADS*/ +#endif /* RT_USING_POSIX */ -- cgit v1.3.1 From 5fc59f88c1b4b145a6deeea5cd0af459e56fc4b6 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 12:14:45 +0800 Subject: update --- components/libc/compilers/common/sys/time.h | 1 + 1 file changed, 1 insertion(+) (limited to 'components/libc/compilers') diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index 6e74b901e5..df5b4fae93 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -6,6 +6,7 @@ * Change Logs: * Date Author Notes * 2020-09-07 Meco Man combine gcc armcc iccarm + * 2021-02-12 Meco Man move all definitions located in to this file */ #ifndef _SYS_TIME_H_ #define _SYS_TIME_H_ -- cgit v1.3.1 From 598aa86f750bdc96ffb427fc8507a426a99fc63f Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 12 Feb 2021 20:36:17 +0800 Subject: move clock_time_to_tick to time.c --- components/libc/compilers/common/sys/time.h | 1 + components/libc/compilers/common/time.c | 34 +++++++++++++++++++++++++++++ components/libc/pthreads/pthread.c | 33 ---------------------------- components/libc/pthreads/pthread_internal.h | 3 +-- 4 files changed, 36 insertions(+), 35 deletions(-) (limited to 'components/libc/compilers') 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 */ diff --git a/components/libc/pthreads/pthread.c b/components/libc/pthreads/pthread.c index cec76a9691..7430510bf2 100644 --- a/components/libc/pthreads/pthread.c +++ b/components/libc/pthreads/pthread.c @@ -688,36 +688,3 @@ int pthread_cancel(pthread_t thread) return 0; } RTM_EXPORT(pthread_cancel); - -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); diff --git a/components/libc/pthreads/pthread_internal.h b/components/libc/pthreads/pthread_internal.h index a6706ca091..240741e21a 100644 --- a/components/libc/pthreads/pthread_internal.h +++ b/components/libc/pthreads/pthread_internal.h @@ -13,6 +13,7 @@ #include #include +#include struct _pthread_cleanup { @@ -62,8 +63,6 @@ typedef struct _pthread_data _pthread_data_t; _pthread_data_t *_pthread_get_data(pthread_t thread); -int clock_time_to_tick(const struct timespec *time); - void posix_mq_system_init(void); void posix_sem_system_init(void); void pthread_key_system_init(void); -- cgit v1.3.1