diff --git a/components/dfs/filesystems/devfs/devfs.h b/components/dfs/filesystems/devfs/devfs.h index ef320b78c8..97b025634e 100644 --- a/components/dfs/filesystems/devfs/devfs.h +++ b/components/dfs/filesystems/devfs/devfs.h @@ -27,5 +27,6 @@ #include int devfs_init(void); +void rt_console_init(const char* device_name); #endif diff --git a/components/finsh/msh_cmd.c b/components/finsh/msh_cmd.c index a5ccf538b8..a1e1786ae2 100644 --- a/components/finsh/msh_cmd.c +++ b/components/finsh/msh_cmd.c @@ -211,7 +211,11 @@ int cmd_free(int argc, char** argv) { extern void list_mem(void); +#ifdef RT_USING_MEMHEAP_AS_HEAP + list_memheap(); +#else list_mem(); +#endif return 0; } FINSH_FUNCTION_EXPORT_ALIAS(cmd_free, __cmd_free, Show the memory usage in the system.); diff --git a/components/libc/armlibc/stubs.c b/components/libc/armlibc/stubs.c index 1c79ce2861..4ca7cf056f 100644 --- a/components/libc/armlibc/stubs.c +++ b/components/libc/armlibc/stubs.c @@ -168,7 +168,8 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode) console_device = rt_console_get_device(); if (console_device != 0) rt_device_write(console_device, 0, buf, len); - return len; + + return 0; #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/newlib/libc.c b/components/libc/newlib/libc.c index f7bb8e3f9b..73270969b8 100644 --- a/components/libc/newlib/libc.c +++ b/components/libc/newlib/libc.c @@ -9,6 +9,15 @@ #include #endif +#ifdef RT_USING_DFS +#include + +#ifdef RT_USING_DFS_DEVFS +#include +#endif + +#endif + void libc_system_init(const char* tty_name) { #ifdef RT_USING_DFS @@ -18,13 +27,16 @@ void libc_system_init(const char* tty_name) #error Please enable devfs by defining RT_USING_DFS_DEVFS in rtconfig.h #endif - /* init console device */ + /* initialize console device */ rt_console_init(tty_name); /* open console as stdin/stdout/stderr */ fd = open("/dev/console", O_RDONLY, 0); /* for stdin */ fd = open("/dev/console", O_WRONLY, 0); /* for stdout */ fd = open("/dev/console", O_WRONLY, 0); /* for stderr */ + + /* skip warning */ + fd = fd; #endif /* set PATH and HOME */ diff --git a/components/utilities/ymodem/ymodem.c b/components/utilities/ymodem/ymodem.c index 3af1528024..e4d909e90f 100644 --- a/components/utilities/ymodem/ymodem.c +++ b/components/utilities/ymodem/ymodem.c @@ -174,6 +174,18 @@ static rt_err_t _rym_trans_data( return -RYM_ERR_SEQ; } + /* As we are sending C continuously, there is a chance that the + * sender(remote) receive an C after sending the first handshake package. + * So the sender will interpret it as NAK and re-send the package. So we + * just ignore it and proceed. */ + if (ctx->stage == RYM_STAGE_ESTABLISHED && ctx->buf[1] == 0x00) + { + *code = RYM_CODE_NONE; + return RT_EOK; + } + + ctx->stage = RYM_STAGE_TRANSMITTING; + /* sanity check */ recv_crc = (rt_uint16_t)(*(ctx->buf+tsz-1) << 8) | *(ctx->buf+tsz); if (recv_crc != CRC16(ctx->buf+3, data_sz)) @@ -214,7 +226,6 @@ static rt_err_t _rym_do_trans(struct rym_ctx *ctx) default: return -RYM_ERR_CODE; }; - ctx->stage = RYM_STAGE_TRANSMITTING; err = _rym_trans_data(ctx, data_sz, &code); if (err != RT_EOK) diff --git a/components/utilities/ymodem/ymodem.h b/components/utilities/ymodem/ymodem.h index daed61d15f..fe22bd8135 100644 --- a/components/utilities/ymodem/ymodem.h +++ b/components/utilities/ymodem/ymodem.h @@ -52,7 +52,12 @@ enum rym_code { #endif /* how many ticks between two handshake code. */ #ifndef RYM_CHD_INTV_TICK -#define RYM_CHD_INTV_TICK (RT_TICK_PER_SECOND / 4) +#define RYM_CHD_INTV_TICK (RT_TICK_PER_SECOND * 3) +#endif + +/* how many CAN be sent when user active end the session. */ +#ifndef RYM_END_SESSION_SEND_CAN_NUM +#define RYM_END_SESSION_SEND_CAN_NUM 0x07 #endif enum rym_stage { @@ -61,7 +66,8 @@ enum rym_stage { RYM_STAGE_ESTABLISHING, /* set when we've got the packet 0 and sent ACK and second C */ RYM_STAGE_ESTABLISHED, - /* set when the sender respond to our second C */ + /* set when the sender respond to our second C and recviever got a real + * data packet. */ RYM_STAGE_TRANSMITTING, /* set when the sender send a EOT */ RYM_STAGE_FINISHING, diff --git a/include/rtdef.h b/include/rtdef.h index cfce6266a6..b0d1a33a32 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -50,7 +50,7 @@ extern "C" { /* RT-Thread version information */ #define RT_VERSION 1L /**< major version number */ #define RT_SUBVERSION 2L /**< minor version number */ -#define RT_REVISION 3L /**< revise version number */ +#define RT_REVISION 4L /**< revise version number */ /* RT-Thread version */ #define RTTHREAD_VERSION ((RT_VERSION * 10000) + \ diff --git a/src/memheap.c b/src/memheap.c index e19c83a08c..adb5c86053 100644 --- a/src/memheap.c +++ b/src/memheap.c @@ -517,6 +517,8 @@ void rt_memheap_free(void *ptr) /* check magic */ RT_ASSERT((header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC); + /* check whether this block of memory has been over-written. */ + RT_ASSERT((header_ptr->next->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC); /* get pool ptr */ heap = header_ptr->pool_ptr; diff --git a/src/module.c b/src/module.c index 5d5d02c580..1c20de731d 100644 --- a/src/module.c +++ b/src/module.c @@ -82,7 +82,7 @@ static struct rt_module_symtab *_rt_module_symtab_end = RT_NULL; */ int rt_system_module_init(void) { -#ifdef __GNUC__ +#if defined(__GNUC__) && !defined(__CC_ARM) extern int __rtmsymtab_start; extern int __rtmsymtab_end;