summaryrefslogtreecommitdiff
path: root/components/libc/armlibc
diff options
context:
space:
mode:
authorArda <[email protected]>2014-11-24 11:57:31 +0800
committerArda <[email protected]>2014-11-24 11:57:31 +0800
commit143d3b82244b977735649e7d7c201d2affe67460 (patch)
tree61503d3a150cef8d8184c858efc139b146b50cf6 /components/libc/armlibc
parentbc2a890ab08d163ccea323f7e719c4fdf53050cd (diff)
parent9ecd18411fc1344e3d080d844b60c7070c3fb4d8 (diff)
Merge pull request #2 from RT-Thread/master
update from official source
Diffstat (limited to 'components/libc/armlibc')
-rw-r--r--components/libc/armlibc/SConscript14
-rw-r--r--components/libc/armlibc/mem_std.c22
-rw-r--r--components/libc/armlibc/stubs.c54
3 files changed, 62 insertions, 28 deletions
diff --git a/components/libc/armlibc/SConscript b/components/libc/armlibc/SConscript
index 11aba6b4f8..29f342a1c1 100644
--- a/components/libc/armlibc/SConscript
+++ b/components/libc/armlibc/SConscript
@@ -1,16 +1,12 @@
-Import('rtconfig')
from building import *
-if GetDepend('RT_USING_ARM_LIBC') and rtconfig.CROSS_TOOL != 'keil':
- print '================ERROR=============================='
- print 'Please use ARM CC compiler if using ARM C library'
- print '==================================================='
- exit(0)
-
-cwd = GetCurrentDir()
src = Glob('*.c')
+cwd = GetCurrentDir()
+
CPPPATH = [cwd]
+CPPDEFINES = ['RT_USING_ARM_LIBC']
-group = DefineGroup('libc', src, depend = ['RT_USING_ARM_LIBC'], CPPPATH = CPPPATH)
+group = DefineGroup('libc', src, depend = ['RT_USING_LIBC'],
+ CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/libc/armlibc/mem_std.c b/components/libc/armlibc/mem_std.c
index 017ed77fef..6faf86555f 100644
--- a/components/libc/armlibc/mem_std.c
+++ b/components/libc/armlibc/mem_std.c
@@ -1,7 +1,16 @@
/*
- * File: mem_std.c
- * Brief: Replace memory management functions of arm standard c library
+ * File : mem_std.c
+ * Brief : implement standard memory routins.
*
+ * This file is part of Device File System in RT-Thread RTOS
+ * COPYRIGHT (C) 2014, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rt-thread.org/license/LICENSE.
+ *
+ * Change Logs:
+ * 2014-08-03 bernard Add file header.
*/
#include "rtthread.h"
@@ -9,16 +18,21 @@
/* avoid the heap and heap-using library functions supplied by arm */
#pragma import(__use_no_heap)
-void * malloc(int n)
+void *malloc(int n)
{
return rt_malloc(n);
}
-void * realloc(void *rmem, rt_size_t newsize)
+void *realloc(void *rmem, rt_size_t newsize)
{
return rt_realloc(rmem, newsize);
}
+void *calloc(rt_size_t nelem, rt_size_t elsize)
+{
+ return rt_calloc(nelem, elsize);
+}
+
void free(void *rmem)
{
rt_free(rmem);
diff --git a/components/libc/armlibc/stubs.c b/components/libc/armlibc/stubs.c
index d219b3430a..ea42777a08 100644
--- a/components/libc/armlibc/stubs.c
+++ b/components/libc/armlibc/stubs.c
@@ -13,6 +13,8 @@
* Date Author Notes
* 2012-11-23 Yihui The first version
* 2013-11-24 aozima fixed _sys_read()/_sys_write() issues.
+ * 2014-08-03 bernard If using msh, use system() implementation
+ * in msh.
*/
#include <string.h>
@@ -48,6 +50,7 @@ FILEHANDLE _sys_open(const char *name, int openmode)
{
#ifdef RT_USING_DFS
int fd;
+ int mode = O_RDONLY;
#endif
/* Register standard Input Output devices. */
@@ -61,8 +64,33 @@ FILEHANDLE _sys_open(const char *name, int openmode)
#ifndef RT_USING_DFS
return -1;
#else
- /* TODO: adjust open file mode */
- fd = open(name, openmode, 0);
+ /* Correct openmode from fopen to open */
+ if (openmode & OPEN_PLUS)
+ {
+ if (openmode & OPEN_W)
+ {
+ mode |= (O_RDWR | O_TRUNC | O_CREAT);
+ }
+ else if (openmode & OPEN_A)
+ {
+ mode |= (O_RDWR | O_APPEND | O_CREAT);
+ }
+ else
+ mode |= O_RDWR;
+ }
+ else
+ {
+ if (openmode & OPEN_W)
+ {
+ mode |= (O_WRONLY | O_TRUNC | O_CREAT);
+ }
+ else if (openmode & OPEN_A)
+ {
+ mode |= (O_WRONLY | O_APPEND | O_CREAT);
+ }
+ }
+
+ fd = open(name, mode, 0);
if(fd < 0)
return -1;
else
@@ -138,7 +166,6 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
return 0;
#else
rt_device_t console_device;
- extern rt_device_t rt_console_get_device(void);
console_device = rt_console_get_device();
if (console_device != 0) rt_device_write(console_device, 0, buf, len);
@@ -194,9 +221,13 @@ char *_sys_command_string(char *cmd, int len)
return cmd;
}
+/* This function writes a character to the console. */
void _ttywrch(int ch)
{
- /* TODO */
+ char c;
+
+ c = (char)ch;
+ rt_kprintf(&c);
}
void _sys_exit(int return_code)
@@ -221,7 +252,6 @@ int _sys_istty(FILEHANDLE fh)
return 0;
}
-
int remove(const char *filename)
{
#ifndef RT_USING_DFS
@@ -231,18 +261,12 @@ int remove(const char *filename)
#endif
}
-/* rename() is defined in dfs_posix.c instead */
-#if 0
-int rename(const char *old, const char *new)
-{
- return -1;
-}
-#endif
-
+#if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) && defined(RT_USING_MODULE) && defined(RT_USING_DFS)
+/* use system(const char *string) implementation in the msh */
+#else
int system(const char *string)
{
RT_ASSERT(0);
for(;;);
}
-
-
+#endif