提交 ee689885 编写于 作者: B bernard.xiong@gmail.com

change the RT_DEBUG_NOT_REENT to RT_DEBUG_NOT_IN_INTERRUPT.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1503 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 99dc4465
...@@ -39,9 +39,9 @@ ...@@ -39,9 +39,9 @@
#define RT_DEBUG_IPC 0 #define RT_DEBUG_IPC 0
#endif #endif
/* Turn on this to enable reentrance check */ /* Turn on this to enable context check */
#ifndef RT_DEBUG_REENT_CHK #ifndef RT_DEBUG_CONTEXT_CHECK
#define RT_DEBUG_REENT_CHK 1 #define RT_DEBUG_CONTEXT_CHECK 1
#endif #endif
#define RT_DEBUG_LOG(type,message) do{ if(type) rt_kprintf message;}while(0) #define RT_DEBUG_LOG(type,message) do{ if(type) rt_kprintf message;}while(0)
...@@ -50,39 +50,21 @@ ...@@ -50,39 +50,21 @@
rt_kprintf("(%s) assert failed at %s:%d \n", \ rt_kprintf("(%s) assert failed at %s:%d \n", \
#EX, __FUNCTION__, __LINE__); while (dummy==0);} #EX, __FUNCTION__, __LINE__); while (dummy==0);}
/* Reentrance check */ /* Macro to check current context */
/* counter */ #if RT_DEBUG_CONTEXT_CHECK
extern rt_uint8_t rt_debug_reent_cnt; #define RT_DEBUG_NOT_IN_INTERRUPT do {\
#define RT_DEBUG_REENT_IN if(RT_DEBUG_REENT_CHK){\
rt_base_t level;\
level = rt_hw_interrupt_disable();\
rt_debug_reent_cnt++;\
rt_hw_interrupt_enable(level);}
#define RT_DEBUG_REENT_OUT if(RT_DEBUG_REENT_CHK){\
rt_base_t level;\
level = rt_hw_interrupt_disable();\
rt_debug_reent_cnt--;\
rt_hw_interrupt_enable(level);}
/* Mark those non-reentrant functions with this macro */
#define RT_DEBUG_NOT_REENT if(RT_DEBUG_REENT_CHK){\
rt_base_t level;\ rt_base_t level;\
level = rt_hw_interrupt_disable();\ level = rt_hw_interrupt_disable();\
if(rt_debug_reent_cnt != 0){\ if(rt_interrupt_get_nest() != 0){\
rt_kprintf("Non-reentrant function used in critical area!\n");\ rt_kprintf("Function[%s] shall not used in ISR\n", __FUNCTION__);\
RT_ASSERT(0)}\ RT_ASSERT(0)}\
rt_hw_interrupt_enable(level);} rt_hw_interrupt_enable(level);} while (0)
#endif
#else /* RT_DEBUG */ #else /* RT_DEBUG */
#define RT_ASSERT(EX) #define RT_ASSERT(EX)
#define RT_DEBUG_LOG(type,message) #define RT_DEBUG_LOG(type,message)
#define RT_DEBUG_REENT_IN #define RT_DEBUG_NOT_IN_INTERRUPT
#define RT_DEBUG_REENT_OUT
#define RT_DEBUG_NOT_REENT
#endif /* RT_DEBUG */ #endif /* RT_DEBUG */
......
...@@ -264,6 +264,17 @@ struct rt_object_information ...@@ -264,6 +264,17 @@ struct rt_object_information
rt_list_t object_list; /**< object list */ rt_list_t object_list; /**< object list */
rt_size_t object_size; /**< object size */ rt_size_t object_size; /**< object size */
}; };
/**
* The hook function call macro
*/
#ifdef RT_USING_HOOK
#define RT_OBJECT_HOOK_CALL(func, argv) \
do { if ((func) != RT_NULL) func argv; } while (0)
#else
#define RT_OBJECT_HOOK_CALL(func, argv)
#endif
/*@}*/ /*@}*/
/** /**
......
...@@ -36,6 +36,7 @@ extern "C" { ...@@ -36,6 +36,7 @@ extern "C" {
*/ */
void rt_system_object_init(void); void rt_system_object_init(void);
struct rt_object_information *rt_object_get_information(enum rt_object_class_type type);
void rt_object_init(struct rt_object* object, enum rt_object_class_type type, const char* name); void rt_object_init(struct rt_object* object, enum rt_object_class_type type, const char* name);
void rt_object_detach(rt_object_t object); void rt_object_detach(rt_object_t object);
rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name); rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name);
...@@ -49,24 +50,6 @@ void rt_object_detach_sethook(void (*hook)(struct rt_object* object)); ...@@ -49,24 +50,6 @@ void rt_object_detach_sethook(void (*hook)(struct rt_object* object));
void rt_object_trytake_sethook(void (*hook)(struct rt_object* object)); void rt_object_trytake_sethook(void (*hook)(struct rt_object* object));
void rt_object_take_sethook(void (*hook)(struct rt_object* object)); void rt_object_take_sethook(void (*hook)(struct rt_object* object));
void rt_object_put_sethook(void (*hook)(struct rt_object* object)); void rt_object_put_sethook(void (*hook)(struct rt_object* object));
#define RT_OBJECT_HOOK_CALL(hookfunc)\
do{\
register rt_base_t temp;\
temp = rt_hw_interrupt_disable();\
RT_DEBUG_REENT_IN\
if (hookfunc != RT_NULL) hookfunc();\
RT_DEBUG_REENT_OUT\
rt_hw_interrupt_enable(temp);\
}while(0)
#define RT_OBJECT_HOOK_CALL2(hookfunc,...)\
do{\
register rt_base_t temp;\
temp = rt_hw_interrupt_disable();\
RT_DEBUG_REENT_IN\
if (hookfunc != RT_NULL) hookfunc(__VA_ARGS__);\
RT_DEBUG_REENT_OUT\
rt_hw_interrupt_enable(temp);\
}while(0)
#endif #endif
/*@}*/ /*@}*/
...@@ -346,6 +329,10 @@ typedef void (*rt_isr_handler_t)(int vector); ...@@ -346,6 +329,10 @@ typedef void (*rt_isr_handler_t)(int vector);
*/ */
void rt_interrupt_enter(void); void rt_interrupt_enter(void);
void rt_interrupt_leave(void); void rt_interrupt_leave(void);
/*
* the number of nested interrupts.
*/
rt_uint8_t rt_interrupt_get_nest(void);
/** /**
* @addtogroup KernelService * @addtogroup KernelService
......
/*
* File : debug.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
*
* Change Logs:
* Date Author Notes
* 2011-06 11 mbbill first version
*/
#include <rtdef.h>
#include <rtdebug.h>
/**
* @addtogroup Kernel
*/
/*@{*/
#ifdef RT_DEBUG
rt_uint8_t rt_debug_reent_cnt = 0;
#endif
/*@}*/
...@@ -60,8 +60,7 @@ void rt_thread_idle_sethook(void (*hook)()) ...@@ -60,8 +60,7 @@ void rt_thread_idle_sethook(void (*hook)())
*/ */
void rt_thread_idle_excute(void) void rt_thread_idle_excute(void)
{ {
RT_DEBUG_NOT_IN_INTERRUPT;
RT_DEBUG_NOT_REENT
/* check the defunct thread list */ /* check the defunct thread list */
if (!rt_list_isempty(&rt_thread_defunct)) if (!rt_list_isempty(&rt_thread_defunct))
...@@ -149,9 +148,10 @@ static void rt_thread_idle_entry(void* parameter) ...@@ -149,9 +148,10 @@ static void rt_thread_idle_entry(void* parameter)
{ {
while (1) while (1)
{ {
#ifdef RT_USING_HOOK #ifdef RT_USING_HOOK
RT_OBJECT_HOOK_CALL(rt_thread_idle_hook); if (rt_thread_idle_hook != RT_NULL)
#endif rt_thread_idle_hook();
#endif
rt_thread_idle_excute(); rt_thread_idle_excute();
} }
......
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#include "kservice.h" #include "kservice.h"
/* #define RT_IPC_DEBUG */
#ifdef RT_USING_HOOK #ifdef RT_USING_HOOK
extern void (*rt_object_trytake_hook)(struct rt_object* object); extern void (*rt_object_trytake_hook)(struct rt_object* object);
extern void (*rt_object_take_hook)(struct rt_object* object); extern void (*rt_object_take_hook)(struct rt_object* object);
...@@ -251,7 +249,7 @@ rt_sem_t rt_sem_create (const char* name, rt_uint32_t value, rt_uint8_t flag) ...@@ -251,7 +249,7 @@ rt_sem_t rt_sem_create (const char* name, rt_uint32_t value, rt_uint8_t flag)
{ {
rt_sem_t sem; rt_sem_t sem;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
sem = (rt_sem_t) rt_object_allocate(RT_Object_Class_Semaphore, name); sem = (rt_sem_t) rt_object_allocate(RT_Object_Class_Semaphore, name);
...@@ -280,7 +278,7 @@ rt_sem_t rt_sem_create (const char* name, rt_uint32_t value, rt_uint8_t flag) ...@@ -280,7 +278,7 @@ rt_sem_t rt_sem_create (const char* name, rt_uint32_t value, rt_uint8_t flag)
*/ */
rt_err_t rt_sem_delete (rt_sem_t sem) rt_err_t rt_sem_delete (rt_sem_t sem)
{ {
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
RT_ASSERT(sem != RT_NULL); RT_ASSERT(sem != RT_NULL);
...@@ -310,9 +308,7 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time) ...@@ -310,9 +308,7 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time)
RT_ASSERT(sem != RT_NULL); RT_ASSERT(sem != RT_NULL);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(sem->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_trytake_hook,&(sem->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -339,8 +335,8 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time) ...@@ -339,8 +335,8 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time)
} }
else else
{ {
/* time = 0 is ok */ /* current context checking */
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* semaphore is unavailable, push to suspend list */ /* semaphore is unavailable, push to suspend list */
/* get current thread */ /* get current thread */
...@@ -379,9 +375,7 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time) ...@@ -379,9 +375,7 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time)
} }
} }
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(sem->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(sem->parent.parent));
#endif
return RT_EOK; return RT_EOK;
} }
...@@ -411,9 +405,7 @@ rt_err_t rt_sem_release(rt_sem_t sem) ...@@ -411,9 +405,7 @@ rt_err_t rt_sem_release(rt_sem_t sem)
register rt_base_t temp; register rt_base_t temp;
register rt_bool_t need_schedule; register rt_bool_t need_schedule;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(sem->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(sem->parent.parent));
#endif
need_schedule = RT_FALSE; need_schedule = RT_FALSE;
...@@ -552,7 +544,7 @@ rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag) ...@@ -552,7 +544,7 @@ rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag)
{ {
struct rt_mutex *mutex; struct rt_mutex *mutex;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
mutex = (rt_mutex_t) rt_object_allocate(RT_Object_Class_Mutex, name); mutex = (rt_mutex_t) rt_object_allocate(RT_Object_Class_Mutex, name);
...@@ -583,7 +575,7 @@ rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag) ...@@ -583,7 +575,7 @@ rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag)
*/ */
rt_err_t rt_mutex_delete (rt_mutex_t mutex) rt_err_t rt_mutex_delete (rt_mutex_t mutex)
{ {
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
RT_ASSERT(mutex != RT_NULL); RT_ASSERT(mutex != RT_NULL);
...@@ -612,7 +604,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time) ...@@ -612,7 +604,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time)
struct rt_thread* thread; struct rt_thread* thread;
/* this function must not be used in interrupt even if time = 0 */ /* this function must not be used in interrupt even if time = 0 */
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
RT_ASSERT(mutex != RT_NULL); RT_ASSERT(mutex != RT_NULL);
...@@ -622,9 +614,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time) ...@@ -622,9 +614,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time)
/* get current thread */ /* get current thread */
thread = rt_thread_self(); thread = rt_thread_self();
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mutex->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_trytake_hook,&(mutex->parent.parent));
#endif
RT_DEBUG_LOG(RT_DEBUG_IPC, RT_DEBUG_LOG(RT_DEBUG_IPC,
("mutex_take: current thread %s, mutex value: %d, hold: %d\n", ("mutex_take: current thread %s, mutex value: %d, hold: %d\n",
...@@ -719,9 +709,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time) ...@@ -719,9 +709,7 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time)
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(temp); rt_hw_interrupt_enable(temp);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mutex->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(mutex->parent.parent));
#endif
return RT_EOK; return RT_EOK;
} }
...@@ -752,9 +740,7 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex) ...@@ -752,9 +740,7 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex)
("mutex_release:current thread %s, mutex value: %d, hold: %d\n", ("mutex_release:current thread %s, mutex value: %d, hold: %d\n",
thread->name, mutex->value, mutex->hold)); thread->name, mutex->value, mutex->hold));
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mutex->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(mutex->parent.parent));
#endif
/* mutex only can be released by owner */ /* mutex only can be released by owner */
if (thread != mutex->owner) if (thread != mutex->owner)
...@@ -899,7 +885,7 @@ rt_event_t rt_event_create (const char* name, rt_uint8_t flag) ...@@ -899,7 +885,7 @@ rt_event_t rt_event_create (const char* name, rt_uint8_t flag)
{ {
rt_event_t event; rt_event_t event;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
event = (rt_event_t) rt_object_allocate(RT_Object_Class_Event, name); event = (rt_event_t) rt_object_allocate(RT_Object_Class_Event, name);
...@@ -929,7 +915,7 @@ rt_err_t rt_event_delete (rt_event_t event) ...@@ -929,7 +915,7 @@ rt_err_t rt_event_delete (rt_event_t event)
/* parameter check */ /* parameter check */
RT_ASSERT(event != RT_NULL); RT_ASSERT(event != RT_NULL);
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* resume all suspended thread */ /* resume all suspended thread */
rt_ipc_list_resume_all(&(event->parent.suspend_thread)); rt_ipc_list_resume_all(&(event->parent.suspend_thread));
...@@ -963,9 +949,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) ...@@ -963,9 +949,7 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set)
if (set == 0) return -RT_ERROR; if (set == 0) return -RT_ERROR;
need_schedule = RT_FALSE; need_schedule = RT_FALSE;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(event->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(event->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -1051,7 +1035,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_ ...@@ -1051,7 +1035,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_
register rt_ubase_t level; register rt_ubase_t level;
register rt_base_t status; register rt_base_t status;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* parameter check */ /* parameter check */
RT_ASSERT(event != RT_NULL); RT_ASSERT(event != RT_NULL);
...@@ -1064,9 +1048,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_ ...@@ -1064,9 +1048,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_
/* reset thread error */ /* reset thread error */
thread->error = RT_EOK; thread->error = RT_EOK;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(event->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_trytake_hook,&(event->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -1134,9 +1116,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_ ...@@ -1134,9 +1116,7 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(event->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(event->parent.parent));
#endif
return thread->error; return thread->error;
} }
...@@ -1254,7 +1234,7 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag) ...@@ -1254,7 +1234,7 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag)
{ {
rt_mailbox_t mb; rt_mailbox_t mb;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
mb = (rt_mailbox_t) rt_object_allocate(RT_Object_Class_MailBox, name); mb = (rt_mailbox_t) rt_object_allocate(RT_Object_Class_MailBox, name);
...@@ -1295,7 +1275,7 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag) ...@@ -1295,7 +1275,7 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag)
*/ */
rt_err_t rt_mb_delete (rt_mailbox_t mb) rt_err_t rt_mb_delete (rt_mailbox_t mb)
{ {
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* parameter check */ /* parameter check */
RT_ASSERT(mb != RT_NULL); RT_ASSERT(mb != RT_NULL);
...@@ -1342,9 +1322,7 @@ rt_err_t rt_mb_send_wait (rt_mailbox_t mb, rt_uint32_t value, rt_int32_t timeout ...@@ -1342,9 +1322,7 @@ rt_err_t rt_mb_send_wait (rt_mailbox_t mb, rt_uint32_t value, rt_int32_t timeout
/* parameter check */ /* parameter check */
RT_ASSERT(mb != RT_NULL); RT_ASSERT(mb != RT_NULL);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mb->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(mb->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -1368,7 +1346,7 @@ rt_err_t rt_mb_send_wait (rt_mailbox_t mb, rt_uint32_t value, rt_int32_t timeout ...@@ -1368,7 +1346,7 @@ rt_err_t rt_mb_send_wait (rt_mailbox_t mb, rt_uint32_t value, rt_int32_t timeout
return -RT_EFULL; return -RT_EFULL;
} }
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* suspend current thread */ /* suspend current thread */
rt_ipc_list_suspend(&(mb->suspend_sender_thread), rt_ipc_list_suspend(&(mb->suspend_sender_thread),
...@@ -1475,9 +1453,8 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout) ...@@ -1475,9 +1453,8 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout)
RT_ASSERT(mb != RT_NULL); RT_ASSERT(mb != RT_NULL);
tick_delta = 0; tick_delta = 0;
#ifdef RT_USING_HOOK
RT_OBJECT_HOOK_CALL2(rt_object_trytake_hook,&(mb->parent.parent)); RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mb->parent.parent)));
#endif
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -1501,7 +1478,7 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout) ...@@ -1501,7 +1478,7 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout)
return -RT_ETIMEOUT; return -RT_ETIMEOUT;
} }
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* suspend current thread */ /* suspend current thread */
rt_ipc_list_suspend(&(mb->parent.suspend_thread), rt_ipc_list_suspend(&(mb->parent.suspend_thread),
...@@ -1563,9 +1540,8 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout) ...@@ -1563,9 +1540,8 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout)
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(temp); rt_hw_interrupt_enable(temp);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mb->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(mb->parent.parent));
#endif
rt_schedule(); rt_schedule();
return RT_EOK; return RT_EOK;
...@@ -1574,9 +1550,7 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout) ...@@ -1574,9 +1550,7 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout)
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(temp); rt_hw_interrupt_enable(temp);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mb->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(mb->parent.parent));
#endif
return RT_EOK; return RT_EOK;
} }
...@@ -1724,7 +1698,7 @@ rt_mq_t rt_mq_create (const char* name, rt_size_t msg_size, rt_size_t max_msgs, ...@@ -1724,7 +1698,7 @@ rt_mq_t rt_mq_create (const char* name, rt_size_t msg_size, rt_size_t max_msgs,
struct rt_mq_message* head; struct rt_mq_message* head;
register rt_base_t temp; register rt_base_t temp;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
mq = (rt_mq_t) rt_object_allocate(RT_Object_Class_MessageQueue, name); mq = (rt_mq_t) rt_object_allocate(RT_Object_Class_MessageQueue, name);
...@@ -1779,7 +1753,7 @@ rt_mq_t rt_mq_create (const char* name, rt_size_t msg_size, rt_size_t max_msgs, ...@@ -1779,7 +1753,7 @@ rt_mq_t rt_mq_create (const char* name, rt_size_t msg_size, rt_size_t max_msgs,
*/ */
rt_err_t rt_mq_delete (rt_mq_t mq) rt_err_t rt_mq_delete (rt_mq_t mq)
{ {
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* parameter check */ /* parameter check */
RT_ASSERT(mq != RT_NULL); RT_ASSERT(mq != RT_NULL);
...@@ -1822,9 +1796,7 @@ rt_err_t rt_mq_send (rt_mq_t mq, void* buffer, rt_size_t size) ...@@ -1822,9 +1796,7 @@ rt_err_t rt_mq_send (rt_mq_t mq, void* buffer, rt_size_t size)
/* greater than one message size */ /* greater than one message size */
if (size > mq->msg_size) return -RT_ERROR; if (size > mq->msg_size) return -RT_ERROR;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mq->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(mq->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -1905,9 +1877,7 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, void* buffer, rt_size_t size) ...@@ -1905,9 +1877,7 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, void* buffer, rt_size_t size)
/* greater than one message size */ /* greater than one message size */
if (size > mq->msg_size) return -RT_ERROR; if (size > mq->msg_size) return -RT_ERROR;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mq->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(mq->parent.parent));
#endif
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -1980,9 +1950,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou ...@@ -1980,9 +1950,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou
struct rt_mq_message *msg; struct rt_mq_message *msg;
rt_uint32_t tick_delta; rt_uint32_t tick_delta;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mq->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_trytake_hook,&(mq->parent.parent));
#endif
tick_delta = 0; tick_delta = 0;
/* get current thread */ /* get current thread */
...@@ -2007,7 +1975,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou ...@@ -2007,7 +1975,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou
return -RT_ETIMEOUT; return -RT_ETIMEOUT;
} }
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* suspend current thread */ /* suspend current thread */
rt_ipc_list_suspend(&(mq->parent.suspend_thread), rt_ipc_list_suspend(&(mq->parent.suspend_thread),
...@@ -2078,9 +2046,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou ...@@ -2078,9 +2046,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeou
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(temp); rt_hw_interrupt_enable(temp);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mq->parent.parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(mq->parent.parent));
#endif
return RT_EOK; return RT_EOK;
} }
......
...@@ -37,8 +37,6 @@ void rt_interrupt_enter() ...@@ -37,8 +37,6 @@ void rt_interrupt_enter()
{ {
rt_base_t level; rt_base_t level;
RT_DEBUG_REENT_IN
RT_DEBUG_LOG(RT_DEBUG_IRQ,("irq comming..., irq nest:%d\n", rt_interrupt_nest)); RT_DEBUG_LOG(RT_DEBUG_IRQ,("irq comming..., irq nest:%d\n", rt_interrupt_nest));
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -62,8 +60,20 @@ void rt_interrupt_leave() ...@@ -62,8 +60,20 @@ void rt_interrupt_leave()
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
rt_interrupt_nest --; rt_interrupt_nest --;
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
}
RT_DEBUG_REENT_OUT /**
* This function will return the nest of interrupt.
*
* User application can invoke this function to get whenther current
* context is interrupt context.
*
* @return the number of nested interrupts.
*/
rt_uint8_t rt_interrupt_get_nest(void)
{
return rt_interrupt_nest;
} }
/*@}*/ /*@}*/
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#ifndef RT_USING_NEWLIB #ifndef RT_USING_NEWLIB
/* global errno in RT-Thread*/ /* global errno in RT-Thread*/
int errno; volatile int errno;
#else #else
#include <errno.h> #include <errno.h>
#endif #endif
...@@ -44,7 +44,7 @@ rt_err_t rt_get_errno(void) ...@@ -44,7 +44,7 @@ rt_err_t rt_get_errno(void)
{ {
rt_thread_t tid; rt_thread_t tid;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
tid = rt_thread_self(); tid = rt_thread_self();
if (tid == RT_NULL) return errno; if (tid == RT_NULL) return errno;
...@@ -61,7 +61,7 @@ void rt_set_errno(rt_err_t error) ...@@ -61,7 +61,7 @@ void rt_set_errno(rt_err_t error)
{ {
rt_thread_t tid; rt_thread_t tid;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
tid = rt_thread_self(); tid = rt_thread_self();
if (tid == RT_NULL) { errno = error; return; } if (tid == RT_NULL) { errno = error; return; }
......
...@@ -140,8 +140,6 @@ static void plug_holes(struct heap_mem *mem) ...@@ -140,8 +140,6 @@ static void plug_holes(struct heap_mem *mem)
struct heap_mem *nmem; struct heap_mem *nmem;
struct heap_mem *pmem; struct heap_mem *pmem;
RT_DEBUG_NOT_REENT
RT_ASSERT((rt_uint8_t *)mem >= heap_ptr); RT_ASSERT((rt_uint8_t *)mem >= heap_ptr);
RT_ASSERT((rt_uint8_t *)mem < (rt_uint8_t *)heap_end); RT_ASSERT((rt_uint8_t *)mem < (rt_uint8_t *)heap_end);
RT_ASSERT(mem->used == 0); RT_ASSERT(mem->used == 0);
...@@ -188,7 +186,7 @@ void rt_system_heap_init(void* begin_addr, void* end_addr) ...@@ -188,7 +186,7 @@ void rt_system_heap_init(void* begin_addr, void* end_addr)
rt_uint32_t begin_align = RT_ALIGN((rt_uint32_t)begin_addr, RT_ALIGN_SIZE); rt_uint32_t begin_align = RT_ALIGN((rt_uint32_t)begin_addr, RT_ALIGN_SIZE);
rt_uint32_t end_align = RT_ALIGN_DOWN((rt_uint32_t)end_addr, RT_ALIGN_SIZE); rt_uint32_t end_align = RT_ALIGN_DOWN((rt_uint32_t)end_addr, RT_ALIGN_SIZE);
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* alignment addr */ /* alignment addr */
if((end_align > (2 * SIZEOF_STRUCT_MEM) ) && if((end_align > (2 * SIZEOF_STRUCT_MEM) ) &&
...@@ -245,16 +243,14 @@ void *rt_malloc(rt_size_t size) ...@@ -245,16 +243,14 @@ void *rt_malloc(rt_size_t size)
rt_size_t ptr, ptr2; rt_size_t ptr, ptr2;
struct heap_mem *mem, *mem2; struct heap_mem *mem, *mem2;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
if (size == 0) return RT_NULL; if (size == 0) return RT_NULL;
#if RT_DEBUG_MEM
if (size != RT_ALIGN(size, RT_ALIGN_SIZE)) if (size != RT_ALIGN(size, RT_ALIGN_SIZE))
rt_kprintf("malloc size %d, but align to %d\n", size, RT_ALIGN(size, RT_ALIGN_SIZE)); RT_DEBUG_LOG(RT_DEBUG_MEM, ("malloc size %d, but align to %d\n", size, RT_ALIGN(size, RT_ALIGN_SIZE)));
else else
rt_kprintf("malloc size %d\n", size); RT_DEBUG_LOG(RT_DEBUG_MEM, ("malloc size %d\n", size));
#endif
/* alignment size */ /* alignment size */
size = RT_ALIGN(size, RT_ALIGN_SIZE); size = RT_ALIGN(size, RT_ALIGN_SIZE);
...@@ -351,9 +347,7 @@ void *rt_malloc(rt_size_t size) ...@@ -351,9 +347,7 @@ void *rt_malloc(rt_size_t size)
(rt_uint32_t)((rt_uint8_t*)mem + SIZEOF_STRUCT_MEM), (rt_uint32_t)((rt_uint8_t*)mem + SIZEOF_STRUCT_MEM),
(rt_uint32_t)(mem->next - ((rt_uint8_t*)mem - heap_ptr)))); (rt_uint32_t)(mem->next - ((rt_uint8_t*)mem - heap_ptr))));
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_malloc_hook, (((void*)((rt_uint8_t *)mem + SIZEOF_STRUCT_MEM)), size));
RT_OBJECT_HOOK_CALL2(rt_malloc_hook,(rt_uint8_t *)mem + SIZEOF_STRUCT_MEM,size);
#endif
/* return the memory data except mem struct */ /* return the memory data except mem struct */
return (rt_uint8_t *)mem + SIZEOF_STRUCT_MEM; return (rt_uint8_t *)mem + SIZEOF_STRUCT_MEM;
} }
...@@ -378,7 +372,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize) ...@@ -378,7 +372,7 @@ void *rt_realloc(void *rmem, rt_size_t newsize)
struct heap_mem *mem, *mem2; struct heap_mem *mem, *mem2;
void* nmem; void* nmem;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* alignment size */ /* alignment size */
newsize = RT_ALIGN(newsize, RT_ALIGN_SIZE); newsize = RT_ALIGN(newsize, RT_ALIGN_SIZE);
...@@ -467,7 +461,7 @@ void *rt_calloc(rt_size_t count, rt_size_t size) ...@@ -467,7 +461,7 @@ void *rt_calloc(rt_size_t count, rt_size_t size)
{ {
void *p; void *p;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate 'count' objects of size 'size' */ /* allocate 'count' objects of size 'size' */
p = rt_malloc(count * size); p = rt_malloc(count * size);
...@@ -488,16 +482,14 @@ void rt_free(void *rmem) ...@@ -488,16 +482,14 @@ void rt_free(void *rmem)
{ {
struct heap_mem *mem; struct heap_mem *mem;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
if (rmem == RT_NULL) return; if (rmem == RT_NULL) return;
RT_ASSERT((((rt_uint32_t)rmem) & (RT_ALIGN_SIZE-1)) == 0); RT_ASSERT((((rt_uint32_t)rmem) & (RT_ALIGN_SIZE-1)) == 0);
RT_ASSERT((rt_uint8_t *)rmem >= (rt_uint8_t *)heap_ptr && RT_ASSERT((rt_uint8_t *)rmem >= (rt_uint8_t *)heap_ptr &&
(rt_uint8_t *)rmem < (rt_uint8_t *)heap_end); (rt_uint8_t *)rmem < (rt_uint8_t *)heap_end);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_free_hook, (rmem));
RT_OBJECT_HOOK_CALL2(rt_free_hook,rmem);
#endif
if ((rt_uint8_t *)rmem < (rt_uint8_t *)heap_ptr || (rt_uint8_t *)rmem >= (rt_uint8_t *)heap_end) if ((rt_uint8_t *)rmem < (rt_uint8_t *)heap_ptr || (rt_uint8_t *)rmem >= (rt_uint8_t *)heap_end)
{ {
......
...@@ -182,7 +182,7 @@ rt_mp_t rt_mp_create(const char* name, rt_size_t block_count, rt_size_t block_si ...@@ -182,7 +182,7 @@ rt_mp_t rt_mp_create(const char* name, rt_size_t block_count, rt_size_t block_si
struct rt_mempool* mp; struct rt_mempool* mp;
register rt_base_t offset; register rt_base_t offset;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* allocate object */ /* allocate object */
mp = (struct rt_mempool*)rt_object_allocate(RT_Object_Class_MemPool, name); mp = (struct rt_mempool*)rt_object_allocate(RT_Object_Class_MemPool, name);
...@@ -237,7 +237,7 @@ rt_err_t rt_mp_delete(rt_mp_t mp) ...@@ -237,7 +237,7 @@ rt_err_t rt_mp_delete(rt_mp_t mp)
struct rt_thread* thread; struct rt_thread* thread;
register rt_ubase_t temp; register rt_ubase_t temp;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* parameter check */ /* parameter check */
RT_ASSERT(mp != RT_NULL); RT_ASSERT(mp != RT_NULL);
...@@ -325,7 +325,7 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time) ...@@ -325,7 +325,7 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time)
} }
else else
{ {
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* get current thread */ /* get current thread */
thread = rt_thread_self(); thread = rt_thread_self();
...@@ -368,9 +368,7 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time) ...@@ -368,9 +368,7 @@ void *rt_mp_alloc (rt_mp_t mp, rt_int32_t time)
/* enable interrupt */ /* enable interrupt */
rt_hw_interrupt_enable(level); rt_hw_interrupt_enable(level);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_mp_alloc_hook, (mp, (rt_uint8_t*)(block_ptr + sizeof(rt_uint8_t*))));
RT_OBJECT_HOOK_CALL2(rt_mp_alloc_hook,mp, (rt_uint8_t*)(block_ptr + sizeof(rt_uint8_t*)));
#endif
return (rt_uint8_t*)(block_ptr + sizeof(rt_uint8_t*)); return (rt_uint8_t*)(block_ptr + sizeof(rt_uint8_t*));
} }
...@@ -392,9 +390,7 @@ void rt_mp_free (void *block) ...@@ -392,9 +390,7 @@ void rt_mp_free (void *block)
block_ptr = (rt_uint8_t**)((rt_uint8_t*)block - sizeof(rt_uint8_t*)); block_ptr = (rt_uint8_t**)((rt_uint8_t*)block - sizeof(rt_uint8_t*));
mp = (struct rt_mempool*) *block_ptr; mp = (struct rt_mempool*) *block_ptr;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_mp_free_hook, (mp, block));
RT_OBJECT_HOOK_CALL2(rt_mp_free_hook,mp, block);
#endif
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
......
...@@ -264,7 +264,7 @@ rt_module_t rt_module_load(const char* name, void* module_ptr) ...@@ -264,7 +264,7 @@ rt_module_t rt_module_load(const char* name, void* module_ptr)
rt_bool_t linked = RT_FALSE; rt_bool_t linked = RT_FALSE;
rt_uint32_t index, module_size = 0; rt_uint32_t index, module_size = 0;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
rt_kprintf("rt_module_load: %s ,", name); rt_kprintf("rt_module_load: %s ,", name);
...@@ -484,7 +484,7 @@ rt_module_t rt_module_open(const char* filename) ...@@ -484,7 +484,7 @@ rt_module_t rt_module_open(const char* filename)
struct stat s; struct stat s;
char *buffer, *offset_ptr;; char *buffer, *offset_ptr;;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* check parameters */ /* check parameters */
RT_ASSERT(filename != RT_NULL); RT_ASSERT(filename != RT_NULL);
...@@ -555,7 +555,7 @@ rt_err_t rt_module_unload(rt_module_t module) ...@@ -555,7 +555,7 @@ rt_err_t rt_module_unload(rt_module_t module)
struct rt_object* object; struct rt_object* object;
struct rt_list_node *list; struct rt_list_node *list;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
rt_kprintf("rt_module_unload: %s\n", module->parent.name); rt_kprintf("rt_module_unload: %s\n", module->parent.name);
...@@ -774,7 +774,7 @@ rt_module_t rt_module_find(const char* name) ...@@ -774,7 +774,7 @@ rt_module_t rt_module_find(const char* name)
extern struct rt_object_information rt_object_container[]; extern struct rt_object_information rt_object_container[];
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* enter critical */ /* enter critical */
rt_enter_critical(); rt_enter_critical();
...@@ -807,7 +807,7 @@ static struct rt_mem_head *morepage(rt_size_t nu) ...@@ -807,7 +807,7 @@ static struct rt_mem_head *morepage(rt_size_t nu)
struct rt_mem_head *up; struct rt_mem_head *up;
struct rt_module_page *node; struct rt_module_page *node;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
RT_ASSERT (nu != 0); RT_ASSERT (nu != 0);
...@@ -840,7 +840,7 @@ void *rt_module_malloc(rt_size_t size) ...@@ -840,7 +840,7 @@ void *rt_module_malloc(rt_size_t size)
struct rt_mem_head **prev; struct rt_mem_head **prev;
rt_size_t nunits; rt_size_t nunits;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
nunits = (size + sizeof(struct rt_mem_head) -1)/sizeof(struct rt_mem_head) + 1; nunits = (size + sizeof(struct rt_mem_head) -1)/sizeof(struct rt_mem_head) + 1;
...@@ -910,7 +910,7 @@ void rt_module_free(rt_module_t module, void *addr) ...@@ -910,7 +910,7 @@ void rt_module_free(rt_module_t module, void *addr)
struct rt_mem_head *b, *n; struct rt_mem_head *b, *n;
struct rt_mem_head **prev; struct rt_mem_head **prev;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
RT_ASSERT(addr); RT_ASSERT(addr);
RT_ASSERT((((rt_uint32_t)addr) & (sizeof(struct rt_mem_head) -1)) == 0); RT_ASSERT((((rt_uint32_t)addr) & (sizeof(struct rt_mem_head) -1)) == 0);
...@@ -961,7 +961,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size) ...@@ -961,7 +961,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size)
struct rt_mem_head *b, *p, *prev, *tmpp; struct rt_mem_head *b, *p, *prev, *tmpp;
rt_size_t nunits; rt_size_t nunits;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
if (!ptr) return rt_module_malloc(size); if (!ptr) return rt_module_malloc(size);
if (size == 0) if (size == 0)
......
...@@ -206,6 +206,17 @@ void rt_system_object_init(void) ...@@ -206,6 +206,17 @@ void rt_system_object_init(void)
*/ */
/*@{*/ /*@{*/
/**
* This function will return the specified type of object information.
*
* @param type the type of object
* @return the object type information or RT_NULL
*/
struct rt_object_information *rt_object_get_information(enum rt_object_class_type type)
{
return &rt_object_container[type];
}
/** /**
* This function will initialize an object and add it to object system management. * This function will initialize an object and add it to object system management.
* *
...@@ -238,9 +249,7 @@ void rt_object_init(struct rt_object* object, enum rt_object_class_type type, co ...@@ -238,9 +249,7 @@ void rt_object_init(struct rt_object* object, enum rt_object_class_type type, co
object->name[temp] = name[temp]; object->name[temp] = name[temp];
} }
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object));
RT_OBJECT_HOOK_CALL2(rt_object_attach_hook,object);
#endif
/* lock interrupt */ /* lock interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -265,9 +274,7 @@ void rt_object_detach(rt_object_t object) ...@@ -265,9 +274,7 @@ void rt_object_detach(rt_object_t object)
/* object check */ /* object check */
RT_ASSERT(object != RT_NULL); RT_ASSERT(object != RT_NULL);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_detach_hook, (object));
RT_OBJECT_HOOK_CALL2(rt_object_detach_hook,object);
#endif
/* lock interrupt */ /* lock interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -294,7 +301,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name) ...@@ -294,7 +301,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name)
register rt_base_t temp; register rt_base_t temp;
struct rt_object_information* information; struct rt_object_information* information;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
/* get module object information, module object should be managed by kernel object container */ /* get module object information, module object should be managed by kernel object container */
...@@ -334,9 +341,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name) ...@@ -334,9 +341,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name)
object->name[temp] = name[temp]; object->name[temp] = name[temp];
} }
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object));
RT_OBJECT_HOOK_CALL2(rt_object_attach_hook,object);
#endif
/* lock interrupt */ /* lock interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
...@@ -364,9 +369,7 @@ void rt_object_delete(rt_object_t object) ...@@ -364,9 +369,7 @@ void rt_object_delete(rt_object_t object)
RT_ASSERT(object != RT_NULL); RT_ASSERT(object != RT_NULL);
RT_ASSERT(!(object->type & RT_Object_Class_Static)); RT_ASSERT(!(object->type & RT_Object_Class_Static));
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_detach_hook, (object));
RT_OBJECT_HOOK_CALL2(rt_object_detach_hook,object);
#endif
/* lock interrupt */ /* lock interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
......
...@@ -273,9 +273,7 @@ void rt_schedule() ...@@ -273,9 +273,7 @@ void rt_schedule()
(rt_module_t)rt_current_thread->module_id : RT_NULL); (rt_module_t)rt_current_thread->module_id : RT_NULL);
#endif #endif
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (from_thread, to_thread));
RT_OBJECT_HOOK_CALL2(rt_scheduler_hook,from_thread, to_thread);
#endif
/* switch to new thread */ /* switch to new thread */
RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, RT_DEBUG_LOG(RT_DEBUG_SCHEDULER,
...@@ -328,13 +326,12 @@ void rt_schedule_insert_thread(struct rt_thread* thread) ...@@ -328,13 +326,12 @@ void rt_schedule_insert_thread(struct rt_thread* thread)
&(thread->tlist)); &(thread->tlist));
/* set priority mask */ /* set priority mask */
#if RT_DEBUG_SCHEDULER
#if RT_THREAD_PRIORITY_MAX <= 32 #if RT_THREAD_PRIORITY_MAX <= 32
rt_kprintf("insert thread[%s], the priority: %d\n", thread->name, thread->current_priority); RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("insert thread[%s], the priority: %d\n",
thread->name, thread->current_priority));
#else #else
rt_kprintf("insert thread[%s], the priority: %d 0x%x %d\n", thread->name, thread->number, thread->number_mask, thread->high_mask); RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("insert thread[%s], the priority: %d 0x%x %d\n",
#endif thread->name, thread->number, thread->number_mask, thread->high_mask));
#endif #endif
#if RT_THREAD_PRIORITY_MAX > 32 #if RT_THREAD_PRIORITY_MAX > 32
...@@ -362,14 +359,12 @@ void rt_schedule_remove_thread(struct rt_thread* thread) ...@@ -362,14 +359,12 @@ void rt_schedule_remove_thread(struct rt_thread* thread)
/* disable interrupt */ /* disable interrupt */
temp = rt_hw_interrupt_disable(); temp = rt_hw_interrupt_disable();
#if RT_DEBUG_SCHEDULER
#if RT_THREAD_PRIORITY_MAX <= 32 #if RT_THREAD_PRIORITY_MAX <= 32
rt_kprintf("remove thread[%s], the priority: %d\n", thread->name, thread->current_priority); RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("remove thread[%s], the priority: %d\n",
thread->name, thread->current_priority));
#else #else
rt_kprintf("remove thread[%s], the priority: %d 0x%x %d\n", thread->name, thread->number, RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("remove thread[%s], the priority: %d 0x%x %d\n",
thread->number_mask, thread->high_mask); thread->name, thread->number, thread->number_mask, thread->high_mask));
#endif
#endif #endif
/* remove thread from ready list */ /* remove thread from ready list */
......
...@@ -337,7 +337,7 @@ void rt_system_heap_init(void *begin_addr, void* end_addr) ...@@ -337,7 +337,7 @@ void rt_system_heap_init(void *begin_addr, void* end_addr)
{ {
rt_uint32_t limsize, npages; rt_uint32_t limsize, npages;
RT_DEBUG_NOT_REENT RT_DEBUG_NOT_IN_INTERRUPT;
/* align begin and end addr to page */ /* align begin and end addr to page */
heap_start = RT_ALIGN((rt_uint32_t)begin_addr, RT_MM_PAGE_SIZE); heap_start = RT_ALIGN((rt_uint32_t)begin_addr, RT_MM_PAGE_SIZE);
...@@ -681,9 +681,7 @@ void *rt_malloc(rt_size_t size) ...@@ -681,9 +681,7 @@ void *rt_malloc(rt_size_t size)
done: done:
rt_sem_release(&heap_sem); rt_sem_release(&heap_sem);
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_malloc_hook, ((char*)chunk, size));
RT_OBJECT_HOOK_CALL2(rt_malloc_hook,(char*)chunk, size);
#endif
return chunk; return chunk;
...@@ -797,9 +795,7 @@ void rt_free(void *ptr) ...@@ -797,9 +795,7 @@ void rt_free(void *ptr)
/* free a RT_NULL pointer */ /* free a RT_NULL pointer */
if (ptr == RT_NULL) return ; if (ptr == RT_NULL) return ;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_free_hook, (ptr));
RT_OBJECT_HOOK_CALL2(rt_free_hook,ptr);
#endif
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
if(rt_module_self() != RT_NULL) if(rt_module_self() != RT_NULL)
......
...@@ -210,9 +210,7 @@ rt_err_t rt_timer_start(rt_timer_t timer) ...@@ -210,9 +210,7 @@ rt_err_t rt_timer_start(rt_timer_t timer)
RT_ASSERT(timer != RT_NULL); RT_ASSERT(timer != RT_NULL);
if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED) return -RT_ERROR; if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED) return -RT_ERROR;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent)));
RT_OBJECT_HOOK_CALL2(rt_object_take_hook,&(timer->parent));
#endif
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -277,9 +275,7 @@ rt_err_t rt_timer_stop(rt_timer_t timer) ...@@ -277,9 +275,7 @@ rt_err_t rt_timer_stop(rt_timer_t timer)
RT_ASSERT(timer != RT_NULL); RT_ASSERT(timer != RT_NULL);
if(!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)) return -RT_ERROR; if(!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)) return -RT_ERROR;
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(timer->parent)));
RT_OBJECT_HOOK_CALL2(rt_object_put_hook,&(timer->parent));
#endif
/* disable interrupt */ /* disable interrupt */
level = rt_hw_interrupt_disable(); level = rt_hw_interrupt_disable();
...@@ -364,22 +360,14 @@ void rt_timer_check(void) ...@@ -364,22 +360,14 @@ void rt_timer_check(void)
*/ */
if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2) if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2)
{ {
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));
RT_OBJECT_HOOK_CALL2(rt_timer_timeout_hook,t);
#endif
/* remove timer from timer list firstly */ /* remove timer from timer list firstly */
rt_list_remove(&(t->list)); rt_list_remove(&(t->list));
/* Timeout function called while interrupt is disabled, reentant function
is a must */
RT_DEBUG_REENT_IN
/* call timeout function */ /* call timeout function */
t->timeout_func(t->parameter); t->timeout_func(t->parameter);
RT_DEBUG_REENT_OUT
/* re-get tick */ /* re-get tick */
current_tick = rt_tick_get(); current_tick = rt_tick_get();
...@@ -455,9 +443,8 @@ void rt_soft_timer_check() ...@@ -455,9 +443,8 @@ void rt_soft_timer_check()
*/ */
if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2) if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2)
{ {
#ifdef RT_USING_HOOK RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook, (t));
RT_OBJECT_HOOK_CALL2(rt_timer_timeout_hook,t);
#endif
/* move node to the next */ /* move node to the next */
n = n->next; n = n->next;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册