From 850e1aeb5264818c133a32ff457794ff9bd9364d Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Wed, 28 Apr 2021 13:03:43 +0800 Subject: [libc][time] 细微调整time.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 10 +++++----- components/libc/compilers/newlib/SConscript | 9 ++++----- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'components') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 33d8907165..5f4af8e572 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -16,7 +16,7 @@ * 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 - * 2021-03-15 Meco Man fixed bug: https://club.rt-thread.org/ask/question/423650.html + * 2021-03-15 Meco Man fixed a bug of leaking memory in asctime() */ #include @@ -104,7 +104,7 @@ static int get_timeval(struct timeval *tv) } else { - /* LOG_W will cause a recursive printing if ulog timestamp function is turned on */ + /* LOG_W will cause a recursive printing if ulog timestamp function is enabled */ rt_kprintf("Cannot find a RTC device to provide time!\r\n"); return -1; } @@ -112,7 +112,7 @@ static int get_timeval(struct timeval *tv) return (rst < 0) ? -1 : 1; #else - /* LOG_W will cause a recursive printing if ulog timestamp function is turned on */ + /* LOG_W will cause a recursive printing if ulog timestamp function is enabled */ rt_kprintf("Cannot find a RTC device to provide time!\r\n"); return -1; #endif /* RT_USING_RTC */ @@ -273,13 +273,13 @@ 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); + 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)); + return asctime(localtime(tim_p)); } RTM_EXPORT(ctime); diff --git a/components/libc/compilers/newlib/SConscript b/components/libc/compilers/newlib/SConscript index b1ad6e4784..542cdecd40 100644 --- a/components/libc/compilers/newlib/SConscript +++ b/components/libc/compilers/newlib/SConscript @@ -4,17 +4,18 @@ Import('rtconfig') src = [] cwd = GetCurrentDir() group = [] - +LIBS = [] +CPPDEFINES = [] CPPPATH = [cwd] if rtconfig.PLATFORM == 'gcc': if GetDepend('RT_USING_LIBC'): - CPPDEFINES = ['RT_USING_NEWLIB'] + CPPDEFINES += ['RT_USING_NEWLIB'] # link with libc and libm: # libm is a frequently used lib. Newlib is compiled with -ffunction-sections in # recent GCC tool chains. The linker would just link in the functions that have # been referenced. So setting this won't result in bigger text size. - LIBS = ['c', 'm'] + LIBS += ['c', 'm'] src += Glob('*.c') SrcRemove(src, ['minilib.c']) @@ -22,8 +23,6 @@ if rtconfig.PLATFORM == 'gcc': SrcRemove(src, ['libc_syms.c']) else: src += ['minilib.c'] - CPPDEFINES = [] - LIBS = [] group = DefineGroup('libc', src, depend = [], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS) -- cgit v1.3.1 From 82f2d8e53d866598b993054990b73339ef457607 Mon Sep 17 00:00:00 2001 From: Meco Jianting Man <920369182@qq.com> Date: Thu, 29 Apr 2021 00:21:10 +0800 Subject: time.c 删除函数名与括号之间的空格 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 5f4af8e572..72542867d2 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -270,7 +270,7 @@ char* asctime(const struct tm *timeptr) } RTM_EXPORT(asctime); -char *ctime_r (const time_t * tim_p, char * result) +char *ctime_r(const time_t * tim_p, char * result) { struct tm tm; return asctime_r(localtime_r(tim_p, &tm), result); -- cgit v1.3.1 From 1627597fcc89a7d9babc972b5d1d46764ffc7ef8 Mon Sep 17 00:00:00 2001 From: Meco Jianting Man <920369182@qq.com> Date: Thu, 29 Apr 2021 04:42:11 +0800 Subject: remove _TIMESPEC_DEFINED --- components/libc/compilers/common/sys/time.h | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'components') diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index ef1c810608..24da0b6c77 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -18,14 +18,6 @@ extern "C" { #endif -/* - * Skip define timespec for IAR version over 8.10.1 where __VER__ is 8010001. - */ -#if defined ( __ICCARM__ ) && (__VER__ >= 8010001) -#define _TIMESPEC_DEFINED -#endif - - #ifndef _TIMEVAL_DEFINED #define _TIMEVAL_DEFINED /* @@ -40,7 +32,7 @@ struct timeval { #endif #endif /* _TIMEVAL_DEFINED */ -#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) && !defined (__ICCARM__) && !defined (_WIN32) +#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) && !(defined(__ICCARM__) && (__VER__ >= 8010001)) && !defined(_WIN32) struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* and nanoseconds */ -- cgit v1.3.1 From a7a3ca9f0290131842f1a40bb8dca1a9490e4d27 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 05:51:18 +0800 Subject: 增加手动设置时区的功能 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/Kconfig | 8 +++++++- components/libc/compilers/common/time.c | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'components') diff --git a/components/libc/Kconfig b/components/libc/Kconfig index 49b97481d1..8a790c298d 100644 --- a/components/libc/Kconfig +++ b/components/libc/Kconfig @@ -55,8 +55,14 @@ endif if RT_USING_LIBC != y config RT_LIBC_USING_TIME - bool "Enable TIME FUNCTIONS WITHOUT COMPILER'S LIBC" + bool "Enable time functions without compiler's libc" default y endif +config RT_LIBC_FIXED_TIMEZONE + depends on (RT_LIBC_USING_TIME || RT_USING_LIBC) + int "Manually set a fixed time zone (UTC+)" + range -12 12 + default 8 + endmenu diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 33d8907165..8dda257937 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -214,7 +214,7 @@ struct tm* localtime_r(const time_t* t, struct tm* r) time_t local_tz; int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ + utc_plus = RT_LIBC_FIXED_TIMEZONE; local_tz = *t + utc_plus * 3600; return gmtime_r(&local_tz, r); } @@ -233,7 +233,7 @@ time_t mktime(struct tm * const t) time_t timestamp; int utc_plus; - utc_plus = 8; /* GMT: UTC+8 */ + utc_plus = RT_LIBC_FIXED_TIMEZONE; timestamp = timegm(t); timestamp = timestamp - 3600 * utc_plus; return timestamp; -- cgit v1.3.1 From 0aa3b80fc3509a2377d727e76fd9393f4b4962d8 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:03:46 +0800 Subject: 在time.c中增加RT_LIBC_FIXED_TIMEZONE默认值,防止有些工程没有配置RT_LIBC_FIXED_TIMEZONE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'components') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 8dda257937..3e23fc8242 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -30,6 +30,10 @@ #define DBG_LVL DBG_INFO #include +#ifndef RT_LIBC_FIXED_TIMEZONE +#define RT_LIBC_FIXED_TIMEZONE 8 +#endif + /* seconds per day */ #define SPD 24*60*60 -- cgit v1.3.1 From 65984a7116e747e022083774852f3a90617ca4e1 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:06:03 +0800 Subject: add comment --- components/libc/compilers/common/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'components') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index 3e23fc8242..f7f52be9b4 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -31,7 +31,7 @@ #include #ifndef RT_LIBC_FIXED_TIMEZONE -#define RT_LIBC_FIXED_TIMEZONE 8 +#define RT_LIBC_FIXED_TIMEZONE 8 /* UTC+8 */ #endif /* seconds per day */ -- cgit v1.3.1 From a611a6686402bd074cbaf53c53356c381ab54a5f Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 1 May 2021 06:08:14 +0800 Subject: 精简代码 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/common/time.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'components') diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index f7f52be9b4..799f71a2d0 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -212,14 +212,11 @@ struct tm* gmtime(const time_t* t) } RTM_EXPORT(gmtime); -/*TODO: timezone */ struct tm* localtime_r(const time_t* t, struct tm* r) { time_t local_tz; - int utc_plus; - utc_plus = RT_LIBC_FIXED_TIMEZONE; - local_tz = *t + utc_plus * 3600; + local_tz = *t + RT_LIBC_FIXED_TIMEZONE * 3600; return gmtime_r(&local_tz, r); } RTM_EXPORT(localtime_r); @@ -231,15 +228,12 @@ struct tm* localtime(const time_t* t) } RTM_EXPORT(localtime); -/* TODO: timezone */ time_t mktime(struct tm * const t) { time_t timestamp; - int utc_plus; - utc_plus = RT_LIBC_FIXED_TIMEZONE; timestamp = timegm(t); - timestamp = timestamp - 3600 * utc_plus; + timestamp = timestamp - 3600 * RT_LIBC_FIXED_TIMEZONE; return timestamp; } RTM_EXPORT(mktime); -- cgit v1.3.1