内部函数以_开头
This commit is contained in:
parent
e7097118d2
commit
c10678c1f0
|
@ -129,7 +129,7 @@ rt_err_t rt_thread_idle_delhook(void (*hook)(void))
|
||||||
|
|
||||||
#ifdef RT_USING_HEAP
|
#ifdef RT_USING_HEAP
|
||||||
/* Return whether there is defunctional thread to be deleted. */
|
/* Return whether there is defunctional thread to be deleted. */
|
||||||
rt_inline int _rt_has_defunct_thread(void)
|
rt_inline int _idle_has_defunct_thread(void)
|
||||||
{
|
{
|
||||||
/* The rt_list_isempty has prototype of "int rt_list_isempty(const rt_list_t *l)".
|
/* The rt_list_isempty has prototype of "int rt_list_isempty(const rt_list_t *l)".
|
||||||
* So the compiler has a good reason that the rt_thread_defunct list does
|
* So the compiler has a good reason that the rt_thread_defunct list does
|
||||||
|
@ -165,7 +165,7 @@ void rt_thread_idle_excute(void)
|
||||||
lock = rt_hw_interrupt_disable();
|
lock = rt_hw_interrupt_disable();
|
||||||
|
|
||||||
/* check whether list is empty */
|
/* check whether list is empty */
|
||||||
if (!_rt_has_defunct_thread())
|
if (!_idle_has_defunct_thread())
|
||||||
{
|
{
|
||||||
rt_hw_interrupt_enable(lock);
|
rt_hw_interrupt_enable(lock);
|
||||||
break;
|
break;
|
||||||
|
|
102
src/ipc.c
102
src/ipc.c
|
@ -63,7 +63,7 @@ extern void (*rt_object_put_hook)(struct rt_object *object);
|
||||||
*
|
*
|
||||||
* @return the operation status, RT_EOK on successful
|
* @return the operation status, RT_EOK on successful
|
||||||
*/
|
*/
|
||||||
rt_inline rt_err_t _rt_ipc_object_init(struct rt_ipc_object *ipc)
|
rt_inline rt_err_t _ipc_object_init(struct rt_ipc_object *ipc)
|
||||||
{
|
{
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
rt_list_init(&(ipc->suspend_thread));
|
rt_list_init(&(ipc->suspend_thread));
|
||||||
|
@ -82,9 +82,9 @@ rt_inline rt_err_t _rt_ipc_object_init(struct rt_ipc_object *ipc)
|
||||||
*
|
*
|
||||||
* @return the operation status, RT_EOK on successful
|
* @return the operation status, RT_EOK on successful
|
||||||
*/
|
*/
|
||||||
rt_inline rt_err_t _rt_ipc_list_suspend(rt_list_t *list,
|
rt_inline rt_err_t _ipc_list_suspend(rt_list_t *list,
|
||||||
struct rt_thread *thread,
|
struct rt_thread *thread,
|
||||||
rt_uint8_t flag)
|
rt_uint8_t flag)
|
||||||
{
|
{
|
||||||
/* suspend thread */
|
/* suspend thread */
|
||||||
rt_thread_suspend(thread);
|
rt_thread_suspend(thread);
|
||||||
|
@ -140,7 +140,7 @@ rt_inline rt_err_t _rt_ipc_list_suspend(rt_list_t *list,
|
||||||
*
|
*
|
||||||
* @return the operation status, RT_EOK on successful
|
* @return the operation status, RT_EOK on successful
|
||||||
*/
|
*/
|
||||||
rt_inline rt_err_t _rt_ipc_list_resume(rt_list_t *list)
|
rt_inline rt_err_t _ipc_list_resume(rt_list_t *list)
|
||||||
{
|
{
|
||||||
struct rt_thread *thread;
|
struct rt_thread *thread;
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ rt_inline rt_err_t _rt_ipc_list_resume(rt_list_t *list)
|
||||||
*
|
*
|
||||||
* @return the operation status, RT_EOK on successful
|
* @return the operation status, RT_EOK on successful
|
||||||
*/
|
*/
|
||||||
rt_inline rt_err_t _rt_ipc_list_resume_all(rt_list_t *list)
|
rt_inline rt_err_t _ipc_list_resume_all(rt_list_t *list)
|
||||||
{
|
{
|
||||||
struct rt_thread *thread;
|
struct rt_thread *thread;
|
||||||
register rt_ubase_t temp;
|
register rt_ubase_t temp;
|
||||||
|
@ -217,7 +217,7 @@ rt_err_t rt_sem_init(rt_sem_t sem,
|
||||||
rt_object_init(&(sem->parent.parent), RT_Object_Class_Semaphore, name);
|
rt_object_init(&(sem->parent.parent), RT_Object_Class_Semaphore, name);
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(sem->parent));
|
_ipc_object_init(&(sem->parent));
|
||||||
|
|
||||||
/* set initial value */
|
/* set initial value */
|
||||||
sem->value = (rt_uint16_t)value;
|
sem->value = (rt_uint16_t)value;
|
||||||
|
@ -246,7 +246,7 @@ rt_err_t rt_sem_detach(rt_sem_t sem)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent));
|
RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent));
|
||||||
|
|
||||||
/* wakeup all suspended threads */
|
/* wakeup all suspended threads */
|
||||||
_rt_ipc_list_resume_all(&(sem->parent.suspend_thread));
|
_ipc_list_resume_all(&(sem->parent.suspend_thread));
|
||||||
|
|
||||||
/* detach semaphore object */
|
/* detach semaphore object */
|
||||||
rt_object_detach(&(sem->parent.parent));
|
rt_object_detach(&(sem->parent.parent));
|
||||||
|
@ -280,7 +280,7 @@ rt_sem_t rt_sem_create(const char *name, rt_uint32_t value, rt_uint8_t flag)
|
||||||
return sem;
|
return sem;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(sem->parent));
|
_ipc_object_init(&(sem->parent));
|
||||||
|
|
||||||
/* set initial value */
|
/* set initial value */
|
||||||
sem->value = value;
|
sem->value = value;
|
||||||
|
@ -311,7 +311,7 @@ rt_err_t rt_sem_delete(rt_sem_t sem)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent) == RT_FALSE);
|
RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent) == RT_FALSE);
|
||||||
|
|
||||||
/* wakeup all suspended threads */
|
/* wakeup all suspended threads */
|
||||||
_rt_ipc_list_resume_all(&(sem->parent.suspend_thread));
|
_ipc_list_resume_all(&(sem->parent.suspend_thread));
|
||||||
|
|
||||||
/* delete semaphore object */
|
/* delete semaphore object */
|
||||||
rt_object_delete(&(sem->parent.parent));
|
rt_object_delete(&(sem->parent.parent));
|
||||||
|
@ -382,7 +382,7 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time)
|
||||||
thread->name));
|
thread->name));
|
||||||
|
|
||||||
/* suspend thread */
|
/* suspend thread */
|
||||||
_rt_ipc_list_suspend(&(sem->parent.suspend_thread),
|
_ipc_list_suspend(&(sem->parent.suspend_thread),
|
||||||
thread,
|
thread,
|
||||||
sem->parent.parent.flag);
|
sem->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -463,7 +463,7 @@ rt_err_t rt_sem_release(rt_sem_t sem)
|
||||||
if (!rt_list_isempty(&sem->parent.suspend_thread))
|
if (!rt_list_isempty(&sem->parent.suspend_thread))
|
||||||
{
|
{
|
||||||
/* resume the suspended thread */
|
/* resume the suspended thread */
|
||||||
_rt_ipc_list_resume(&(sem->parent.suspend_thread));
|
_ipc_list_resume(&(sem->parent.suspend_thread));
|
||||||
need_schedule = RT_TRUE;
|
need_schedule = RT_TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -517,7 +517,7 @@ rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg)
|
||||||
level = rt_hw_interrupt_disable();
|
level = rt_hw_interrupt_disable();
|
||||||
|
|
||||||
/* resume all waiting thread */
|
/* resume all waiting thread */
|
||||||
_rt_ipc_list_resume_all(&sem->parent.suspend_thread);
|
_ipc_list_resume_all(&sem->parent.suspend_thread);
|
||||||
|
|
||||||
/* set new value */
|
/* set new value */
|
||||||
sem->value = (rt_uint16_t)value;
|
sem->value = (rt_uint16_t)value;
|
||||||
|
@ -555,7 +555,7 @@ rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag)
|
||||||
rt_object_init(&(mutex->parent.parent), RT_Object_Class_Mutex, name);
|
rt_object_init(&(mutex->parent.parent), RT_Object_Class_Mutex, name);
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mutex->parent));
|
_ipc_object_init(&(mutex->parent));
|
||||||
|
|
||||||
mutex->value = 1;
|
mutex->value = 1;
|
||||||
mutex->owner = RT_NULL;
|
mutex->owner = RT_NULL;
|
||||||
|
@ -586,7 +586,7 @@ rt_err_t rt_mutex_detach(rt_mutex_t mutex)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent));
|
RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent));
|
||||||
|
|
||||||
/* wakeup all suspended threads */
|
/* wakeup all suspended threads */
|
||||||
_rt_ipc_list_resume_all(&(mutex->parent.suspend_thread));
|
_ipc_list_resume_all(&(mutex->parent.suspend_thread));
|
||||||
|
|
||||||
/* detach semaphore object */
|
/* detach semaphore object */
|
||||||
rt_object_detach(&(mutex->parent.parent));
|
rt_object_detach(&(mutex->parent.parent));
|
||||||
|
@ -618,7 +618,7 @@ rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag)
|
||||||
return mutex;
|
return mutex;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mutex->parent));
|
_ipc_object_init(&(mutex->parent));
|
||||||
|
|
||||||
mutex->value = 1;
|
mutex->value = 1;
|
||||||
mutex->owner = RT_NULL;
|
mutex->owner = RT_NULL;
|
||||||
|
@ -651,7 +651,7 @@ rt_err_t rt_mutex_delete(rt_mutex_t mutex)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent) == RT_FALSE);
|
RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent) == RT_FALSE);
|
||||||
|
|
||||||
/* wakeup all suspended threads */
|
/* wakeup all suspended threads */
|
||||||
_rt_ipc_list_resume_all(&(mutex->parent.suspend_thread));
|
_ipc_list_resume_all(&(mutex->parent.suspend_thread));
|
||||||
|
|
||||||
/* delete mutex object */
|
/* delete mutex object */
|
||||||
rt_object_delete(&(mutex->parent.parent));
|
rt_object_delete(&(mutex->parent.parent));
|
||||||
|
@ -765,7 +765,7 @@ __again:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* suspend current thread */
|
/* suspend current thread */
|
||||||
_rt_ipc_list_suspend(&(mutex->parent.suspend_thread),
|
_ipc_list_suspend(&(mutex->parent.suspend_thread),
|
||||||
thread,
|
thread,
|
||||||
mutex->parent.parent.flag);
|
mutex->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -916,7 +916,7 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* resume thread */
|
/* resume thread */
|
||||||
_rt_ipc_list_resume(&(mutex->parent.suspend_thread));
|
_ipc_list_resume(&(mutex->parent.suspend_thread));
|
||||||
|
|
||||||
need_schedule = RT_TRUE;
|
need_schedule = RT_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -993,7 +993,7 @@ rt_err_t rt_event_init(rt_event_t event, const char *name, rt_uint8_t flag)
|
||||||
event->parent.parent.flag = flag;
|
event->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(event->parent));
|
_ipc_object_init(&(event->parent));
|
||||||
|
|
||||||
/* initialize event */
|
/* initialize event */
|
||||||
event->set = 0;
|
event->set = 0;
|
||||||
|
@ -1017,7 +1017,7 @@ rt_err_t rt_event_detach(rt_event_t event)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&event->parent.parent));
|
RT_ASSERT(rt_object_is_systemobject(&event->parent.parent));
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(event->parent.suspend_thread));
|
_ipc_list_resume_all(&(event->parent.suspend_thread));
|
||||||
|
|
||||||
/* detach event object */
|
/* detach event object */
|
||||||
rt_object_detach(&(event->parent.parent));
|
rt_object_detach(&(event->parent.parent));
|
||||||
|
@ -1050,7 +1050,7 @@ rt_event_t rt_event_create(const char *name, rt_uint8_t flag)
|
||||||
event->parent.parent.flag = flag;
|
event->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(event->parent));
|
_ipc_object_init(&(event->parent));
|
||||||
|
|
||||||
/* initialize event */
|
/* initialize event */
|
||||||
event->set = 0;
|
event->set = 0;
|
||||||
|
@ -1076,7 +1076,7 @@ rt_err_t rt_event_delete(rt_event_t event)
|
||||||
RT_DEBUG_NOT_IN_INTERRUPT;
|
RT_DEBUG_NOT_IN_INTERRUPT;
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(event->parent.suspend_thread));
|
_ipc_list_resume_all(&(event->parent.suspend_thread));
|
||||||
|
|
||||||
/* delete event object */
|
/* delete event object */
|
||||||
rt_object_delete(&(event->parent.parent));
|
rt_object_delete(&(event->parent.parent));
|
||||||
|
@ -1279,7 +1279,7 @@ rt_err_t rt_event_recv(rt_event_t event,
|
||||||
thread->event_info = option;
|
thread->event_info = option;
|
||||||
|
|
||||||
/* put thread to suspended thread list */
|
/* put thread to suspended thread list */
|
||||||
_rt_ipc_list_suspend(&(event->parent.suspend_thread),
|
_ipc_list_suspend(&(event->parent.suspend_thread),
|
||||||
thread,
|
thread,
|
||||||
event->parent.parent.flag);
|
event->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -1345,7 +1345,7 @@ rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg)
|
||||||
level = rt_hw_interrupt_disable();
|
level = rt_hw_interrupt_disable();
|
||||||
|
|
||||||
/* resume all waiting thread */
|
/* resume all waiting thread */
|
||||||
_rt_ipc_list_resume_all(&event->parent.suspend_thread);
|
_ipc_list_resume_all(&event->parent.suspend_thread);
|
||||||
|
|
||||||
/* initialize event set */
|
/* initialize event set */
|
||||||
event->set = 0;
|
event->set = 0;
|
||||||
|
@ -1391,7 +1391,7 @@ rt_err_t rt_mb_init(rt_mailbox_t mb,
|
||||||
mb->parent.parent.flag = flag;
|
mb->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mb->parent));
|
_ipc_object_init(&(mb->parent));
|
||||||
|
|
||||||
/* initialize mailbox */
|
/* initialize mailbox */
|
||||||
mb->msg_pool = (rt_ubase_t *)msgpool;
|
mb->msg_pool = (rt_ubase_t *)msgpool;
|
||||||
|
@ -1422,9 +1422,9 @@ rt_err_t rt_mb_detach(rt_mailbox_t mb)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent));
|
RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent));
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
||||||
/* also resume all mailbox private suspended thread */
|
/* also resume all mailbox private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
||||||
|
|
||||||
/* detach mailbox object */
|
/* detach mailbox object */
|
||||||
rt_object_detach(&(mb->parent.parent));
|
rt_object_detach(&(mb->parent.parent));
|
||||||
|
@ -1458,7 +1458,7 @@ rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag)
|
||||||
mb->parent.parent.flag = flag;
|
mb->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mb->parent));
|
_ipc_object_init(&(mb->parent));
|
||||||
|
|
||||||
/* initialize mailbox */
|
/* initialize mailbox */
|
||||||
mb->size = size;
|
mb->size = size;
|
||||||
|
@ -1498,10 +1498,10 @@ rt_err_t rt_mb_delete(rt_mailbox_t mb)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent) == RT_FALSE);
|
RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent) == RT_FALSE);
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
||||||
|
|
||||||
/* also resume all mailbox private suspended thread */
|
/* also resume all mailbox private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
||||||
|
|
||||||
/* free mailbox pool */
|
/* free mailbox pool */
|
||||||
RT_KERNEL_FREE(mb->msg_pool);
|
RT_KERNEL_FREE(mb->msg_pool);
|
||||||
|
@ -1570,7 +1570,7 @@ rt_err_t rt_mb_send_wait(rt_mailbox_t mb,
|
||||||
|
|
||||||
RT_DEBUG_IN_THREAD_CONTEXT;
|
RT_DEBUG_IN_THREAD_CONTEXT;
|
||||||
/* suspend current thread */
|
/* suspend current thread */
|
||||||
_rt_ipc_list_suspend(&(mb->suspend_sender_thread),
|
_ipc_list_suspend(&(mb->suspend_sender_thread),
|
||||||
thread,
|
thread,
|
||||||
mb->parent.parent.flag);
|
mb->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -1637,7 +1637,7 @@ rt_err_t rt_mb_send_wait(rt_mailbox_t mb,
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&mb->parent.suspend_thread))
|
if (!rt_list_isempty(&mb->parent.suspend_thread))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mb->parent.suspend_thread));
|
_ipc_list_resume(&(mb->parent.suspend_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -1718,7 +1718,7 @@ rt_err_t rt_mb_urgent(rt_mailbox_t mb, rt_ubase_t value)
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&mb->parent.suspend_thread))
|
if (!rt_list_isempty(&mb->parent.suspend_thread))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mb->parent.suspend_thread));
|
_ipc_list_resume(&(mb->parent.suspend_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -1792,7 +1792,7 @@ rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout)
|
||||||
|
|
||||||
RT_DEBUG_IN_THREAD_CONTEXT;
|
RT_DEBUG_IN_THREAD_CONTEXT;
|
||||||
/* suspend current thread */
|
/* suspend current thread */
|
||||||
_rt_ipc_list_suspend(&(mb->parent.suspend_thread),
|
_ipc_list_suspend(&(mb->parent.suspend_thread),
|
||||||
thread,
|
thread,
|
||||||
mb->parent.parent.flag);
|
mb->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -1855,7 +1855,7 @@ rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout)
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&(mb->suspend_sender_thread)))
|
if (!rt_list_isempty(&(mb->suspend_sender_thread)))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mb->suspend_sender_thread));
|
_ipc_list_resume(&(mb->suspend_sender_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -1899,9 +1899,9 @@ rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg)
|
||||||
level = rt_hw_interrupt_disable();
|
level = rt_hw_interrupt_disable();
|
||||||
|
|
||||||
/* resume all waiting thread */
|
/* resume all waiting thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
_ipc_list_resume_all(&(mb->parent.suspend_thread));
|
||||||
/* also resume all mailbox private suspended thread */
|
/* also resume all mailbox private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
_ipc_list_resume_all(&(mb->suspend_sender_thread));
|
||||||
|
|
||||||
/* re-init mailbox */
|
/* re-init mailbox */
|
||||||
mb->entry = 0;
|
mb->entry = 0;
|
||||||
|
@ -1960,7 +1960,7 @@ rt_err_t rt_mq_init(rt_mq_t mq,
|
||||||
mq->parent.parent.flag = flag;
|
mq->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mq->parent));
|
_ipc_object_init(&(mq->parent));
|
||||||
|
|
||||||
/* set message pool */
|
/* set message pool */
|
||||||
mq->msg_pool = msgpool;
|
mq->msg_pool = msgpool;
|
||||||
|
@ -2008,9 +2008,9 @@ rt_err_t rt_mq_detach(rt_mq_t mq)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent));
|
RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent));
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&mq->parent.suspend_thread);
|
_ipc_list_resume_all(&mq->parent.suspend_thread);
|
||||||
/* also resume all message queue private suspended thread */
|
/* also resume all message queue private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
||||||
|
|
||||||
/* detach message queue object */
|
/* detach message queue object */
|
||||||
rt_object_detach(&(mq->parent.parent));
|
rt_object_detach(&(mq->parent.parent));
|
||||||
|
@ -2050,7 +2050,7 @@ rt_mq_t rt_mq_create(const char *name,
|
||||||
mq->parent.parent.flag = flag;
|
mq->parent.parent.flag = flag;
|
||||||
|
|
||||||
/* initialize ipc object */
|
/* initialize ipc object */
|
||||||
_rt_ipc_object_init(&(mq->parent));
|
_ipc_object_init(&(mq->parent));
|
||||||
|
|
||||||
/* initialize message queue */
|
/* initialize message queue */
|
||||||
|
|
||||||
|
@ -2108,9 +2108,9 @@ rt_err_t rt_mq_delete(rt_mq_t mq)
|
||||||
RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent) == RT_FALSE);
|
RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent) == RT_FALSE);
|
||||||
|
|
||||||
/* resume all suspended thread */
|
/* resume all suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mq->parent.suspend_thread));
|
_ipc_list_resume_all(&(mq->parent.suspend_thread));
|
||||||
/* also resume all message queue private suspended thread */
|
/* also resume all message queue private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
||||||
|
|
||||||
/* free message queue pool */
|
/* free message queue pool */
|
||||||
RT_KERNEL_FREE(mq->msg_pool);
|
RT_KERNEL_FREE(mq->msg_pool);
|
||||||
|
@ -2192,7 +2192,7 @@ rt_err_t rt_mq_send_wait(rt_mq_t mq,
|
||||||
|
|
||||||
RT_DEBUG_IN_THREAD_CONTEXT;
|
RT_DEBUG_IN_THREAD_CONTEXT;
|
||||||
/* suspend current thread */
|
/* suspend current thread */
|
||||||
_rt_ipc_list_suspend(&(mq->suspend_sender_thread),
|
_ipc_list_suspend(&(mq->suspend_sender_thread),
|
||||||
thread,
|
thread,
|
||||||
mq->parent.parent.flag);
|
mq->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -2278,7 +2278,7 @@ rt_err_t rt_mq_send_wait(rt_mq_t mq,
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&mq->parent.suspend_thread))
|
if (!rt_list_isempty(&mq->parent.suspend_thread))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mq->parent.suspend_thread));
|
_ipc_list_resume(&(mq->parent.suspend_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -2386,7 +2386,7 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&mq->parent.suspend_thread))
|
if (!rt_list_isempty(&mq->parent.suspend_thread))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mq->parent.suspend_thread));
|
_ipc_list_resume(&(mq->parent.suspend_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -2468,7 +2468,7 @@ rt_err_t rt_mq_recv(rt_mq_t mq,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* suspend current thread */
|
/* suspend current thread */
|
||||||
_rt_ipc_list_suspend(&(mq->parent.suspend_thread),
|
_ipc_list_suspend(&(mq->parent.suspend_thread),
|
||||||
thread,
|
thread,
|
||||||
mq->parent.parent.flag);
|
mq->parent.parent.flag);
|
||||||
|
|
||||||
|
@ -2544,7 +2544,7 @@ rt_err_t rt_mq_recv(rt_mq_t mq,
|
||||||
/* resume suspended thread */
|
/* resume suspended thread */
|
||||||
if (!rt_list_isempty(&(mq->suspend_sender_thread)))
|
if (!rt_list_isempty(&(mq->suspend_sender_thread)))
|
||||||
{
|
{
|
||||||
_rt_ipc_list_resume(&(mq->suspend_sender_thread));
|
_ipc_list_resume(&(mq->suspend_sender_thread));
|
||||||
|
|
||||||
/* enable interrupt */
|
/* enable interrupt */
|
||||||
rt_hw_interrupt_enable(temp);
|
rt_hw_interrupt_enable(temp);
|
||||||
|
@ -2590,9 +2590,9 @@ rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg)
|
||||||
level = rt_hw_interrupt_disable();
|
level = rt_hw_interrupt_disable();
|
||||||
|
|
||||||
/* resume all waiting thread */
|
/* resume all waiting thread */
|
||||||
_rt_ipc_list_resume_all(&mq->parent.suspend_thread);
|
_ipc_list_resume_all(&mq->parent.suspend_thread);
|
||||||
/* also resume all message queue private suspended thread */
|
/* also resume all message queue private suspended thread */
|
||||||
_rt_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
_ipc_list_resume_all(&(mq->suspend_sender_thread));
|
||||||
|
|
||||||
/* release all message in the queue */
|
/* release all message in the queue */
|
||||||
while (mq->msg_queue_head != RT_NULL)
|
while (mq->msg_queue_head != RT_NULL)
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
* 2013-12-21 Grissiom add rt_critical_level
|
* 2013-12-21 Grissiom add rt_critical_level
|
||||||
* 2018-11-22 Jesven remove the current task from ready queue
|
* 2018-11-22 Jesven remove the current task from ready queue
|
||||||
* add per cpu ready queue
|
* add per cpu ready queue
|
||||||
* add _rt_get_highest_priority_thread to find highest priority task
|
* add _scheduler_get_highest_priority_thread to find highest priority task
|
||||||
* rt_schedule_insert_thread won't insert current task to ready queue
|
* rt_schedule_insert_thread won't insert current task to ready queue
|
||||||
* in smp version, rt_hw_context_switch_interrupt maybe switch to
|
* in smp version, rt_hw_context_switch_interrupt maybe switch to
|
||||||
* new task directly
|
* new task directly
|
||||||
|
@ -114,7 +114,7 @@ static void _rt_scheduler_stack_check(struct rt_thread *thread)
|
||||||
* get the highest priority thread in ready queue
|
* get the highest priority thread in ready queue
|
||||||
*/
|
*/
|
||||||
#ifdef RT_USING_SMP
|
#ifdef RT_USING_SMP
|
||||||
static struct rt_thread* _rt_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||||
{
|
{
|
||||||
register struct rt_thread *highest_priority_thread;
|
register struct rt_thread *highest_priority_thread;
|
||||||
register rt_ubase_t highest_ready_priority, local_highest_ready_priority;
|
register rt_ubase_t highest_ready_priority, local_highest_ready_priority;
|
||||||
|
@ -150,7 +150,7 @@ static struct rt_thread* _rt_get_highest_priority_thread(rt_ubase_t *highest_pri
|
||||||
return highest_priority_thread;
|
return highest_priority_thread;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static struct rt_thread* _rt_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
static struct rt_thread* _scheduler_get_highest_priority_thread(rt_ubase_t *highest_prio)
|
||||||
{
|
{
|
||||||
register struct rt_thread *highest_priority_thread;
|
register struct rt_thread *highest_priority_thread;
|
||||||
register rt_ubase_t highest_ready_priority;
|
register rt_ubase_t highest_ready_priority;
|
||||||
|
@ -239,7 +239,7 @@ void rt_system_scheduler_start(void)
|
||||||
register struct rt_thread *to_thread;
|
register struct rt_thread *to_thread;
|
||||||
rt_ubase_t highest_ready_priority;
|
rt_ubase_t highest_ready_priority;
|
||||||
|
|
||||||
to_thread = _rt_get_highest_priority_thread(&highest_ready_priority);
|
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||||
|
|
||||||
#ifdef RT_USING_SMP
|
#ifdef RT_USING_SMP
|
||||||
to_thread->oncpu = rt_hw_cpu_id();
|
to_thread->oncpu = rt_hw_cpu_id();
|
||||||
|
@ -327,7 +327,7 @@ void rt_schedule(void)
|
||||||
|
|
||||||
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
||||||
{
|
{
|
||||||
to_thread = _rt_get_highest_priority_thread(&highest_ready_priority);
|
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||||
current_thread->oncpu = RT_CPU_DETACHED;
|
current_thread->oncpu = RT_CPU_DETACHED;
|
||||||
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||||
{
|
{
|
||||||
|
@ -425,7 +425,7 @@ void rt_schedule(void)
|
||||||
/* need_insert_from_thread: need to insert from_thread to ready queue */
|
/* need_insert_from_thread: need to insert from_thread to ready queue */
|
||||||
int need_insert_from_thread = 0;
|
int need_insert_from_thread = 0;
|
||||||
|
|
||||||
to_thread = _rt_get_highest_priority_thread(&highest_ready_priority);
|
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||||
|
|
||||||
if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
if ((rt_current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||||
{
|
{
|
||||||
|
@ -576,7 +576,7 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||||
|
|
||||||
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
if (rt_thread_ready_priority_group != 0 || pcpu->priority_group != 0)
|
||||||
{
|
{
|
||||||
to_thread = _rt_get_highest_priority_thread(&highest_ready_priority);
|
to_thread = _scheduler_get_highest_priority_thread(&highest_ready_priority);
|
||||||
current_thread->oncpu = RT_CPU_DETACHED;
|
current_thread->oncpu = RT_CPU_DETACHED;
|
||||||
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
if ((current_thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_RUNNING)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue