diff options
| author | Arda <[email protected]> | 2014-11-24 11:57:31 +0800 |
|---|---|---|
| committer | Arda <[email protected]> | 2014-11-24 11:57:31 +0800 |
| commit | 143d3b82244b977735649e7d7c201d2affe67460 (patch) | |
| tree | 61503d3a150cef8d8184c858efc139b146b50cf6 /components/libc | |
| parent | bc2a890ab08d163ccea323f7e719c4fdf53050cd (diff) | |
| parent | 9ecd18411fc1344e3d080d844b60c7070c3fb4d8 (diff) | |
Merge pull request #2 from RT-Thread/master
update from official source
Diffstat (limited to 'components/libc')
| -rw-r--r-- | components/libc/SConscript | 17 | ||||
| -rw-r--r-- | components/libc/armlibc/SConscript | 14 | ||||
| -rw-r--r-- | components/libc/armlibc/mem_std.c | 22 | ||||
| -rw-r--r-- | components/libc/armlibc/stubs.c | 54 | ||||
| -rw-r--r-- | components/libc/minilibc/SConscript | 12 | ||||
| -rw-r--r-- | components/libc/minilibc/stdint.h | 2 | ||||
| -rw-r--r-- | components/libc/minilibc/stdlib.c | 2 | ||||
| -rw-r--r-- | components/libc/minilibc/string.c | 10 | ||||
| -rw-r--r-- | components/libc/minilibc/string.h | 2 | ||||
| -rw-r--r-- | components/libc/minilibc/sys/types.h | 2 | ||||
| -rw-r--r-- | components/libc/newlib/SConscript | 15 | ||||
| -rw-r--r-- | components/libc/newlib/syscalls.c | 8 |
12 files changed, 109 insertions, 51 deletions
diff --git a/components/libc/SConscript b/components/libc/SConscript index 19494ea7c2..799ecccb36 100644 --- a/components/libc/SConscript +++ b/components/libc/SConscript @@ -1,13 +1,18 @@ # for libc component import os -Import('RTT_ROOT') +Import('rtconfig') + +from building import * objs = [] -list = os.listdir(os.path.join(RTT_ROOT, 'components', 'libc')) -for d in list: - path = os.path.join(RTT_ROOT, 'components', 'libc', d) - if os.path.isfile(os.path.join(path, 'SConscript')): - objs = objs + SConscript(os.path.join(d, 'SConscript')) +if GetDepend('RT_USING_LIBC'): + if rtconfig.PLATFORM == 'gcc': + objs = objs + SConscript('newlib/SConscript') + elif rtconfig.PLATFORM == 'armcc': + objs = objs + SConscript('armlibc/SConscript') +else: + if rtconfig.PLATFORM == 'gcc': + objs = objs + SConscript('minilibc/SConscript') Return('objs') 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 diff --git a/components/libc/minilibc/SConscript b/components/libc/minilibc/SConscript index 42f41a311d..b0c82a7125 100644 --- a/components/libc/minilibc/SConscript +++ b/components/libc/minilibc/SConscript @@ -2,12 +2,12 @@ Import('RTT_ROOT') from building import * src = Glob('*.c') -CPPPATH = [RTT_ROOT + '/components/libc/minilibc'] +cwd = GetCurrentDir() + +CPPPATH = [cwd] CPPDEFINES = ['RT_USING_MINILIBC'] -group = DefineGroup('minilibc', src, - depend = ['RT_USING_MINILIBC'], - CPPPATH = CPPPATH, - CPPDEFINES = CPPDEFINES - ) + +group = DefineGroup('libc', src, depend = ['RT_USING_MINILIBC'], + CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) Return('group') diff --git a/components/libc/minilibc/stdint.h b/components/libc/minilibc/stdint.h index 2d9e292b7c..f397b57bc5 100644 --- a/components/libc/minilibc/stdint.h +++ b/components/libc/minilibc/stdint.h @@ -43,4 +43,6 @@ typedef unsigned long long uint64_t; #define LONG_MIN (-LONG_MAX - 1) #define ULONG_MAX (~0UL) +#define SIZE_MAX ULONG_MAX + #endif diff --git a/components/libc/minilibc/stdlib.c b/components/libc/minilibc/stdlib.c index 51cb07fee0..e29ae9bc2e 100644 --- a/components/libc/minilibc/stdlib.c +++ b/components/libc/minilibc/stdlib.c @@ -54,6 +54,7 @@ long int atol(const char* s) return sign?-v:v; } +#ifdef RT_USING_HEAP void *malloc(size_t size) { return rt_malloc(size); @@ -73,5 +74,6 @@ void *calloc(size_t nelem, size_t elsize) { return rt_calloc(nelem, elsize); } +#endif #endif diff --git a/components/libc/minilibc/string.c b/components/libc/minilibc/string.c index 4969ed2fc6..4e90da1554 100644 --- a/components/libc/minilibc/string.c +++ b/components/libc/minilibc/string.c @@ -621,4 +621,14 @@ char *strchr(const char *s1, int i) return (char *) s; } +long strtol(const char *str, char **endptr, int base) +{ + return simple_strtol(str, endptr, base); +} + +long long strtoll(const char *str, char **endptr, int base) +{ + return simple_strtoll(str, endptr, base); +} + #endif diff --git a/components/libc/minilibc/string.h b/components/libc/minilibc/string.h index 4bfec8fecd..089903e993 100644 --- a/components/libc/minilibc/string.h +++ b/components/libc/minilibc/string.h @@ -66,6 +66,8 @@ char*strtok_r(char*s, const char*delim, char**ptrptr); size_t strcspn(const char *s, const char *reject); size_t strspn (const char *s, const char *accept); +long strtol(const char *str, char **endptr, int base); +long long strtoll(const char *str, char **endptr, int base); #endif #endif diff --git a/components/libc/minilibc/sys/types.h b/components/libc/minilibc/sys/types.h index 6d92d80826..a6860f2aee 100644 --- a/components/libc/minilibc/sys/types.h +++ b/components/libc/minilibc/sys/types.h @@ -4,7 +4,7 @@ #include <rtthread.h> typedef long off_t; -typedef rt_size_t size_t; +typedef __SIZE_TYPE__ size_t; typedef signed long ssize_t; /* Used for a count of bytes or an error indication. */ typedef rt_uint8_t u_char; diff --git a/components/libc/newlib/SConscript b/components/libc/newlib/SConscript index ae8e8756e1..574c2a8d1f 100644 --- a/components/libc/newlib/SConscript +++ b/components/libc/newlib/SConscript @@ -1,15 +1,10 @@ -Import('rtconfig') from building import * -if GetDepend('RT_USING_NEWLIB') and rtconfig.CROSS_TOOL != 'gcc': - print '================ERROR============================' - print 'Please use GNU GCC compiler if using newlib' - print '=================================================' - exit(0) - +src = Glob('*.c') cwd = GetCurrentDir() -src = Glob('*.c') + CPPPATH = [cwd] +CPPDEFINES = ['RT_USING_NEWLIB'] # link with libc and libm: # libm is a frequently used lib. Newlib is compiled with -ffunction-sections in @@ -17,7 +12,7 @@ CPPPATH = [cwd] # been referenced. So setting this won't result in bigger text size. LIBS = ['c', 'm'] -group = DefineGroup('newlib', src, depend = ['RT_USING_NEWLIB'], - CPPPATH = CPPPATH, LIBS = LIBS) +group = DefineGroup('newlib', src, depend = ['RT_USING_LIBC'], + CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS) Return('group') diff --git a/components/libc/newlib/syscalls.c b/components/libc/newlib/syscalls.c index 5b829f4753..388d240c94 100644 --- a/components/libc/newlib/syscalls.c +++ b/components/libc/newlib/syscalls.c @@ -3,6 +3,14 @@ #include <sys/time.h> #include <rtthread.h> +#ifdef RT_USING_DFS +#include <dfs_posix.h> +#endif + +#ifdef RT_USING_PTHREADS +#include <pthread.h> +#endif + /* Reentrant versions of system calls. */ int |
