summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-12-17 11:39:51 +0800
committerGitHub <[email protected]>2020-12-17 11:39:51 +0800
commit932bbc29c63b7375bc46837b99ae6fda117a9ba0 (patch)
tree98c0003bd99f85a1bfa25aefa15d625507e15df1
parent59d964aec6d6ac142680a5f27e5774ba6ef46271 (diff)
parentab754255407c2af40d6cea61dae1a314947d0886 (diff)
Merge pull request #4171 from mysterywolf/master
[emergency][posix] 实现usleep函数
-rw-r--r--components/libc/compilers/armlibc/sys/types.h14
-rw-r--r--components/libc/compilers/armlibc/sys/unistd.h5
-rw-r--r--components/libc/compilers/common/sys/time.h3
-rw-r--r--components/libc/compilers/dlib/sys/types.h13
-rw-r--r--components/libc/compilers/dlib/sys/unistd.h5
-rw-r--r--components/libc/time/posix_sleep.c11
6 files changed, 34 insertions, 17 deletions
diff --git a/components/libc/compilers/armlibc/sys/types.h b/components/libc/compilers/armlibc/sys/types.h
index 2aad77c99d..78fee1bb99 100644
--- a/components/libc/compilers/armlibc/sys/types.h
+++ b/components/libc/compilers/armlibc/sys/types.h
@@ -5,20 +5,22 @@
*
* Change Logs:
* Date Author Notes
- * 2020-09-05 Meco Man fix bugs
+ * 2020-09-05 Meco Man fix bugs
+ * 2020-12-16 Meco Man add useconds_t
*/
#ifndef __TYPES_H__
#define __TYPES_H__
#include <stdint.h>
-typedef int32_t clockid_t;
-typedef int32_t key_t; /* Used for interprocess communication. */
-typedef int32_t pid_t; /* Used for process IDs and process group IDs. */
+typedef int32_t clockid_t;
+typedef int32_t key_t; /* Used for interprocess communication. */
+typedef int32_t pid_t; /* Used for process IDs and process group IDs. */
#ifndef ARCH_CPU_64BIT
-typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
#else
-typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
#endif
+typedef unsigned long useconds_t; /* microseconds (unsigned) */
#endif
diff --git a/components/libc/compilers/armlibc/sys/unistd.h b/components/libc/compilers/armlibc/sys/unistd.h
index 549771e8f4..73a73a267e 100644
--- a/components/libc/compilers/armlibc/sys/unistd.h
+++ b/components/libc/compilers/armlibc/sys/unistd.h
@@ -5,11 +5,13 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-12-16 Meco Man add usleep
*/
#ifndef _SYS_UNISTD_H
#define _SYS_UNISTD_H
-#include <rtthread.h>
+#include <rtconfig.h>
+#include "types.h"
#ifdef RT_USING_DFS
@@ -69,5 +71,6 @@ int isatty (int fd);
char * ttyname (int desc);
unsigned int sleep(unsigned int seconds);
+int usleep(useconds_t usec);
#endif /* _SYS_UNISTD_H */
diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h
index 952dbf32a5..28a977c1f9 100644
--- a/components/libc/compilers/common/sys/time.h
+++ b/components/libc/compilers/common/sys/time.h
@@ -36,8 +36,7 @@ struct timeval {
};
#endif /* _TIMEVAL_DEFINED */
-#ifndef _TIMESPEC
-#define _TIMESPEC
+#if !defined __GNUC__ && !defined __ICCARM__
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* and nanoseconds */
diff --git a/components/libc/compilers/dlib/sys/types.h b/components/libc/compilers/dlib/sys/types.h
index 001ace4dd2..7dbeddcaa9 100644
--- a/components/libc/compilers/dlib/sys/types.h
+++ b/components/libc/compilers/dlib/sys/types.h
@@ -5,20 +5,21 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-12-16 Meco Man add useconds_t
*/
#ifndef __TYPES_H__
#define __TYPES_H__
#include <stdint.h>
-#include <rtthread.h>
-typedef rt_int32_t clockid_t;
-typedef rt_int32_t key_t; /* Used for interprocess communication. */
-typedef rt_int32_t pid_t; /* Used for process IDs and process group IDs. */
+typedef int32_t clockid_t;
+typedef int32_t key_t; /* Used for interprocess communication. */
+typedef int32_t pid_t; /* Used for process IDs and process group IDs. */
#ifndef ARCH_CPU_64BIT
-typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
#else
-typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
#endif
+typedef unsigned long useconds_t; /* microseconds (unsigned) */
#endif
diff --git a/components/libc/compilers/dlib/sys/unistd.h b/components/libc/compilers/dlib/sys/unistd.h
index 982a29135d..6d99cd6c55 100644
--- a/components/libc/compilers/dlib/sys/unistd.h
+++ b/components/libc/compilers/dlib/sys/unistd.h
@@ -5,10 +5,14 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-12-16 Meco Man add usleep
*/
#ifndef _SYS_UNISTD_H
#define _SYS_UNISTD_H
+#include <rtconfig.h>
+#include "types.h"
+
#ifdef RT_USING_DFS
#define STDIN_FILENO 0 /* standard input file descriptor */
@@ -41,5 +45,6 @@ int isatty (int fd);
char * ttyname (int desc);
unsigned int sleep(unsigned int seconds);
+int usleep(useconds_t usec);
#endif /* _SYS_UNISTD_H */
diff --git a/components/libc/time/posix_sleep.c b/components/libc/time/posix_sleep.c
index f21b0a7994..e50bda7d4a 100644
--- a/components/libc/time/posix_sleep.c
+++ b/components/libc/time/posix_sleep.c
@@ -5,10 +5,10 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-12-16 Meco Man add usleep
*/
-#include <stdlib.h>
#include <rtthread.h>
-
+#include <rthw.h>
#include <unistd.h>
unsigned int sleep(unsigned int seconds)
@@ -21,3 +21,10 @@ unsigned int sleep(unsigned int seconds)
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;
+}