summaryrefslogtreecommitdiff
path: root/components/libc
diff options
context:
space:
mode:
Diffstat (limited to 'components/libc')
-rw-r--r--components/libc/compilers/armlibc/syscalls.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c
index d17460b413..8addb3e163 100644
--- a/components/libc/compilers/armlibc/syscalls.c
+++ b/components/libc/compilers/armlibc/syscalls.c
@@ -13,6 +13,7 @@
* RT_USING_DFS is not defined
* 2020-02-13 Meco Man re-implement exit() and abort()
* 2020-02-14 Meco Man implement _sys_tmpnam()
+ * 2020-02-25 Meco Man add multithreaded protection
*/
#include <string.h>
@@ -41,6 +42,36 @@ const char __stdin_name[] = "STDIN";
const char __stdout_name[] = "STDOUT";
const char __stderr_name[] = "STDERR";
+#ifdef RT_USING_HEAP
+int _mutex_initialize(rt_mutex_t *m)
+{
+ *m = rt_mutex_create("_mutex_", RT_IPC_FLAG_PRIO);
+ if(*m == RT_NULL)
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+void _mutex_acquire(rt_mutex_t *m)
+{
+ rt_mutex_take(*m, RT_WAITING_FOREVER);
+}
+
+void _mutex_release(rt_mutex_t *m)
+{
+ rt_mutex_release(*m);
+}
+
+void _mutex_free(rt_mutex_t *m)
+{
+ rt_mutex_delete(*m);
+}
+#endif
+
/**
* required by fopen() and freopen().
*