summaryrefslogtreecommitdiff
path: root/components/libc/compilers
diff options
context:
space:
mode:
authorliu2guang <[email protected]>2018-05-08 06:41:56 +0800
committerliu2guang <[email protected]>2018-05-08 06:41:56 +0800
commitcec2ee4cdcf5e2ba716d28fdab9313170c7d7f5d (patch)
treef2516006262c3bda28c48f141f60001fd5b3ae90 /components/libc/compilers
parentdfe3d953d97ab02b1b68aa854af7e8a5c74c5bb9 (diff)
parenta00cdcd7506489ad986d2b684b126fce6323349b (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'components/libc/compilers')
-rw-r--r--components/libc/compilers/armlibc/time.c54
-rw-r--r--components/libc/compilers/dlib/time.c54
-rw-r--r--components/libc/compilers/minilibc/time.c53
-rw-r--r--components/libc/compilers/newlib/time.c54
4 files changed, 212 insertions, 3 deletions
diff --git a/components/libc/compilers/armlibc/time.c b/components/libc/compilers/armlibc/time.c
index 7b9c2f185b..e7ad19ad3c 100644
--- a/components/libc/compilers/armlibc/time.c
+++ b/components/libc/compilers/armlibc/time.c
@@ -1,7 +1,7 @@
#include <sys/time.h>
#include <rtthread.h>
-#if defined(RT_USING_DEVICE) && defined(RT_USING_RTC)
+#ifdef RT_USING_DEVICE
int gettimeofday(struct timeval *tp, void *ignore)
{
time_t time;
@@ -23,3 +23,55 @@ int gettimeofday(struct timeval *tp, void *ignore)
return 0;
}
#endif
+
+/**
+ * Returns the current time.
+ *
+ * @param time_t * t the timestamp pointer, if not used, keep NULL.
+ *
+ * @return time_t return timestamp current.
+ *
+ */
+/* for IAR 6.2 later Compiler */
+#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
+#pragma module_name = "?time"
+time_t (__time32)(time_t *t) /* Only supports 32-bit timestamp */
+#else
+time_t time(time_t *t)
+#endif
+{
+ time_t time_now = 0;
+
+#ifdef RT_USING_RTC
+ static rt_device_t device = RT_NULL;
+
+ /* optimization: find rtc device only first. */
+ if (device == RT_NULL)
+ {
+ device = rt_device_find("rtc");
+ }
+
+ /* read timestamp from RTC device. */
+ if (device != RT_NULL)
+ {
+ if (rt_device_open(device, 0) == RT_EOK)
+ {
+ rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now);
+ rt_device_close(device);
+ }
+ }
+#endif /* RT_USING_RTC */
+
+ /* if t is not NULL, write timestamp to *t */
+ if (t != RT_NULL)
+ {
+ *t = time_now;
+ }
+
+ return time_now;
+}
+
+RT_WEAK clock_t clock(void)
+{
+ return rt_tick_get();
+}
diff --git a/components/libc/compilers/dlib/time.c b/components/libc/compilers/dlib/time.c
index 7b9c2f185b..e7ad19ad3c 100644
--- a/components/libc/compilers/dlib/time.c
+++ b/components/libc/compilers/dlib/time.c
@@ -1,7 +1,7 @@
#include <sys/time.h>
#include <rtthread.h>
-#if defined(RT_USING_DEVICE) && defined(RT_USING_RTC)
+#ifdef RT_USING_DEVICE
int gettimeofday(struct timeval *tp, void *ignore)
{
time_t time;
@@ -23,3 +23,55 @@ int gettimeofday(struct timeval *tp, void *ignore)
return 0;
}
#endif
+
+/**
+ * Returns the current time.
+ *
+ * @param time_t * t the timestamp pointer, if not used, keep NULL.
+ *
+ * @return time_t return timestamp current.
+ *
+ */
+/* for IAR 6.2 later Compiler */
+#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
+#pragma module_name = "?time"
+time_t (__time32)(time_t *t) /* Only supports 32-bit timestamp */
+#else
+time_t time(time_t *t)
+#endif
+{
+ time_t time_now = 0;
+
+#ifdef RT_USING_RTC
+ static rt_device_t device = RT_NULL;
+
+ /* optimization: find rtc device only first. */
+ if (device == RT_NULL)
+ {
+ device = rt_device_find("rtc");
+ }
+
+ /* read timestamp from RTC device. */
+ if (device != RT_NULL)
+ {
+ if (rt_device_open(device, 0) == RT_EOK)
+ {
+ rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now);
+ rt_device_close(device);
+ }
+ }
+#endif /* RT_USING_RTC */
+
+ /* if t is not NULL, write timestamp to *t */
+ if (t != RT_NULL)
+ {
+ *t = time_now;
+ }
+
+ return time_now;
+}
+
+RT_WEAK clock_t clock(void)
+{
+ return rt_tick_get();
+}
diff --git a/components/libc/compilers/minilibc/time.c b/components/libc/compilers/minilibc/time.c
index efd6be8754..605f6f573e 100644
--- a/components/libc/compilers/minilibc/time.c
+++ b/components/libc/compilers/minilibc/time.c
@@ -1,4 +1,5 @@
#include <time.h>
+#include <rtthread.h>
/* days per month -- nonleap! */
const short __spm[13] =
@@ -227,3 +228,55 @@ int _gettimeofday( struct timeval *tv, void *ignore)
return 0; // return non-zero for error
}
#endif
+
+/**
+ * Returns the current time.
+ *
+ * @param time_t * t the timestamp pointer, if not used, keep NULL.
+ *
+ * @return time_t return timestamp current.
+ *
+ */
+/* for IAR 6.2 later Compiler */
+#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
+#pragma module_name = "?time"
+time_t (__time32)(time_t *t) /* Only supports 32-bit timestamp */
+#else
+time_t time(time_t *t)
+#endif
+{
+ time_t time_now = 0;
+
+#ifdef RT_USING_RTC
+ static rt_device_t device = RT_NULL;
+
+ /* optimization: find rtc device only first. */
+ if (device == RT_NULL)
+ {
+ device = rt_device_find("rtc");
+ }
+
+ /* read timestamp from RTC device. */
+ if (device != RT_NULL)
+ {
+ if (rt_device_open(device, 0) == RT_EOK)
+ {
+ rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now);
+ rt_device_close(device);
+ }
+ }
+#endif /* RT_USING_RTC */
+
+ /* if t is not NULL, write timestamp to *t */
+ if (t != RT_NULL)
+ {
+ *t = time_now;
+ }
+
+ return time_now;
+}
+
+RT_WEAK clock_t clock(void)
+{
+ return rt_tick_get();
+}
diff --git a/components/libc/compilers/newlib/time.c b/components/libc/compilers/newlib/time.c
index 7b9c2f185b..e7ad19ad3c 100644
--- a/components/libc/compilers/newlib/time.c
+++ b/components/libc/compilers/newlib/time.c
@@ -1,7 +1,7 @@
#include <sys/time.h>
#include <rtthread.h>
-#if defined(RT_USING_DEVICE) && defined(RT_USING_RTC)
+#ifdef RT_USING_DEVICE
int gettimeofday(struct timeval *tp, void *ignore)
{
time_t time;
@@ -23,3 +23,55 @@ int gettimeofday(struct timeval *tp, void *ignore)
return 0;
}
#endif
+
+/**
+ * Returns the current time.
+ *
+ * @param time_t * t the timestamp pointer, if not used, keep NULL.
+ *
+ * @return time_t return timestamp current.
+ *
+ */
+/* for IAR 6.2 later Compiler */
+#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
+#pragma module_name = "?time"
+time_t (__time32)(time_t *t) /* Only supports 32-bit timestamp */
+#else
+time_t time(time_t *t)
+#endif
+{
+ time_t time_now = 0;
+
+#ifdef RT_USING_RTC
+ static rt_device_t device = RT_NULL;
+
+ /* optimization: find rtc device only first. */
+ if (device == RT_NULL)
+ {
+ device = rt_device_find("rtc");
+ }
+
+ /* read timestamp from RTC device. */
+ if (device != RT_NULL)
+ {
+ if (rt_device_open(device, 0) == RT_EOK)
+ {
+ rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now);
+ rt_device_close(device);
+ }
+ }
+#endif /* RT_USING_RTC */
+
+ /* if t is not NULL, write timestamp to *t */
+ if (t != RT_NULL)
+ {
+ *t = time_now;
+ }
+
+ return time_now;
+}
+
+RT_WEAK clock_t clock(void)
+{
+ return rt_tick_get();
+}