提交 350b1080 编写于 作者: B Bernard Xiong

Merge pull request #303 from BernardXiong/stable-v1.2.x

Merge 2.0.0 modification to prepare v1.2.2 release.
......@@ -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);
......
......@@ -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;
......
......@@ -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
......
......@@ -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')
......@@ -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 */
......
......@@ -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 */
}
}
......
......@@ -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
......
......@@ -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
......
......@@ -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
{
......
......@@ -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. */
......
......@@ -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);
}
......
/*
* 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. */
......
......@@ -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 */
......
......@@ -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) + \
......
......@@ -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);
......
......@@ -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)));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册