mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-01-18 09:53:30 +08:00
commit
b24447a60a
30
src/ipc.c
30
src/ipc.c
@ -48,7 +48,7 @@
|
||||
extern void (*rt_object_trytake_hook)(struct rt_object *object);
|
||||
extern void (*rt_object_take_hook)(struct rt_object *object);
|
||||
extern void (*rt_object_put_hook)(struct rt_object *object);
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/**
|
||||
* @addtogroup IPC
|
||||
@ -93,7 +93,7 @@ rt_inline rt_err_t rt_ipc_list_suspend(rt_list_t *list,
|
||||
{
|
||||
case RT_IPC_FLAG_FIFO:
|
||||
rt_list_insert_before(list, &(thread->tlist));
|
||||
break;
|
||||
break; /* RT_IPC_FLAG_FIFO */
|
||||
|
||||
case RT_IPC_FLAG_PRIO:
|
||||
{
|
||||
@ -121,7 +121,7 @@ rt_inline rt_err_t rt_ipc_list_suspend(rt_list_t *list,
|
||||
if (n == list)
|
||||
rt_list_insert_before(list, &(thread->tlist));
|
||||
}
|
||||
break;
|
||||
break;/* RT_IPC_FLAG_PRIO */
|
||||
|
||||
default:
|
||||
RT_ASSERT(0);
|
||||
@ -319,7 +319,7 @@ rt_err_t rt_sem_delete(rt_sem_t sem)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_sem_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will take a semaphore, if the semaphore is unavailable, the
|
||||
@ -533,7 +533,7 @@ rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg)
|
||||
return -RT_ERROR;
|
||||
}
|
||||
RTM_EXPORT(rt_sem_control);
|
||||
#endif /* end of RT_USING_SEMAPHORE */
|
||||
#endif /* RT_USING_SEMAPHORE */
|
||||
|
||||
#ifdef RT_USING_MUTEX
|
||||
/**
|
||||
@ -659,7 +659,7 @@ rt_err_t rt_mutex_delete(rt_mutex_t mutex)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_mutex_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will take a mutex, if the mutex is unavailable, the
|
||||
@ -714,7 +714,7 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time)
|
||||
{
|
||||
#ifdef RT_USING_SIGNALS
|
||||
__again:
|
||||
#endif /* end of RT_USING_SIGNALS */
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
/* The value of mutex is 1 in initial status. Therefore, if the
|
||||
* value is great than 0, it indicates the mutex is avaible.
|
||||
*/
|
||||
@ -794,7 +794,7 @@ __again:
|
||||
#ifdef RT_USING_SIGNALS
|
||||
/* interrupt by signal, try it again */
|
||||
if (thread->error == -RT_EINTR) goto __again;
|
||||
#endif /* end of RT_USING_SIGNALS */
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
||||
/* return error */
|
||||
return thread->error;
|
||||
@ -968,7 +968,7 @@ rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg)
|
||||
return -RT_ERROR;
|
||||
}
|
||||
RTM_EXPORT(rt_mutex_control);
|
||||
#endif /* end of RT_USING_MUTEX */
|
||||
#endif /* RT_USING_MUTEX */
|
||||
|
||||
#ifdef RT_USING_EVENT
|
||||
/**
|
||||
@ -1084,7 +1084,7 @@ rt_err_t rt_event_delete(rt_event_t event)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_event_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will send an event to the event object, if there are threads
|
||||
@ -1361,7 +1361,7 @@ rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg)
|
||||
return -RT_ERROR;
|
||||
}
|
||||
RTM_EXPORT(rt_event_control);
|
||||
#endif /* end of RT_USING_EVENT */
|
||||
#endif /* RT_USING_EVENT */
|
||||
|
||||
#ifdef RT_USING_MAILBOX
|
||||
/**
|
||||
@ -1512,7 +1512,7 @@ rt_err_t rt_mb_delete(rt_mailbox_t mb)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_mb_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will send a mail to mailbox object. If the mailbox is full,
|
||||
@ -1919,7 +1919,7 @@ rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg)
|
||||
return -RT_ERROR;
|
||||
}
|
||||
RTM_EXPORT(rt_mb_control);
|
||||
#endif /* end of RT_USING_MAILBOX */
|
||||
#endif /* RT_USING_MAILBOX */
|
||||
|
||||
#ifdef RT_USING_MESSAGEQUEUE
|
||||
struct rt_mq_message
|
||||
@ -2121,7 +2121,7 @@ rt_err_t rt_mq_delete(rt_mq_t mq)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_mq_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will send a message to message queue object. If the message queue is full,
|
||||
@ -2625,6 +2625,6 @@ rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg)
|
||||
return -RT_ERROR;
|
||||
}
|
||||
RTM_EXPORT(rt_mq_control);
|
||||
#endif /* end of RT_USING_MESSAGEQUEUE */
|
||||
#endif /* RT_USING_MESSAGEQUEUE */
|
||||
|
||||
/**@}*/
|
||||
|
@ -39,9 +39,7 @@ void rt_interrupt_leave_sethook(void (*hook)(void))
|
||||
{
|
||||
rt_interrupt_leave_hook = hook;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* #define IRQ_DEBUG */
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/**
|
||||
* @addtogroup Kernel
|
||||
@ -53,7 +51,7 @@ void rt_interrupt_leave_sethook(void (*hook)(void))
|
||||
#define rt_interrupt_nest rt_cpu_self()->irq_nest
|
||||
#else
|
||||
volatile rt_uint8_t rt_interrupt_nest = 0;
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/**
|
||||
* This function will be invoked by BSP, when enter interrupt service routine
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
#ifdef RT_USING_MODULE
|
||||
#include <dlmodule.h>
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
|
||||
/* use precision */
|
||||
#define RT_PRINTF_PRECISION
|
||||
@ -194,7 +194,7 @@ RT_WEAK void *rt_memset(void *s, int c, rt_ubase_t count)
|
||||
#undef LBLOCKSIZE
|
||||
#undef UNALIGNED
|
||||
#undef TOO_SMALL
|
||||
#endif
|
||||
#endif /* RT_KSERVICE_USING_TINY_SIZE */
|
||||
}
|
||||
RTM_EXPORT(rt_memset);
|
||||
|
||||
@ -277,7 +277,7 @@ RT_WEAK void *rt_memcpy(void *dst, const void *src, rt_ubase_t count)
|
||||
#undef BIGBLOCKSIZE
|
||||
#undef LITTLEBLOCKSIZE
|
||||
#undef TOO_SMALL
|
||||
#endif
|
||||
#endif /* RT_KSERVICE_USING_TINY_SIZE */
|
||||
}
|
||||
RTM_EXPORT(rt_memcpy);
|
||||
|
||||
@ -509,7 +509,7 @@ rt_size_t rt_strlen(const char *s)
|
||||
}
|
||||
RTM_EXPORT(rt_strlen);
|
||||
|
||||
#endif /*RT_KSERVICE_USING_STDLIB*/
|
||||
#endif /* RT_KSERVICE_USING_STDLIB */
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
/**
|
||||
@ -535,7 +535,7 @@ RTM_EXPORT(rt_strdup);
|
||||
#if defined(__CC_ARM) || defined(__CLANG_ARM)
|
||||
char *strdup(const char *s) __attribute__((alias("rt_strdup")));
|
||||
#endif
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will show the version of rt-thread rtos
|
||||
@ -591,7 +591,7 @@ rt_inline int divide(long *n, int base)
|
||||
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
|
||||
rt_inline int skip_atoi(const char **s)
|
||||
{
|
||||
@ -617,7 +617,7 @@ static char *print_number(char *buf,
|
||||
long long num,
|
||||
#else
|
||||
long num,
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
int base,
|
||||
int s,
|
||||
int precision,
|
||||
@ -629,18 +629,18 @@ static char *print_number(char *buf,
|
||||
long long num,
|
||||
#else
|
||||
long num,
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
int base,
|
||||
int s,
|
||||
int type)
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
{
|
||||
char c, sign;
|
||||
#ifdef RT_PRINTF_LONGLONG
|
||||
char tmp[32];
|
||||
#else
|
||||
char tmp[16];
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
int precision_bak = precision;
|
||||
const char *digits;
|
||||
static const char small_digits[] = "0123456789abcdef";
|
||||
@ -679,7 +679,7 @@ static char *print_number(char *buf,
|
||||
else if (base == 8)
|
||||
size--;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_SPECIAL */
|
||||
|
||||
i = 0;
|
||||
if (num == 0)
|
||||
@ -696,7 +696,7 @@ static char *print_number(char *buf,
|
||||
size -= precision;
|
||||
#else
|
||||
size -= i;
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
|
||||
if (!(type & (ZEROPAD | LEFT)))
|
||||
{
|
||||
@ -742,7 +742,7 @@ static char *print_number(char *buf,
|
||||
++ buf;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_SPECIAL */
|
||||
|
||||
/* no align to the left */
|
||||
if (!(type & LEFT))
|
||||
@ -762,7 +762,7 @@ static char *print_number(char *buf,
|
||||
*buf = '0';
|
||||
++ buf;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
|
||||
/* put number in the temporary buffer */
|
||||
while (i-- > 0 && (precision_bak != 0))
|
||||
@ -791,7 +791,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
unsigned long long num;
|
||||
#else
|
||||
rt_uint32_t num;
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
int i, len;
|
||||
char *str, *end, c;
|
||||
const char *s;
|
||||
@ -803,7 +803,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
|
||||
#ifdef RT_PRINTF_PRECISION
|
||||
int precision; /* min. # of digits for integers and max for a string */
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
|
||||
str = buf;
|
||||
end = buf + size;
|
||||
@ -870,14 +870,14 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
}
|
||||
if (precision < 0) precision = 0;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
/* get the conversion qualifier */
|
||||
qualifier = 0;
|
||||
#ifdef RT_PRINTF_LONGLONG
|
||||
if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L')
|
||||
#else
|
||||
if (*fmt == 'h' || *fmt == 'l')
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
{
|
||||
qualifier = *fmt;
|
||||
++ fmt;
|
||||
@ -887,7 +887,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
qualifier = 'L';
|
||||
++ fmt;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
}
|
||||
|
||||
/* the default base */
|
||||
@ -925,7 +925,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
for (len = 0; (len != field_width) && (s[len] != '\0'); len++);
|
||||
#ifdef RT_PRINTF_PRECISION
|
||||
if (precision > 0 && len > precision) len = precision;
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
|
||||
if (!(flags & LEFT))
|
||||
{
|
||||
@ -964,7 +964,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
str = print_number(str, end,
|
||||
(long)va_arg(args, void *),
|
||||
16, field_width, flags);
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
continue;
|
||||
|
||||
case '%':
|
||||
@ -1010,7 +1010,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
else if (qualifier == 'l')
|
||||
#else
|
||||
if (qualifier == 'l')
|
||||
#endif
|
||||
#endif /* RT_PRINTF_LONGLONG */
|
||||
{
|
||||
num = va_arg(args, rt_uint32_t);
|
||||
if (flags & SIGN) num = (rt_int32_t)num;
|
||||
@ -1029,7 +1029,7 @@ rt_int32_t rt_vsnprintf(char *buf,
|
||||
str = print_number(str, end, num, base, field_width, precision, flags);
|
||||
#else
|
||||
str = print_number(str, end, num, base, field_width, flags);
|
||||
#endif
|
||||
#endif /* RT_PRINTF_PRECISION */
|
||||
}
|
||||
|
||||
if (size > 0)
|
||||
@ -1152,7 +1152,7 @@ rt_device_t rt_console_set_device(const char *name)
|
||||
return old_device;
|
||||
}
|
||||
RTM_EXPORT(rt_console_set_device);
|
||||
#endif
|
||||
#endif /* RT_USING_DEVICE */
|
||||
|
||||
RT_WEAK void rt_hw_console_output(const char *str)
|
||||
{
|
||||
@ -1184,7 +1184,7 @@ void rt_kputs(const char *str)
|
||||
}
|
||||
#else
|
||||
rt_hw_console_output(str);
|
||||
#endif
|
||||
#endif /* RT_USING_DEVICE */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1222,11 +1222,11 @@ RT_WEAK void rt_kprintf(const char *fmt, ...)
|
||||
}
|
||||
#else
|
||||
rt_hw_console_output(rt_log_buf);
|
||||
#endif
|
||||
#endif /* RT_USING_DEVICE */
|
||||
va_end(args);
|
||||
}
|
||||
RTM_EXPORT(rt_kprintf);
|
||||
#endif
|
||||
#endif /* RT_USING_CONSOLE */
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
/**
|
||||
@ -1292,7 +1292,7 @@ RT_WEAK void rt_free_align(void *ptr)
|
||||
rt_free(real_ptr);
|
||||
}
|
||||
RTM_EXPORT(rt_free_align);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
#ifndef RT_USING_CPU_FFS
|
||||
const rt_uint8_t __lowest_bit_bitmap[] =
|
||||
@ -1340,7 +1340,7 @@ int __rt_ffs(int value)
|
||||
|
||||
return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_CPU_FFS */
|
||||
|
||||
#ifdef RT_DEBUG
|
||||
/* RT_ASSERT(EX)'s hook */
|
||||
@ -1377,7 +1377,7 @@ void rt_assert_handler(const char *ex_string, const char *func, rt_size_t line)
|
||||
dlmodule_exit(-1);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif /*RT_USING_MODULE*/
|
||||
{
|
||||
rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);
|
||||
while (dummy == 0);
|
||||
|
46
src/mem.c
46
src/mem.c
@ -52,7 +52,6 @@
|
||||
|
||||
#ifndef RT_USING_MEMHEAP_AS_HEAP
|
||||
|
||||
/* #define RT_MEM_DEBUG */
|
||||
#define RT_MEM_STATS
|
||||
|
||||
#if defined (RT_USING_HEAP) && defined (RT_USING_SMALL_MEM)
|
||||
@ -90,7 +89,7 @@ void rt_free_sethook(void (*hook)(void *ptr))
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
#define HEAP_MAGIC 0x1ea0
|
||||
struct heap_mem
|
||||
@ -100,7 +99,7 @@ struct heap_mem
|
||||
rt_uint16_t used;
|
||||
#ifdef ARCH_CPU_64BIT
|
||||
rt_uint32_t resv;
|
||||
#endif
|
||||
#endif /* ARCH_CPU_64BIT */
|
||||
|
||||
rt_size_t next, prev;
|
||||
|
||||
@ -109,8 +108,8 @@ struct heap_mem
|
||||
rt_uint8_t thread[8];
|
||||
#else
|
||||
rt_uint8_t thread[4]; /* thread name */
|
||||
#endif
|
||||
#endif
|
||||
#endif /* ARCH_CPU_64BIT */
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
};
|
||||
|
||||
/** pointer to the heap: for alignment, heap_ptr is now a pointer instead of an array */
|
||||
@ -123,7 +122,7 @@ static struct heap_mem *heap_end;
|
||||
#define MIN_SIZE 24
|
||||
#else
|
||||
#define MIN_SIZE 12
|
||||
#endif
|
||||
#endif /* ARCH_CPU_64BIT */
|
||||
|
||||
#define MIN_SIZE_ALIGNED RT_ALIGN(MIN_SIZE, RT_ALIGN_SIZE)
|
||||
#define SIZEOF_STRUCT_MEM RT_ALIGN(sizeof(struct heap_mem), RT_ALIGN_SIZE)
|
||||
@ -135,7 +134,8 @@ static rt_size_t mem_size_aligned;
|
||||
|
||||
#ifdef RT_MEM_STATS
|
||||
static rt_size_t used_mem, max_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_inline void rt_mem_setname(struct heap_mem *mem, const char *name)
|
||||
{
|
||||
@ -151,7 +151,7 @@ rt_inline void rt_mem_setname(struct heap_mem *mem, const char *name)
|
||||
mem->thread[index] = ' ';
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
static void plug_holes(struct heap_mem *mem)
|
||||
{
|
||||
@ -238,7 +238,7 @@ void rt_system_heap_init(void *begin_addr, void *end_addr)
|
||||
mem->used = 0;
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_mem_setname(mem, "INIT");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* initialize the end of the heap */
|
||||
heap_end = (struct heap_mem *)&heap_ptr[mem->next];
|
||||
@ -248,7 +248,7 @@ void rt_system_heap_init(void *begin_addr, void *end_addr)
|
||||
heap_end->prev = mem_size_aligned + SIZEOF_STRUCT_MEM;
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_mem_setname(heap_end, "INIT");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
rt_sem_init(&heap_sem, "heap", 1, RT_IPC_FLAG_PRIO);
|
||||
|
||||
@ -336,7 +336,7 @@ void *rt_malloc(rt_size_t size)
|
||||
mem2->prev = ptr;
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_mem_setname(mem2, " ");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* and insert it between mem and mem->next */
|
||||
mem->next = ptr2;
|
||||
@ -350,7 +350,7 @@ void *rt_malloc(rt_size_t size)
|
||||
used_mem += (size + SIZEOF_STRUCT_MEM);
|
||||
if (max_mem < used_mem)
|
||||
max_mem = used_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -366,7 +366,7 @@ void *rt_malloc(rt_size_t size)
|
||||
used_mem += mem->next - ((rt_uint8_t *)mem - heap_ptr);
|
||||
if (max_mem < used_mem)
|
||||
max_mem = used_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
}
|
||||
/* set memory block magic */
|
||||
mem->magic = HEAP_MAGIC;
|
||||
@ -375,7 +375,7 @@ void *rt_malloc(rt_size_t size)
|
||||
rt_mem_setname(mem, rt_thread_self()->name);
|
||||
else
|
||||
rt_mem_setname(mem, "NONE");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
if (mem == lfree)
|
||||
{
|
||||
@ -473,7 +473,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize)
|
||||
/* split memory block */
|
||||
#ifdef RT_MEM_STATS
|
||||
used_mem -= (size - newsize);
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;
|
||||
mem2 = (struct heap_mem *)&heap_ptr[ptr2];
|
||||
@ -483,7 +483,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize)
|
||||
mem2->prev = ptr;
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_mem_setname(mem2, " ");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
mem->next = ptr2;
|
||||
if (mem2->next != mem_size_aligned + SIZEOF_STRUCT_MEM)
|
||||
{
|
||||
@ -597,7 +597,7 @@ void rt_free(void *rmem)
|
||||
mem->magic = HEAP_MAGIC;
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_mem_setname(mem, " ");
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
if (mem < lfree)
|
||||
{
|
||||
@ -607,7 +607,7 @@ void rt_free(void *rmem)
|
||||
|
||||
#ifdef RT_MEM_STATS
|
||||
used_mem -= (mem->next - ((rt_uint8_t *)mem - heap_ptr));
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
/* finally, see if prev or next are free also */
|
||||
plug_holes(mem);
|
||||
@ -706,12 +706,12 @@ int memtrace(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
MSH_CMD_EXPORT(memtrace, dump memory trace information);
|
||||
#endif /* end of RT_USING_MEMTRACE */
|
||||
#endif /* end of RT_USING_FINSH */
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
#endif /* RT_USING_FINSH */
|
||||
|
||||
#endif
|
||||
#endif /* defined (RT_USING_HEAP) && defined (RT_USING_SMALL_MEM) */
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif /* end of RT_USING_HEAP */
|
||||
#endif /* end of RT_USING_MEMHEAP_AS_HEAP */
|
||||
#endif /* RT_MEM_STATS */
|
||||
#endif /* RT_USING_MEMHEAP_AS_HEAP */
|
||||
|
@ -74,7 +74,7 @@ void rt_mem_set_tag(void *ptr, const char *name)
|
||||
rt_memheap_setname(item, name);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/*
|
||||
* The initialized memory pool will be:
|
||||
@ -127,7 +127,7 @@ rt_err_t rt_memheap_init(struct rt_memheap *memheap,
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_memset(item->owner_thread_name, ' ', sizeof(item->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
item->next = (struct rt_memheap_item *)
|
||||
((rt_uint8_t *)item + memheap->available_size + RT_MEMHEAP_SIZE);
|
||||
@ -252,7 +252,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size)
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_memset(new_ptr->owner_thread_name, ' ', sizeof(new_ptr->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* break down the block list */
|
||||
new_ptr->prev = header_ptr;
|
||||
@ -310,7 +310,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size)
|
||||
rt_memcpy(header_ptr->owner_thread_name, rt_thread_self()->name, sizeof(header_ptr->owner_thread_name));
|
||||
else
|
||||
rt_memcpy(header_ptr->owner_thread_name, "NONE", sizeof(header_ptr->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* release lock */
|
||||
rt_sem_release(&(heap->lock));
|
||||
@ -439,7 +439,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_memset(next_ptr->owner_thread_name, ' ', sizeof(next_ptr->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
next_ptr->prev = header_ptr;
|
||||
next_ptr->next = header_ptr->next;
|
||||
@ -507,7 +507,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_memset(new_ptr->owner_thread_name, ' ', sizeof(new_ptr->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* break down the block list */
|
||||
new_ptr->prev = header_ptr;
|
||||
@ -660,7 +660,7 @@ void rt_memheap_free(void *ptr)
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
rt_memset(header_ptr->owner_thread_name, ' ', sizeof(header_ptr->owner_thread_name));
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
/* release lock */
|
||||
rt_sem_release(&(heap->lock));
|
||||
@ -750,7 +750,7 @@ int memheaptrace(void)
|
||||
return 0;
|
||||
}
|
||||
MSH_CMD_EXPORT(memheaptrace, dump memory trace information);
|
||||
#endif
|
||||
#endif /* RT_USING_FINSH */
|
||||
|
||||
#ifdef RT_USING_MEMHEAP_AS_HEAP
|
||||
static struct rt_memheap _heap;
|
||||
@ -818,7 +818,7 @@ void *rt_malloc(rt_size_t size)
|
||||
|
||||
RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("malloc => 0x%08x : %d", ptr, size));
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@ -884,7 +884,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize)
|
||||
RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("realloc => 0x%08x : %d",
|
||||
new_ptr, newsize));
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
return new_ptr;
|
||||
}
|
||||
@ -914,7 +914,7 @@ void *rt_calloc(rt_size_t count, rt_size_t size)
|
||||
RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("calloc => 0x%08x : %d",
|
||||
ptr, count * size));
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@ -934,7 +934,7 @@ void rt_memory_info(rt_uint32_t *total,
|
||||
*max_used = _heap.max_used_size;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* RT_USING_MEMHEAP_AS_HEAP */
|
||||
|
||||
#ifdef RT_USING_MEMTRACE
|
||||
|
||||
@ -1006,8 +1006,8 @@ void memtrace_heap()
|
||||
#ifdef RT_USING_FINSH
|
||||
#include <finsh.h>
|
||||
MSH_CMD_EXPORT(memtrace_heap, dump memory trace for heap);
|
||||
#endif /* end of RT_USING_FINSH */
|
||||
#endif /* RT_USING_FINSH */
|
||||
|
||||
#endif /* end of RT_USING_MEMTRACE */
|
||||
#endif /* RT_USING_MEMTRACE */
|
||||
|
||||
#endif /* end of RT_USING_MEMHEAP */
|
||||
#endif /* RT_USING_MEMHEAP */
|
||||
|
@ -54,7 +54,7 @@ void rt_mp_free_sethook(void (*hook)(struct rt_mempool *mp, void *block))
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/**
|
||||
* @addtogroup MM
|
||||
@ -290,7 +290,7 @@ rt_err_t rt_mp_delete(rt_mp_t mp)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_mp_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will allocate a block from memory pool
|
||||
@ -451,5 +451,4 @@ RTM_EXPORT(rt_mp_free);
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* RT_USING_MEMPOOL */
|
||||
|
14
src/object.c
14
src/object.c
@ -20,7 +20,7 @@
|
||||
|
||||
#ifdef RT_USING_MODULE
|
||||
#include <dlmodule.h>
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
|
||||
/*
|
||||
* define object_info for the number of rt_object_container items.
|
||||
@ -189,7 +189,7 @@ void rt_object_put_sethook(void (*hook)(struct rt_object *object))
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/**
|
||||
* @addtogroup KernelObject
|
||||
@ -305,7 +305,7 @@ void rt_object_init(struct rt_object *object,
|
||||
struct rt_object_information *information;
|
||||
#ifdef RT_USING_MODULE
|
||||
struct rt_dlmodule *module = dlmodule_self();
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
|
||||
/* get object information */
|
||||
information = rt_object_get_information(type);
|
||||
@ -349,7 +349,7 @@ void rt_object_init(struct rt_object *object,
|
||||
object->module_id = (void *)module;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
{
|
||||
/* insert object into information object list */
|
||||
rt_list_insert_after(&(information->object_list), &(object->list));
|
||||
@ -403,7 +403,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name)
|
||||
struct rt_object_information *information;
|
||||
#ifdef RT_USING_MODULE
|
||||
struct rt_dlmodule *module = dlmodule_self();
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
|
||||
RT_DEBUG_NOT_IN_INTERRUPT;
|
||||
|
||||
@ -444,7 +444,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name)
|
||||
object->module_id = (void *)module;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
{
|
||||
/* insert object into information object list */
|
||||
rt_list_insert_after(&(information->object_list), &(object->list));
|
||||
@ -487,7 +487,7 @@ void rt_object_delete(rt_object_t object)
|
||||
/* free the memory of object */
|
||||
RT_KERNEL_FREE(object);
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will judge the object is system object or not.
|
||||
|
@ -38,14 +38,14 @@ rt_uint32_t rt_thread_ready_priority_group;
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
/* Maximum priority level, 256 */
|
||||
rt_uint8_t rt_thread_ready_table[32];
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
#ifndef RT_USING_SMP
|
||||
extern volatile rt_uint8_t rt_interrupt_nest;
|
||||
static rt_int16_t rt_scheduler_lock_nest;
|
||||
struct rt_thread *rt_current_thread = RT_NULL;
|
||||
rt_uint8_t rt_current_priority;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
rt_list_t rt_thread_defunct;
|
||||
|
||||
@ -71,18 +71,18 @@ rt_scheduler_sethook(void (*hook)(struct rt_thread *from, struct rt_thread *to))
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
#ifdef RT_USING_OVERFLOW_CHECK
|
||||
static void _rt_scheduler_stack_check(struct rt_thread *thread)
|
||||
{
|
||||
RT_ASSERT(thread != RT_NULL);
|
||||
|
||||
#if defined(ARCH_CPU_STACK_GROWS_UPWARD)
|
||||
#ifdef ARCH_CPU_STACK_GROWS_UPWARD
|
||||
if (*((rt_uint8_t *)((rt_ubase_t)thread->stack_addr + thread->stack_size - 1)) != '#' ||
|
||||
#else
|
||||
if (*((rt_uint8_t *)thread->stack_addr) != '#' ||
|
||||
#endif
|
||||
#endif /* ARCH_CPU_STACK_GROWS_UPWARD */
|
||||
(rt_ubase_t)thread->sp <= (rt_ubase_t)thread->stack_addr ||
|
||||
(rt_ubase_t)thread->sp >
|
||||
(rt_ubase_t)thread->stack_addr + (rt_ubase_t)thread->stack_size)
|
||||
@ -94,7 +94,7 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
|
||||
level = rt_hw_interrupt_disable();
|
||||
while (level);
|
||||
}
|
||||
#if defined(ARCH_CPU_STACK_GROWS_UPWARD)
|
||||
#ifdef ARCH_CPU_STACK_GROWS_UPWARD
|
||||
else if ((rt_ubase_t)thread->sp > ((rt_ubase_t)thread->stack_addr + thread->stack_size))
|
||||
{
|
||||
rt_kprintf("warning: %s stack is close to the top of stack address.\n",
|
||||
@ -106,9 +106,9 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
|
||||
rt_kprintf("warning: %s stack is close to end of stack address.\n",
|
||||
thread->name);
|
||||
}
|
||||
#endif
|
||||
#endif /* ARCH_CPU_STACK_GROWS_UPWARD */
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_OVERFLOW_CHECK */
|
||||
|
||||
/*
|
||||
* get the highest priority thread in ready queue
|
||||
@ -129,7 +129,7 @@ static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
#else
|
||||
highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1;
|
||||
local_highest_ready_priority = __rt_ffs(pcpu->priority_group) - 1;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
/* get highest ready priority thread */
|
||||
if (highest_ready_priority < local_highest_ready_priority)
|
||||
@ -162,7 +162,7 @@ static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
highest_ready_priority = (number << 3) + __rt_ffs(rt_thread_ready_table[number]) - 1;
|
||||
#else
|
||||
highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
/* get highest ready priority thread */
|
||||
highest_priority_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next,
|
||||
@ -173,7 +173,7 @@ static struct rt_thread* _get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||
|
||||
return highest_priority_thread;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/**
|
||||
* @ingroup SystemInit
|
||||
@ -183,12 +183,12 @@ void rt_system_scheduler_init(void)
|
||||
{
|
||||
#ifdef RT_USING_SMP
|
||||
int cpu;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
register rt_base_t offset;
|
||||
|
||||
#ifndef RT_USING_SMP
|
||||
rt_scheduler_lock_nest = 0;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("start scheduler: max priority 0x%02x\n",
|
||||
RT_THREAD_PRIORITY_MAX));
|
||||
@ -213,9 +213,9 @@ void rt_system_scheduler_init(void)
|
||||
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
rt_memset(pcpu->ready_table, 0, sizeof(pcpu->ready_table));
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/* initialize ready priority group */
|
||||
rt_thread_ready_priority_group = 0;
|
||||
@ -223,7 +223,7 @@ void rt_system_scheduler_init(void)
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
/* initialize ready table */
|
||||
rt_memset(rt_thread_ready_table, 0, sizeof(rt_thread_ready_table));
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
/* initialize thread defunct */
|
||||
rt_list_init(&rt_thread_defunct);
|
||||
@ -245,7 +245,7 @@ void rt_system_scheduler_start(void)
|
||||
to_thread->oncpu = rt_hw_cpu_id();
|
||||
#else
|
||||
rt_current_thread = to_thread;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
rt_schedule_remove_thread(to_thread);
|
||||
to_thread->stat = RT_THREAD_RUNNING;
|
||||
@ -255,7 +255,7 @@ void rt_system_scheduler_start(void)
|
||||
rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp, to_thread);
|
||||
#else
|
||||
rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp);
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/* never come back */
|
||||
}
|
||||
@ -319,7 +319,7 @@ void rt_schedule(void)
|
||||
rt_thread_resume(current_thread);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
||||
if (current_thread->scheduler_lock_nest == 1) /* whether lock scheduler */
|
||||
{
|
||||
@ -367,7 +367,7 @@ void rt_schedule(void)
|
||||
|
||||
#ifdef RT_USING_OVERFLOW_CHECK
|
||||
_rt_scheduler_stack_check(to_thread);
|
||||
#endif
|
||||
#endif /* RT_USING_OVERFLOW_CHECK */
|
||||
|
||||
rt_hw_context_switch((rt_ubase_t)¤t_thread->sp,
|
||||
(rt_ubase_t)&to_thread->sp, to_thread);
|
||||
@ -396,7 +396,7 @@ void rt_schedule(void)
|
||||
{
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
||||
__exit:
|
||||
return ;
|
||||
@ -472,7 +472,7 @@ void rt_schedule(void)
|
||||
|
||||
#ifdef RT_USING_OVERFLOW_CHECK
|
||||
_rt_scheduler_stack_check(to_thread);
|
||||
#endif
|
||||
#endif /* RT_USING_OVERFLOW_CHECK */
|
||||
|
||||
if (rt_interrupt_nest == 0)
|
||||
{
|
||||
@ -502,7 +502,7 @@ void rt_schedule(void)
|
||||
{
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
goto __exit;
|
||||
}
|
||||
else
|
||||
@ -527,7 +527,7 @@ void rt_schedule(void)
|
||||
__exit:
|
||||
return;
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/**
|
||||
* This function checks if a scheduling is needed after IRQ context. If yes,
|
||||
@ -559,7 +559,7 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||
rt_thread_resume(current_thread);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
||||
if (pcpu->irq_switch_flag == 0)
|
||||
{
|
||||
@ -608,7 +608,7 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||
|
||||
#ifdef RT_USING_OVERFLOW_CHECK
|
||||
_rt_scheduler_stack_check(to_thread);
|
||||
#endif
|
||||
#endif /* RT_USING_OVERFLOW_CHECK */
|
||||
RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("switch in interrupt\n"));
|
||||
|
||||
current_thread->cpus_lock_nest--;
|
||||
@ -621,7 +621,7 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||
}
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/*
|
||||
* This function will insert a thread to system ready queue. The state of
|
||||
@ -661,7 +661,7 @@ void rt_schedule_insert_thread(struct rt_thread *thread)
|
||||
{
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
rt_thread_ready_table[thread->number] |= thread->high_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
rt_thread_ready_priority_group |= thread->number_mask;
|
||||
|
||||
rt_list_insert_before(&(rt_thread_priority_table[thread->current_priority]),
|
||||
@ -675,7 +675,7 @@ void rt_schedule_insert_thread(struct rt_thread *thread)
|
||||
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
pcpu->ready_table[thread->number] |= thread->high_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
pcpu->priority_group |= thread->number_mask;
|
||||
|
||||
rt_list_insert_before(&(rt_cpu_index(bind_cpu)->priority_table[thread->current_priority]),
|
||||
@ -724,14 +724,14 @@ void rt_schedule_insert_thread(struct rt_thread *thread)
|
||||
/* set priority mask */
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
rt_thread_ready_table[thread->number] |= thread->high_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
rt_thread_ready_priority_group |= thread->number_mask;
|
||||
|
||||
__exit:
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(temp);
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/*
|
||||
* This function will remove a thread from system ready queue.
|
||||
@ -768,7 +768,7 @@ void rt_schedule_remove_thread(struct rt_thread *thread)
|
||||
}
|
||||
#else
|
||||
rt_thread_ready_priority_group &= ~thread->number_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -785,7 +785,7 @@ void rt_schedule_remove_thread(struct rt_thread *thread)
|
||||
}
|
||||
#else
|
||||
pcpu->priority_group &= ~thread->number_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
}
|
||||
}
|
||||
|
||||
@ -818,13 +818,13 @@ void rt_schedule_remove_thread(struct rt_thread *thread)
|
||||
}
|
||||
#else
|
||||
rt_thread_ready_priority_group &= ~thread->number_mask;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
}
|
||||
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/**
|
||||
* This function will lock the thread scheduler.
|
||||
@ -885,7 +885,7 @@ void rt_enter_critical(void)
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
RTM_EXPORT(rt_enter_critical);
|
||||
|
||||
/**
|
||||
@ -959,7 +959,7 @@ void rt_exit_critical(void)
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
RTM_EXPORT(rt_exit_critical);
|
||||
|
||||
/**
|
||||
@ -975,7 +975,7 @@ rt_uint16_t rt_critical_level(void)
|
||||
return current_thread->critical_lock_nest;
|
||||
#else
|
||||
return rt_scheduler_lock_nest;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
}
|
||||
RTM_EXPORT(rt_critical_level);
|
||||
|
||||
|
12
src/signal.c
12
src/signal.c
@ -20,7 +20,7 @@
|
||||
|
||||
#ifndef RT_SIG_INFO_MAX
|
||||
#define RT_SIG_INFO_MAX 32
|
||||
#endif
|
||||
#endif /* RT_SIG_INFO_MAX */
|
||||
|
||||
#define DBG_TAG "SIGN"
|
||||
#define DBG_LVL DBG_WARNING
|
||||
@ -67,7 +67,7 @@ static void _signal_entry(void *parameter)
|
||||
/* return to thread */
|
||||
tid->sp = tid->sig_ret;
|
||||
tid->sig_ret = RT_NULL;
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
LOG_D("switch back to: 0x%08x\n", tid->sp);
|
||||
tid->stat &= ~RT_THREAD_STAT_SIGNAL;
|
||||
@ -76,7 +76,7 @@ static void _signal_entry(void *parameter)
|
||||
rt_hw_context_switch_to((rt_base_t)¶meter, tid);
|
||||
#else
|
||||
rt_hw_context_switch_to((rt_ubase_t)&(tid->sp));
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
}
|
||||
|
||||
/*
|
||||
@ -153,7 +153,7 @@ static void _signal_deliver(rt_thread_t tid)
|
||||
tid->sig_ret = tid->sp;
|
||||
tid->sp = rt_hw_stack_init((void *)_signal_entry, RT_NULL,
|
||||
(void *)((char *)tid->sig_ret - 32), RT_NULL);
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
rt_hw_interrupt_enable(level);
|
||||
LOG_D("signal stack pointer @ 0x%08x", tid->sp);
|
||||
@ -204,7 +204,7 @@ void *rt_signal_check(void* context)
|
||||
rt_hw_interrupt_enable(level);
|
||||
return context;
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t handler)
|
||||
{
|
||||
@ -586,4 +586,4 @@ int rt_system_signal_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
22
src/slab.c
22
src/slab.c
@ -61,7 +61,7 @@
|
||||
/* some statistical variable */
|
||||
#ifdef RT_MEM_STATS
|
||||
static rt_size_t used_mem, max_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
#ifdef RT_USING_HOOK
|
||||
static void (*rt_malloc_hook)(void *ptr, rt_size_t size);
|
||||
@ -99,7 +99,7 @@ RTM_EXPORT(rt_free_sethook);
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/*
|
||||
* slab allocator implementation
|
||||
@ -516,7 +516,7 @@ void *rt_malloc(rt_size_t size)
|
||||
used_mem += size;
|
||||
if (used_mem > max_mem)
|
||||
max_mem = used_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -571,7 +571,7 @@ void *rt_malloc(rt_size_t size)
|
||||
used_mem += z->z_chunksize;
|
||||
if (used_mem > max_mem)
|
||||
max_mem = used_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
goto done;
|
||||
}
|
||||
@ -655,7 +655,7 @@ void *rt_malloc(rt_size_t size)
|
||||
used_mem += z->z_chunksize;
|
||||
if (used_mem > max_mem)
|
||||
max_mem = used_mem;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
}
|
||||
|
||||
done:
|
||||
@ -790,7 +790,7 @@ void rt_free(void *ptr)
|
||||
(rt_ubase_t)addr,
|
||||
((rt_ubase_t)(addr) - heap_start) >> RT_MM_PAGE_BITS));
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_DEBUG_SLAB */
|
||||
|
||||
kup = btokup((rt_ubase_t)ptr & ~RT_MM_PAGE_MASK);
|
||||
/* release large allocation */
|
||||
@ -806,7 +806,7 @@ void rt_free(void *ptr)
|
||||
|
||||
#ifdef RT_MEM_STATS
|
||||
used_mem -= size * RT_MM_PAGE_SIZE;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
rt_sem_release(&heap_sem);
|
||||
|
||||
RT_DEBUG_LOG(RT_DEBUG_SLAB,
|
||||
@ -833,7 +833,7 @@ void rt_free(void *ptr)
|
||||
|
||||
#ifdef RT_MEM_STATS
|
||||
used_mem -= z->z_chunksize;
|
||||
#endif
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
/*
|
||||
* Bump the number of free chunks. If it becomes non-zero the zone
|
||||
@ -929,9 +929,9 @@ void list_mem(void)
|
||||
rt_kprintf("maximum allocated memory: %d\n", max_mem);
|
||||
}
|
||||
FINSH_FUNCTION_EXPORT(list_mem, list memory usage information)
|
||||
#endif
|
||||
#endif
|
||||
#endif /* RT_USING_FINSH */
|
||||
#endif /* RT_MEM_STATS */
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif
|
||||
#endif /* defined (RT_USING_HEAP) && defined (RT_USING_SLAB) */
|
||||
|
34
src/thread.c
34
src/thread.c
@ -76,7 +76,7 @@ void rt_thread_inited_sethook(void (*hook)(rt_thread_t thread))
|
||||
rt_thread_inited_hook = hook;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
/* must be invoke witch rt_hw_interrupt_disable */
|
||||
static void _rt_thread_cleanup_execute(rt_thread_t thread)
|
||||
@ -84,7 +84,7 @@ static void _rt_thread_cleanup_execute(rt_thread_t thread)
|
||||
register rt_base_t level;
|
||||
#ifdef RT_USING_MODULE
|
||||
struct rt_dlmodule *module = RT_NULL;
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
level = rt_hw_interrupt_disable();
|
||||
#ifdef RT_USING_MODULE
|
||||
module = (struct rt_dlmodule*)thread->module_id;
|
||||
@ -92,14 +92,14 @@ static void _rt_thread_cleanup_execute(rt_thread_t thread)
|
||||
{
|
||||
dlmodule_destroy(module);
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_MODULE */
|
||||
/* invoke thread cleanup */
|
||||
if (thread->cleanup != RT_NULL)
|
||||
thread->cleanup(thread);
|
||||
|
||||
#ifdef RT_USING_SIGNALS
|
||||
rt_thread_free_sig(thread);
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
rt_hw_interrupt_enable(level);
|
||||
}
|
||||
|
||||
@ -170,7 +170,7 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
|
||||
thread->sp = (void *)rt_hw_stack_init(thread->entry, thread->parameter,
|
||||
(rt_uint8_t *)((char *)thread->stack_addr + thread->stack_size - sizeof(rt_ubase_t)),
|
||||
(void *)_rt_thread_exit);
|
||||
#endif
|
||||
#endif /* ARCH_CPU_STACK_GROWS_UPWARD */
|
||||
|
||||
/* priority init */
|
||||
RT_ASSERT(priority < RT_THREAD_PRIORITY_MAX);
|
||||
@ -181,7 +181,7 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
|
||||
#if RT_THREAD_PRIORITY_MAX > 32
|
||||
thread->number = 0;
|
||||
thread->high_mask = 0;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
/* tick init */
|
||||
thread->init_tick = tick;
|
||||
@ -200,7 +200,7 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
|
||||
thread->scheduler_lock_nest = 0;
|
||||
thread->cpus_lock_nest = 0;
|
||||
thread->critical_lock_nest = 0;
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
/* initialize cleanup function and user data */
|
||||
thread->cleanup = 0;
|
||||
@ -221,14 +221,14 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
|
||||
|
||||
#ifndef RT_USING_SMP
|
||||
thread->sig_ret = RT_NULL;
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
thread->sig_vectors = RT_NULL;
|
||||
thread->si_list = RT_NULL;
|
||||
#endif
|
||||
#endif /* RT_USING_SIGNALS */
|
||||
|
||||
#ifdef RT_USING_LWP
|
||||
thread->lwp = RT_NULL;
|
||||
#endif
|
||||
#endif /* RT_USING_LWP */
|
||||
|
||||
RT_OBJECT_HOOK_CALL(rt_thread_inited_hook, (thread));
|
||||
|
||||
@ -302,7 +302,7 @@ rt_thread_t rt_thread_self(void)
|
||||
extern rt_thread_t rt_current_thread;
|
||||
|
||||
return rt_current_thread;
|
||||
#endif
|
||||
#endif /* RT_USING_SMP */
|
||||
}
|
||||
RTM_EXPORT(rt_thread_self);
|
||||
|
||||
@ -330,7 +330,7 @@ rt_err_t rt_thread_startup(rt_thread_t thread)
|
||||
thread->high_mask = 1L << (thread->current_priority & 0x07); /* 3bit */
|
||||
#else
|
||||
thread->number_mask = 1L << thread->current_priority;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
RT_DEBUG_LOG(RT_DEBUG_THREAD, ("startup a thread:%s with priority:%d\n",
|
||||
thread->name, thread->init_priority));
|
||||
@ -492,7 +492,7 @@ rt_err_t rt_thread_delete(rt_thread_t thread)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_thread_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will let current thread yield processor, and scheduler will
|
||||
@ -690,7 +690,7 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
|
||||
thread->high_mask = 1 << (thread->current_priority & 0x07); /* 3bit */
|
||||
#else
|
||||
thread->number_mask = 1 << thread->current_priority;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
|
||||
/* insert thread to schedule queue again */
|
||||
rt_schedule_insert_thread(thread);
|
||||
@ -706,7 +706,7 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
|
||||
thread->high_mask = 1 << (thread->current_priority & 0x07); /* 3bit */
|
||||
#else
|
||||
thread->number_mask = 1 << thread->current_priority;
|
||||
#endif
|
||||
#endif /* RT_THREAD_PRIORITY_MAX > 32 */
|
||||
}
|
||||
|
||||
/* enable interrupt */
|
||||
@ -732,7 +732,7 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
|
||||
{
|
||||
rt_err = rt_thread_delete(thread);
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
rt_schedule();
|
||||
return rt_err;
|
||||
}
|
||||
@ -752,7 +752,7 @@ rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
|
||||
thread->bind_cpu = cpu > RT_CPUS_NR? RT_CPUS_NR : cpu;
|
||||
break;
|
||||
}
|
||||
#endif /*RT_USING_SMP*/
|
||||
#endif /* RT_USING_SMP */
|
||||
|
||||
default:
|
||||
break;
|
||||
|
20
src/timer.c
20
src/timer.c
@ -31,11 +31,11 @@ static rt_list_t rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL];
|
||||
|
||||
#ifndef RT_TIMER_THREAD_STACK_SIZE
|
||||
#define RT_TIMER_THREAD_STACK_SIZE 512
|
||||
#endif
|
||||
#endif /* RT_TIMER_THREAD_STACK_SIZE */
|
||||
|
||||
#ifndef RT_TIMER_THREAD_PRIO
|
||||
#define RT_TIMER_THREAD_PRIO 0
|
||||
#endif
|
||||
#endif /* RT_TIMER_THREAD_PRIO */
|
||||
|
||||
/* soft timer status */
|
||||
static rt_uint8_t soft_timer_status = RT_SOFT_TIMER_IDLE;
|
||||
@ -44,7 +44,7 @@ static rt_list_t rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL];
|
||||
static struct rt_thread timer_thread;
|
||||
ALIGN(RT_ALIGN_SIZE)
|
||||
static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE];
|
||||
#endif
|
||||
#endif /* RT_USING_TIMER_SOFT */
|
||||
|
||||
#ifdef RT_USING_HOOK
|
||||
extern void (*rt_object_take_hook)(struct rt_object *object);
|
||||
@ -81,7 +81,7 @@ void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer))
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
#endif
|
||||
#endif /* RT_USING_HOOK */
|
||||
|
||||
static void _rt_timer_init(rt_timer_t timer,
|
||||
void (*timeout)(void *parameter),
|
||||
@ -171,7 +171,7 @@ void rt_timer_dump(rt_list_t timer_heads[])
|
||||
}
|
||||
rt_kprintf("\n");
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_DEBUG_TIMER */
|
||||
|
||||
/**
|
||||
* @addtogroup Clock
|
||||
@ -303,7 +303,7 @@ rt_err_t rt_timer_delete(rt_timer_t timer)
|
||||
return RT_EOK;
|
||||
}
|
||||
RTM_EXPORT(rt_timer_delete);
|
||||
#endif
|
||||
#endif /* RT_USING_HEAP */
|
||||
|
||||
/**
|
||||
* This function will start the timer
|
||||
@ -348,7 +348,7 @@ rt_err_t rt_timer_start(rt_timer_t timer)
|
||||
timer_list = rt_soft_timer_list;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif /* RT_USING_TIMER_SOFT */
|
||||
{
|
||||
/* insert timer to system timer list */
|
||||
timer_list = rt_timer_list;
|
||||
@ -422,7 +422,7 @@ rt_err_t rt_timer_start(rt_timer_t timer)
|
||||
rt_schedule();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_TIMER_SOFT */
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
@ -718,7 +718,7 @@ static void rt_thread_timer_entry(void *parameter)
|
||||
rt_soft_timer_check();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* RT_USING_TIMER_SOFT */
|
||||
|
||||
/**
|
||||
* @ingroup SystemInit
|
||||
@ -764,7 +764,7 @@ void rt_system_timer_thread_init(void)
|
||||
|
||||
/* startup */
|
||||
rt_thread_startup(&timer_thread);
|
||||
#endif
|
||||
#endif /* RT_USING_TIMER_SOFT */
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user