From e6cd32a1adf5417b54c11c6ee015a5f2a9764989 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 24 Dec 2021 16:24:45 -0500 Subject: [PATCH] =?UTF-8?q?[kernel]=20=E5=B0=86rt=5Fthread=5Ftimeout?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=B8=BA=E7=A7=81=E6=9C=89=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/rtthread.h | 1 - src/thread.c | 77 +++++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/include/rtthread.h b/include/rtthread.h index 393b40b1b6..d18355c426 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -155,7 +155,6 @@ rt_err_t rt_thread_mdelay(rt_int32_t ms); rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg); rt_err_t rt_thread_suspend(rt_thread_t thread); rt_err_t rt_thread_resume(rt_thread_t thread); -void rt_thread_timeout(void *parameter); #ifdef RT_USING_SIGNALS void rt_thread_alloc_sig(rt_thread_t tid); diff --git a/src/thread.c b/src/thread.c index d1eb2d01e5..090f5f1ef7 100644 --- a/src/thread.c +++ b/src/thread.c @@ -105,6 +105,43 @@ static void _thread_exit(void) rt_schedule(); } +/** + * @brief This function is the timeout function for thread, normally which is invoked + * when thread is timeout to wait some resource. + * + * @param parameter is the parameter of thread timeout function + */ +static void _thread_timeout(void *parameter) +{ + struct rt_thread *thread; + register rt_base_t temp; + + thread = (struct rt_thread *)parameter; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* set error number */ + thread->error = -RT_ETIMEOUT; + + /* remove from suspend list */ + rt_list_remove(&(thread->tlist)); + + /* insert to schedule ready list */ + rt_schedule_insert_thread(thread); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* do schedule */ + rt_schedule(); +} + static rt_err_t _thread_init(struct rt_thread *thread, const char *name, void (*entry)(void *parameter), @@ -173,7 +210,7 @@ static rt_err_t _thread_init(struct rt_thread *thread, /* initialize thread timer */ rt_timer_init(&(thread->thread_timer), thread->name, - rt_thread_timeout, + _thread_timeout, thread, 0, RT_TIMER_FLAG_ONE_SHOT); @@ -854,44 +891,6 @@ rt_err_t rt_thread_resume(rt_thread_t thread) } RTM_EXPORT(rt_thread_resume); -/** - * @brief This function is the timeout function for thread, normally which is invoked - * when thread is timeout to wait some resource. - * - * @param parameter is the parameter of thread timeout function - */ -void rt_thread_timeout(void *parameter) -{ - struct rt_thread *thread; - register rt_base_t temp; - - thread = (struct rt_thread *)parameter; - - /* thread check */ - RT_ASSERT(thread != RT_NULL); - RT_ASSERT((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND); - RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); - - /* disable interrupt */ - temp = rt_hw_interrupt_disable(); - - /* set error number */ - thread->error = -RT_ETIMEOUT; - - /* remove from suspend list */ - rt_list_remove(&(thread->tlist)); - - /* insert to schedule ready list */ - rt_schedule_insert_thread(thread); - - /* enable interrupt */ - rt_hw_interrupt_enable(temp); - - /* do schedule */ - rt_schedule(); -} -RTM_EXPORT(rt_thread_timeout); - /** * @brief This function will find the specified thread. * -- GitLab