提交 50e7ae7e 编写于 作者: B bernard

Merge 2.0.0 modification to prepare v1.2.2 release.

上级 61712bbd
...@@ -46,6 +46,12 @@ SECTIONS ...@@ -46,6 +46,12 @@ SECTIONS
KEEP(*(VSymTab)) KEEP(*(VSymTab))
__vsymtab_end = .; __vsymtab_end = .;
. = ALIGN(4); . = ALIGN(4);
. = ALIGN(4);
__rt_init_start = .;
KEEP(*(SORT(.rti_fn*)))
__rt_init_end = .;
. = ALIGN(4);
} }
. = ALIGN(4); . = ALIGN(4);
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
/* Program Entry, set to mark it as "used" and avoid gc */ /* Program Entry, set to mark it as "used" and avoid gc */
MEMORY MEMORY
{ {
CODE (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */ CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
DATA (rw) : ORIGIN = 0x20000000, LENGTH = 64k /* 64K sram */ DATA (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 128K sram */
} }
ENTRY(Reset_Handler) ENTRY(Reset_Handler)
_system_stack_size = 0x100; _system_stack_size = 0x100;
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include <rtthread.h> #include <rtthread.h>
#define PNG_MAX_MALLOC_64K #define PNG_MAX_MALLOC_64K
#define PNG_NO_STDIO #define PNG_NO_STDIO
#define PNG_NO_ERROR_NUMBERS
#define PNG_ABORT() do { rt_kprintf("libpng abort.\n"); } while (0)
#ifndef RT_USING_NEWLIB #ifndef RT_USING_NEWLIB
#define PNG_NO_WRITE_SUPPORTED #define PNG_NO_WRITE_SUPPORTED
......
...@@ -8,7 +8,7 @@ tjpgd.c ...@@ -8,7 +8,7 @@ tjpgd.c
CPPPATH = [RTT_ROOT + '/components/external/tjpgd1a'] 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') Return('group')
...@@ -525,7 +525,7 @@ JRESULT mcu_load ( ...@@ -525,7 +525,7 @@ JRESULT mcu_load (
} while (++i < 64); /* Next AC element */ } while (++i < 64); /* Next AC element */
if (JD_USE_SCALE && jd->scale == 3) 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 else
block_idct(tmp, bp); /* Apply IDCT and store the block to the MCU buffer */ block_idct(tmp, bp); /* Apply IDCT and store the block to the MCU buffer */
......
...@@ -530,6 +530,12 @@ void finsh_thread_entry(void* parameter) ...@@ -530,6 +530,12 @@ void finsh_thread_entry(void* parameter)
ch = 0; ch = 0;
shell->line_position ++; shell->line_position ++;
shell->line_curpos++; shell->line_curpos++;
if (shell->line_position >= 80)
{
/* clear command line */
shell->line_position = 0;
shell->line_curpos = 0;
}
} /* end of device read */ } /* end of device read */
} }
} }
......
...@@ -46,8 +46,10 @@ const char __stderr_name[] = "STDERR"; ...@@ -46,8 +46,10 @@ const char __stderr_name[] = "STDERR";
*/ */
FILEHANDLE _sys_open(const char *name, int openmode) FILEHANDLE _sys_open(const char *name, int openmode)
{ {
#ifdef RT_USING_DFS
int fd; int fd;
#endif
/* Register standard Input Output devices. */ /* Register standard Input Output devices. */
if (strcmp(name, __stdin_name) == 0) if (strcmp(name, __stdin_name) == 0)
return (STDIN); return (STDIN);
...@@ -91,12 +93,13 @@ int _sys_close(FILEHANDLE fh) ...@@ -91,12 +93,13 @@ int _sys_close(FILEHANDLE fh)
*/ */
int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode)
{ {
#ifdef RT_USING_DFS
int size; int size;
#endif
if (fh == STDIN) if (fh == STDIN)
{ {
/* TODO */ /* TODO */
return 0; return 0;
} }
...@@ -125,8 +128,10 @@ int _sys_read(FILEHANDLE fh, unsigned char *buf, unsigned len, int mode) ...@@ -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) int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{ {
#ifdef RT_USING_DFS
int size; int size;
#endif
if ((fh == STDOUT) || (fh == STDERR)) if ((fh == STDOUT) || (fh == STDERR))
{ {
#ifndef RT_USING_CONSOLE #ifndef RT_USING_CONSOLE
......
...@@ -108,7 +108,7 @@ static void tcpip_init_done_callback(void *arg) ...@@ -108,7 +108,7 @@ static void tcpip_init_done_callback(void *arg)
netif_set_up(ethif->netif); netif_set_up(ethif->netif);
} }
#ifdef LWIP_NETIF_LINK_CALLBACK #if LWIP_NETIF_LINK_CALLBACK
netif_set_link_up(ethif->netif); netif_set_link_up(ethif->netif);
#endif #endif
......
...@@ -5,7 +5,11 @@ ...@@ -5,7 +5,11 @@
#include <rtthread.h> #include <rtthread.h>
#define NIOCTL_GADDR 0x01 #define NIOCTL_GADDR 0x01
#ifndef RT_LWIP_ETH_MTU
#define ETHERNET_MTU 1500 #define ETHERNET_MTU 1500
#else
#define ETHERNET_MTU RT_LWIP_ETH_MTU
#endif
struct eth_device struct eth_device
{ {
......
...@@ -38,8 +38,9 @@ ...@@ -38,8 +38,9 @@
#define LWIP_PLATFORM_BYTESWAP 0 #define LWIP_PLATFORM_BYTESWAP 0
#define BYTE_ORDER LITTLE_ENDIAN #define BYTE_ORDER LITTLE_ENDIAN
/* Enable SO_RCVTIMEO processing. */ /* Enable SO_RCVTIMEO/LWIP_SO_SNDTIMEO processing. */
#define LWIP_SO_RCVTIMEO 1 #define LWIP_SO_RCVTIMEO 1
#define LWIP_SO_SNDTIMEO 1
/* #define RT_LWIP_DEBUG */ /* #define RT_LWIP_DEBUG */
...@@ -117,6 +118,8 @@ ...@@ -117,6 +118,8 @@
/* the number of simultaneously queued TCP */ /* the number of simultaneously queued TCP */
#ifdef RT_LWIP_TCP_SEG_NUM #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 #define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN
#endif #endif
...@@ -135,12 +138,12 @@ ...@@ -135,12 +138,12 @@
/* ---------- Pbuf options ---------- */ /* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ /* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#ifdef RT_LWIP_PBUF_NUM #ifdef RT_LWIP_PBUF_NUM
#define PBUF_POOL_SIZE RT_LWIP_PBUF_NUM #define PBUF_POOL_SIZE RT_LWIP_PBUF_NUM
#endif #endif
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ /* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#ifdef RT_LWIP_PBUF_POOL_BUFSIZE #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 #endif
/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a /* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
...@@ -176,7 +179,7 @@ ...@@ -176,7 +179,7 @@
/* TCP sender buffer space (bytes). */ /* TCP sender buffer space (bytes). */
#ifdef RT_LWIP_TCP_SND_BUF #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 #else
#define TCP_SND_BUF (TCP_MSS * 2) #define TCP_SND_BUF (TCP_MSS * 2)
#endif #endif
...@@ -230,10 +233,15 @@ ...@@ -230,10 +233,15 @@
/* IP reassembly and segmentation.These are orthogonal even /* IP reassembly and segmentation.These are orthogonal even
* if they both deal with IP fragments */ * 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 IP_REASS_MAX_PBUFS 10
#define MEMP_NUM_REASSDATA 10 #define MEMP_NUM_REASSDATA 10
#else
#define IP_REASSEMBLY 0
#define IP_FRAG 0 #define IP_FRAG 0
#endif
/* ---------- ICMP options ---------- */ /* ---------- ICMP options ---------- */
#define ICMP_TTL 255 #define ICMP_TTL 255
...@@ -307,7 +315,7 @@ ...@@ -307,7 +315,7 @@
* in this file. * in this file.
*/ */
#ifdef RT_LWIP_PPPOE #ifdef RT_LWIP_PPPOE
#define PPPOE_SUPPORT 1 #define PPPOE_SUPPORT 1
#else #else
#define PPPOE_SUPPORT 0 #define PPPOE_SUPPORT 0
#endif #endif
...@@ -315,7 +323,7 @@ ...@@ -315,7 +323,7 @@
#ifdef RT_LWIP_PPPOS #ifdef RT_LWIP_PPPOS
#define PPPOS_SUPPORT 1 #define PPPOS_SUPPORT 1
#else #else
#define PPPOS_SUPPORT 0 #define PPPOS_SUPPORT 0
#endif #endif
#define PAP_SUPPORT 1 /* Set > 0 for PAP. */ #define PAP_SUPPORT 1 /* Set > 0 for PAP. */
......
...@@ -42,7 +42,7 @@ static rt_device_t _traceout_device = RT_NULL; ...@@ -42,7 +42,7 @@ static rt_device_t _traceout_device = RT_NULL;
/* define a default lg session. The name is empty. */ /* 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 _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 */ /* there is a default session at least */
static rt_uint16_t _the_sess_nr = 1; static rt_uint16_t _the_sess_nr = 1;
...@@ -83,11 +83,11 @@ rt_inline int _idname_len(log_trace_idnum_t id) ...@@ -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* _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; rt_uint16_t first, last;
if (_cache->id.num == num) if (_cache->id.num == num)
return _cache; return (struct log_trace_session *)_cache;
first = 0; first = 0;
last = _the_sess_nr; last = _the_sess_nr;
...@@ -104,7 +104,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num) ...@@ -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 * 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. */ * a lot because it will be flushed in the next time. */
_cache = _the_sessions[i]; _cache = _the_sessions[i];
return _the_sessions[i]; return (struct log_trace_session *)_the_sessions[i];
} }
else if (_the_sessions[i]->id.num > num) 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) ...@@ -119,7 +119,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
return RT_NULL; 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; unsigned int lvl, i;
...@@ -255,8 +255,9 @@ static rt_size_t _lg_parse_session( ...@@ -255,8 +255,9 @@ static rt_size_t _lg_parse_session(
return 0; return 0;
} }
static void _lg_fmtout( void __logtrace_vfmtout(const struct log_trace_session *session,
struct log_trace_session *session, const char *fmt, va_list argptr) const char *fmt,
va_list argptr)
{ {
/* 1 for ']' */ /* 1 for ']' */
static char _trace_buf[1+LOG_TRACE_BUFSZ]; static char _trace_buf[1+LOG_TRACE_BUFSZ];
...@@ -303,12 +304,12 @@ void log_trace(const char *fmt, ...) ...@@ -303,12 +304,12 @@ void log_trace(const char *fmt, ...)
return; return;
va_start(args, fmt); va_start(args, fmt);
_lg_fmtout(session, fmt, args); __logtrace_vfmtout(session, fmt, args);
va_end(args); va_end(args);
} }
FINSH_FUNCTION_EXPORT(log_trace, log trace); 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; va_list args;
int level; int level;
...@@ -321,7 +322,7 @@ void log_session(struct log_trace_session *session, const char *fmt, ...) ...@@ -321,7 +322,7 @@ void log_session(struct log_trace_session *session, const char *fmt, ...)
return; return;
va_start(args, fmt); va_start(args, fmt);
_lg_fmtout(session, fmt, args); __logtrace_vfmtout(session, fmt, args);
va_end(args); va_end(args);
} }
......
/* /*
* File : log_trace.h * File : log_trace.h
* This file is part of RT-Thread RTOS * 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 * 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 * it under the terms of the GNU General Public License as published by
...@@ -95,7 +95,7 @@ void log_trace_init(void); ...@@ -95,7 +95,7 @@ void log_trace_init(void);
* *
* @return RT_EOK on success. -RT_EFULL if there is no space for registration. * @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 /** find a session with name
* *
...@@ -130,7 +130,43 @@ void log_trace(const char *fmt, ...); ...@@ -130,7 +130,43 @@ void log_trace(const char *fmt, ...);
* "[systick][name]log messages". The name is the name of the session. It is * "[systick][name]log messages". The name is the name of the session. It is
* faster than bare log_trace. * 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. */ /* here comes the global part. All sessions share the some output backend. */
......
...@@ -70,18 +70,23 @@ static enum rym_code _rym_read_code( ...@@ -70,18 +70,23 @@ static enum rym_code _rym_read_code(
struct rym_ctx *ctx, struct rym_ctx *ctx,
rt_tick_t timeout) rt_tick_t timeout)
{ {
/* consume the available sem and read the data in buffer if possible */ /* Fast path */
while (rt_sem_trytake(&ctx->sem) == RT_EOK)
;
if (rt_device_read(ctx->dev, 0, ctx->buf, 1) == 1) if (rt_device_read(ctx->dev, 0, ctx->buf, 1) == 1)
return *ctx->buf; return *ctx->buf;
/* no data yet, wait for one */
if (rt_sem_take(&ctx->sem, timeout) != RT_EOK) /* Slow path */
return RYM_CODE_NONE; do {
/* read one */ rt_size_t rsz;
if (rt_device_read(ctx->dev, 0, ctx->buf, 1) == 1)
return *ctx->buf; /* No data yet, wait for one */
return RYM_CODE_NONE; 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 */ /* the caller should at least alloc _RYM_STX_PKG_SZ buffer */
......
...@@ -50,7 +50,7 @@ extern "C" { ...@@ -50,7 +50,7 @@ extern "C" {
/* RT-Thread version information */ /* RT-Thread version information */
#define RT_VERSION 1L /**< major version number */ #define RT_VERSION 1L /**< major version number */
#define RT_SUBVERSION 2L /**< minor 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 */ /* RT-Thread version */
#define RTTHREAD_VERSION ((RT_VERSION * 10000) + \ #define RTTHREAD_VERSION ((RT_VERSION * 10000) + \
......
...@@ -239,11 +239,6 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ...@@ -239,11 +239,6 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return -RT_EBUSY; 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 */ /* call device open interface */
if (dev->open != RT_NULL) if (dev->open != RT_NULL)
{ {
...@@ -252,8 +247,15 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ...@@ -252,8 +247,15 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
/* set open flag */ /* set open flag */
if (result == RT_EOK || result == -RT_ENOSYS) if (result == RT_EOK || result == -RT_ENOSYS)
{
dev->open_flag = oflag | RT_DEVICE_OFLAG_OPEN; 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; return result;
} }
RTM_EXPORT(rt_device_open); RTM_EXPORT(rt_device_open);
......
...@@ -128,6 +128,7 @@ rt_inline void _rt_timer_remove(rt_timer_t timer) ...@@ -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) static int rt_timer_count_height(struct rt_timer *timer)
{ {
int i, cnt = 0; int i, cnt = 0;
...@@ -155,6 +156,7 @@ void rt_timer_dump(rt_list_t timer_heads[]) ...@@ -155,6 +156,7 @@ void rt_timer_dump(rt_list_t timer_heads[])
} }
rt_kprintf("\n"); rt_kprintf("\n");
} }
#endif
/** /**
* @addtogroup Clock * @addtogroup Clock
...@@ -298,8 +300,14 @@ rt_err_t rt_timer_start(rt_timer_t timer) ...@@ -298,8 +300,14 @@ rt_err_t rt_timer_start(rt_timer_t timer)
/* timer check */ /* timer check */
RT_ASSERT(timer != RT_NULL); 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))); RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent)));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册