summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2014-07-19 06:46:39 +0800
committerBernard Xiong <[email protected]>2014-07-19 06:46:39 +0800
commit350b1080eafb565875f82bfe5da9173fa7f0f149 (patch)
treea044f04e1d200c2421a74e840ab6da143c431b55
parent61712bbd13b7c820307f0570d49f1bc0fc6b857a (diff)
parent50e7ae7e875c28cdc65baf9c0ec7893a59211a23 (diff)
Merge pull request #303 from BernardXiong/stable-v1.2.xv1.2.2
Merge 2.0.0 modification to prepare v1.2.2 release.
-rw-r--r--bsp/ls1bdev/ls1b_ram.lds6
-rw-r--r--bsp/stm32f40x/stm32_rom.ld4
-rw-r--r--components/external/libpng/pngconf.h2
-rw-r--r--components/external/tjpgd1a/SConscript2
-rw-r--r--components/external/tjpgd1a/tjpgd.c2
-rw-r--r--components/finsh/shell.c6
-rw-r--r--components/libc/armlibc/stubs.c13
-rw-r--r--components/net/lwip-1.4.1/src/arch/sys_arch.c2
-rw-r--r--components/net/lwip-1.4.1/src/include/netif/ethernetif.h4
-rw-r--r--components/net/lwip-1.4.1/src/lwipopts.h22
-rw-r--r--components/utilities/logtrace/log_trace.c21
-rw-r--r--components/utilities/logtrace/log_trace.h42
-rw-r--r--components/utilities/ymodem/ymodem.c25
-rw-r--r--include/rtdef.h2
-rw-r--r--src/device.c12
-rw-r--r--src/timer.c12
16 files changed, 130 insertions, 47 deletions
diff --git a/bsp/ls1bdev/ls1b_ram.lds b/bsp/ls1bdev/ls1b_ram.lds
index e55c645865..95fb2496f8 100644
--- a/bsp/ls1bdev/ls1b_ram.lds
+++ b/bsp/ls1bdev/ls1b_ram.lds
@@ -46,6 +46,12 @@ SECTIONS
KEEP(*(VSymTab))
__vsymtab_end = .;
. = ALIGN(4);
+
+ . = ALIGN(4);
+ __rt_init_start = .;
+ KEEP(*(SORT(.rti_fn*)))
+ __rt_init_end = .;
+ . = ALIGN(4);
}
. = ALIGN(4);
diff --git a/bsp/stm32f40x/stm32_rom.ld b/bsp/stm32f40x/stm32_rom.ld
index 20c27f6f1a..bd2ef9fe44 100644
--- a/bsp/stm32f40x/stm32_rom.ld
+++ b/bsp/stm32f40x/stm32_rom.ld
@@ -6,8 +6,8 @@
/* Program Entry, set to mark it as "used" and avoid gc */
MEMORY
{
- CODE (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */
- DATA (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64K sram */
+ CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
+ DATA (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */
}
ENTRY(Reset_Handler)
_system_stack_size = 0x100;
diff --git a/components/external/libpng/pngconf.h b/components/external/libpng/pngconf.h
index 047376302d..bb0a189f9d 100644
--- a/components/external/libpng/pngconf.h
+++ b/components/external/libpng/pngconf.h
@@ -23,6 +23,8 @@
#include <rtthread.h>
#define PNG_MAX_MALLOC_64K
#define PNG_NO_STDIO
+#define PNG_NO_ERROR_NUMBERS
+#define PNG_ABORT() do { rt_kprintf("libpng abort.\n"); } while (0)
#ifndef RT_USING_NEWLIB
#define PNG_NO_WRITE_SUPPORTED
diff --git a/components/external/tjpgd1a/SConscript b/components/external/tjpgd1a/SConscript
index d5db35385f..37448fcc3b 100644
--- a/components/external/tjpgd1a/SConscript
+++ b/components/external/tjpgd1a/SConscript
@@ -8,7 +8,7 @@ tjpgd.c
CPPPATH = [RTT_ROOT + '/components/external/tjpgd1a']
-group = DefineGroup('tjpgd', src, depend = ['RTGUI_IMAGE_TJPGD'], CPPPATH = CPPPATH)
+group = DefineGroup('RTGUI', src, depend = ['RT_USING_RTGUI', 'RTGUI_IMAGE_TJPGD'], CPPPATH = CPPPATH)
Return('group')
diff --git a/components/external/tjpgd1a/tjpgd.c b/components/external/tjpgd1a/tjpgd.c
index 9c69989ced..4203336c51 100644
--- a/components/external/tjpgd1a/tjpgd.c
+++ b/components/external/tjpgd1a/tjpgd.c
@@ -525,7 +525,7 @@ JRESULT mcu_load (
} while (++i < 64); /* Next AC element */
if (JD_USE_SCALE && jd->scale == 3)
- *bp = (*tmp / 256) + 128; /* If scale ratio is 1/8, IDCT can be ommited and only DC element is used */
+ *bp = (BYTE)((*tmp / 256) + 128); /* If scale ratio is 1/8, IDCT can be ommited and only DC element is used */
else
block_idct(tmp, bp); /* Apply IDCT and store the block to the MCU buffer */
diff --git a/components/finsh/shell.c b/components/finsh/shell.c
index 393d68713c..ae099e7e7c 100644
--- a/components/finsh/shell.c
+++ b/components/finsh/shell.c
@@ -530,6 +530,12 @@ void finsh_thread_entry(void* parameter)
ch = 0;
shell->line_position ++;
shell->line_curpos++;
+ if (shell->line_position >= 80)
+ {
+ /* clear command line */
+ shell->line_position = 0;
+ shell->line_curpos = 0;
+ }
} /* end of device read */
}
}
diff --git a/components/libc/armlibc/stubs.c b/components/libc/armlibc/stubs.c
index 301f654182..d219b3430a 100644
--- a/components/libc/armlibc/stubs.c
+++ b/components/libc/armlibc/stubs.c
@@ -46,8 +46,10 @@ const char __stderr_name[] = "STDERR";
*/
FILEHANDLE _sys_open(const char *name, int openmode)
{
+#ifdef RT_USING_DFS
int fd;
-
+#endif
+
/* Register standard Input Output devices. */
if (strcmp(name, __stdin_name) == 0)
return (STDIN);
@@ -91,12 +93,13 @@ int _sys_close(FILEHANDLE fh)
*/
int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
{
+#ifdef RT_USING_DFS
int size;
-
+#endif
+
if (fh == STDIN)
{
/* TODO */
-
return 0;
}
@@ -125,8 +128,10 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
*/
int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{
+#ifdef RT_USING_DFS
int size;
-
+#endif
+
if ((fh == STDOUT) || (fh == STDERR))
{
#ifndef RT_USING_CONSOLE
diff --git a/components/net/lwip-1.4.1/src/arch/sys_arch.c b/components/net/lwip-1.4.1/src/arch/sys_arch.c
index ee1d952410..356dc101cf 100644
--- a/components/net/lwip-1.4.1/src/arch/sys_arch.c
+++ b/components/net/lwip-1.4.1/src/arch/sys_arch.c
@@ -108,7 +108,7 @@ static void tcpip_init_done_callback(void *arg)
netif_set_up(ethif->netif);
}
-#ifdef LWIP_NETIF_LINK_CALLBACK
+#if LWIP_NETIF_LINK_CALLBACK
netif_set_link_up(ethif->netif);
#endif
diff --git a/components/net/lwip-1.4.1/src/include/netif/ethernetif.h b/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
index 53dacf2270..2019df7017 100644
--- a/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
+++ b/components/net/lwip-1.4.1/src/include/netif/ethernetif.h
@@ -5,7 +5,11 @@
#include <rtthread.h>
#define NIOCTL_GADDR 0x01
+#ifndef RT_LWIP_ETH_MTU
#define ETHERNET_MTU 1500
+#else
+#define ETHERNET_MTU RT_LWIP_ETH_MTU
+#endif
struct eth_device
{
diff --git a/components/net/lwip-1.4.1/src/lwipopts.h b/components/net/lwip-1.4.1/src/lwipopts.h
index 10cb7893a7..bff172e280 100644
--- a/components/net/lwip-1.4.1/src/lwipopts.h
+++ b/components/net/lwip-1.4.1/src/lwipopts.h
@@ -38,8 +38,9 @@
#define LWIP_PLATFORM_BYTESWAP 0
#define BYTE_ORDER LITTLE_ENDIAN
-/* Enable SO_RCVTIMEO processing. */
+/* Enable SO_RCVTIMEO/LWIP_SO_SNDTIMEO processing. */
#define LWIP_SO_RCVTIMEO 1
+#define LWIP_SO_SNDTIMEO 1
/* #define RT_LWIP_DEBUG */
@@ -117,6 +118,8 @@
/* the number of simultaneously queued TCP */
#ifdef RT_LWIP_TCP_SEG_NUM
+#define MEMP_NUM_TCP_SEG RT_LWIP_TCP_SEG_NUM
+#else
#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN
#endif
@@ -135,12 +138,12 @@
/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#ifdef RT_LWIP_PBUF_NUM
-#define PBUF_POOL_SIZE RT_LWIP_PBUF_NUM
+#define PBUF_POOL_SIZE RT_LWIP_PBUF_NUM
#endif
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#ifdef RT_LWIP_PBUF_POOL_BUFSIZE
-#define PBUF_POOL_BUFSIZE RT_LWIP_PBUF_POOL_BUFSIZE
+#define PBUF_POOL_BUFSIZE RT_LWIP_PBUF_POOL_BUFSIZE
#endif
/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
@@ -176,7 +179,7 @@
/* TCP sender buffer space (bytes). */
#ifdef RT_LWIP_TCP_SND_BUF
-#define TCP_SND_BUF RT_LWIP_TCP_SND_BUF
+#define TCP_SND_BUF RT_LWIP_TCP_SND_BUF
#else
#define TCP_SND_BUF (TCP_MSS * 2)
#endif
@@ -230,10 +233,15 @@
/* IP reassembly and segmentation.These are orthogonal even
* if they both deal with IP fragments */
-#define IP_REASSEMBLY 0
+#ifdef RT_LWIP_REASSEMBLY_FRAG
+#define IP_REASSEMBLY 1
+#define IP_FRAG 1
#define IP_REASS_MAX_PBUFS 10
#define MEMP_NUM_REASSDATA 10
+#else
+#define IP_REASSEMBLY 0
#define IP_FRAG 0
+#endif
/* ---------- ICMP options ---------- */
#define ICMP_TTL 255
@@ -307,7 +315,7 @@
* in this file.
*/
#ifdef RT_LWIP_PPPOE
-#define PPPOE_SUPPORT 1
+#define PPPOE_SUPPORT 1
#else
#define PPPOE_SUPPORT 0
#endif
@@ -315,7 +323,7 @@
#ifdef RT_LWIP_PPPOS
#define PPPOS_SUPPORT 1
#else
-#define PPPOS_SUPPORT 0
+#define PPPOS_SUPPORT 0
#endif
#define PAP_SUPPORT 1 /* Set > 0 for PAP. */
diff --git a/components/utilities/logtrace/log_trace.c b/components/utilities/logtrace/log_trace.c
index 1d0a42725e..d060465907 100644
--- a/components/utilities/logtrace/log_trace.c
+++ b/components/utilities/logtrace/log_trace.c
@@ -42,7 +42,7 @@ static rt_device_t _traceout_device = RT_NULL;
/* define a default lg session. The name is empty. */
static struct log_trace_session _def_session = {{"\0"}, LOG_TRACE_LEVEL_INFO};
-static struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
+static const struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
/* there is a default session at least */
static rt_uint16_t _the_sess_nr = 1;
@@ -83,11 +83,11 @@ rt_inline int _idname_len(log_trace_idnum_t id)
*/
static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
{
- static struct log_trace_session *_cache = &_def_session;
+ static const struct log_trace_session *_cache = &_def_session;
rt_uint16_t first, last;
if (_cache->id.num == num)
- return _cache;
+ return (struct log_trace_session *)_cache;
first = 0;
last = _the_sess_nr;
@@ -104,7 +104,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
* process and we wrote the old one to _cache. But it doesn't harm
* a lot because it will be flushed in the next time. */
_cache = _the_sessions[i];
- return _the_sessions[i];
+ return (struct log_trace_session *)_the_sessions[i];
}
else if (_the_sessions[i]->id.num > num)
{
@@ -119,7 +119,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
return RT_NULL;
}
-rt_err_t log_trace_register_session(struct log_trace_session *session)
+rt_err_t log_trace_register_session(const struct log_trace_session *session)
{
unsigned int lvl, i;
@@ -255,8 +255,9 @@ static rt_size_t _lg_parse_session(
return 0;
}
-static void _lg_fmtout(
- struct log_trace_session *session, const char *fmt, va_list argptr)
+void __logtrace_vfmtout(const struct log_trace_session *session,
+ const char *fmt,
+ va_list argptr)
{
/* 1 for ']' */
static char _trace_buf[1+LOG_TRACE_BUFSZ];
@@ -303,12 +304,12 @@ void log_trace(const char *fmt, ...)
return;
va_start(args, fmt);
- _lg_fmtout(session, fmt, args);
+ __logtrace_vfmtout(session, fmt, args);
va_end(args);
}
FINSH_FUNCTION_EXPORT(log_trace, log trace);
-void log_session(struct log_trace_session *session, const char *fmt, ...)
+void log_session(const struct log_trace_session *session, const char *fmt, ...)
{
va_list args;
int level;
@@ -321,7 +322,7 @@ void log_session(struct log_trace_session *session, const char *fmt, ...)
return;
va_start(args, fmt);
- _lg_fmtout(session, fmt, args);
+ __logtrace_vfmtout(session, fmt, args);
va_end(args);
}
diff --git a/components/utilities/logtrace/log_trace.h b/components/utilities/logtrace/log_trace.h
index 77e1f08b6c..1e8cc4abae 100644
--- a/components/utilities/logtrace/log_trace.h
+++ b/components/utilities/logtrace/log_trace.h
@@ -1,7 +1,7 @@
/*
* File : log_trace.h
* This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2013, RT-Thread Development Team
+ * COPYRIGHT (C) 2013-2014, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -95,7 +95,7 @@ void log_trace_init(void);
*
* @return RT_EOK on success. -RT_EFULL if there is no space for registration.
*/
-rt_err_t log_trace_register_session(struct log_trace_session *session);
+rt_err_t log_trace_register_session(const struct log_trace_session *session);
/** find a session with name
*
@@ -130,7 +130,43 @@ void log_trace(const char *fmt, ...);
* "[systick][name]log messages". The name is the name of the session. It is
* faster than bare log_trace.
*/
-void log_session(struct log_trace_session *session, const char *fmt, ...);
+void log_session(const struct log_trace_session *session, const char *fmt, ...);
+
+extern void __logtrace_vfmtout(const struct log_trace_session *session,
+ const char *fmt,
+ va_list argptr);
+
+rt_inline void __logtrace_fmtout(const struct log_trace_session *session,
+ const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ __logtrace_vfmtout(session, fmt, args);
+ va_end(args);
+}
+
+/**
+ * log with numeric level
+ *
+ * The prototype of this function is:
+ *
+ * void log_session_lvl(struct log_trace_session *session,
+ * int lvl,
+ * const char *fmt, ...);
+ *
+ * If the @session is const and @level is greater than @session->lvl, the whole
+ * function will be optimized out. This is suitable for performance critical
+ * places where in most cases, the log is turned off by level.
+ */
+#define log_session_lvl(session, level, fmt, ...) \
+ do { \
+ if ((level) > (session)->lvl) \
+ { \
+ break; \
+ } \
+ __logtrace_fmtout(session, fmt, ##__VA_ARGS__); \
+ } while (0)
/* here comes the global part. All sessions share the some output backend. */
diff --git a/components/utilities/ymodem/ymodem.c b/components/utilities/ymodem/ymodem.c
index fdd1950cc0..f5ebeab832 100644
--- a/components/utilities/ymodem/ymodem.c
+++ b/components/utilities/ymodem/ymodem.c
@@ -70,18 +70,23 @@ static enum rym_code _rym_read_code(
struct rym_ctx *ctx,
rt_tick_t timeout)
{
- /* consume the available sem and read the data in buffer if possible */
- while (rt_sem_trytake(&ctx->sem) == RT_EOK)
- ;
+ /* Fast path */
if (rt_device_read(ctx->dev, 0, ctx->buf, 1) == 1)
return *ctx->buf;
- /* no data yet, wait for one */
- if (rt_sem_take(&ctx->sem, timeout) != RT_EOK)
- return RYM_CODE_NONE;
- /* read one */
- if (rt_device_read(ctx->dev, 0, ctx->buf, 1) == 1)
- return *ctx->buf;
- return RYM_CODE_NONE;
+
+ /* Slow path */
+ do {
+ rt_size_t rsz;
+
+ /* No data yet, wait for one */
+ if (rt_sem_take(&ctx->sem, timeout) != RT_EOK)
+ return RYM_CODE_NONE;
+
+ /* Try to read one */
+ rsz = rt_device_read(ctx->dev, 0, ctx->buf, 1);
+ if (rsz == 1)
+ return *ctx->buf;
+ } while (1);
}
/* the caller should at least alloc _RYM_STX_PKG_SZ buffer */
diff --git a/include/rtdef.h b/include/rtdef.h
index 2d1ea4dfd2..332f2eff59 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 1L /**< revise version number */
+#define RT_REVISION 2L /**< revise version number */
/* RT-Thread version */
#define RTTHREAD_VERSION ((RT_VERSION * 10000) + \
diff --git a/src/device.c b/src/device.c
index 75b88bf6eb..7ee130041c 100644
--- a/src/device.c
+++ b/src/device.c
@@ -239,11 +239,6 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return -RT_EBUSY;
}
- dev->ref_count++;
- /* don't let bad things happen silently. If you are bitten by this assert,
- * please set the ref_count to a bigger type. */
- RT_ASSERT(dev->ref_count != 0);
-
/* call device open interface */
if (dev->open != RT_NULL)
{
@@ -252,8 +247,15 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
/* set open flag */
if (result == RT_EOK || result == -RT_ENOSYS)
+ {
dev->open_flag = oflag | RT_DEVICE_OFLAG_OPEN;
+ dev->ref_count++;
+ /* don't let bad things happen silently. If you are bitten by this assert,
+ * please set the ref_count to a bigger type. */
+ RT_ASSERT(dev->ref_count != 0);
+ }
+
return result;
}
RTM_EXPORT(rt_device_open);
diff --git a/src/timer.c b/src/timer.c
index ac8a148d8d..53cb186243 100644
--- a/src/timer.c
+++ b/src/timer.c
@@ -128,6 +128,7 @@ rt_inline void _rt_timer_remove(rt_timer_t timer)
}
}
+#if RT_DEBUG_TIMER
static int rt_timer_count_height(struct rt_timer *timer)
{
int i, cnt = 0;
@@ -155,6 +156,7 @@ void rt_timer_dump(rt_list_t timer_heads[])
}
rt_kprintf("\n");
}
+#endif
/**
* @addtogroup Clock
@@ -298,8 +300,14 @@ rt_err_t rt_timer_start(rt_timer_t timer)
/* timer check */
RT_ASSERT(timer != RT_NULL);
- if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)
- return -RT_ERROR;
+
+ /* stop timer firstly */
+ level = rt_hw_interrupt_disable();
+ /* remove timer from list */
+ _rt_timer_remove(timer);
+ /* change status of timer */
+ timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
+ rt_hw_interrupt_enable(level);
RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent)));