void rt_rms_exit(void) { struct rt_rms *rms; register rt_base_t level; /* get current rms */ rms = rt_current_rms; /* disable interrupt */ level = rt_hw_interrupt_disable(); /* remove from schedule */ rt_schedule_remove_rms(rms); /* change stat */ rms->thread->stat = RT_RMS_CLOSE; /* remove it from timer list */ rt_timer_detach(&rms->rms_timer); rt_timer_detach(&rms->thread->thread_timer); if(rt_object_is_systemobject((rt_object_t)rms->thread) == RT_TRUE) { rt_object_detach((rt_object_t)rms->thread); } rt_list_remove(&(rms->thread->tlist)); rt_list_remove(&(rms->rlist)); /* enable interrupt */ rt_hw_interrupt_enable(level); /* switch to next task */ rt_schedule(); }
/** * This task will delete the rms task */ rt_err_t rt_rms_delete(rt_rms_t rms) { RT_ASSERT(rms != RT_NULL); rt_timer_detach(&rms->thread->thread_timer); rt_timer_detach(&rms->rms_timer); rms->thread->stat = RT_RMS_CLOSE; rt_object_detach((rt_object_t)rms->thread); rt_list_remove(&(rms->thread->tlist)); rt_list_remove(&(rms->rlist)); return RT_RMS_EOK; }
static void _tc_cleanup() { /* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */ rt_enter_critical(); /* 执行定时器脱离 */ rt_timer_detach(&timer1); rt_timer_detach(&timer2); /* 调度器解锁 */ rt_exit_critical(); /* 设置TestCase状态 */ tc_done(TC_STAT_PASSED); }
/** * This function will delete a thread. The thread object will be removed from * thread queue and detached/deleted from system object management. * * @param thread the thread to be deleted * * @return the operation status, RT_EOK on OK, -RT_ERROR on error * */ rt_err_t rt_thread_delete(rt_thread_t thread) { rt_base_t lock; /* thread check */ RT_ASSERT(thread != RT_NULL); /* remove from schedule */ rt_schedule_remove_thread(thread); /* release thread timer */ rt_timer_detach(&(thread->thread_timer)); /* change stat */ thread->stat = RT_THREAD_CLOSE; /* disable interrupt */ lock = rt_hw_interrupt_disable(); /* insert to defunct thread list */ rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); /* enable interrupt */ rt_hw_interrupt_enable(lock); return RT_EOK; }
void rtgui_timer_destory(rtgui_timer_t* timer) { RT_ASSERT(timer != RT_NULL); /* stop timer firstly */ rtgui_timer_stop(timer); /* detach rt-thread timer */ rt_timer_detach(&(timer->timer)); rtgui_free(timer); }
void rtgui_timer_destory(rtgui_timer_t *timer) { RT_ASSERT(timer != RT_NULL); /* stop timer firstly */ rtgui_timer_stop(timer); if (timer->pending_cnt != 0 && timer->app->ref_count != 0) { timer->state = RTGUI_TIMER_ST_DESTROY_PENDING; } else { /* detach rt-thread timer */ rt_timer_detach(&(timer->timer)); rtgui_free(timer); } }
void rt_thread_exit(void) { struct rt_thread *thread; register rt_base_t level; /* get current thread */ thread = rt_current_thread; /* disable interrupt */ level = rt_hw_interrupt_disable(); /* remove from schedule */ rt_schedule_remove_thread(thread); /* change stat */ thread->stat = RT_THREAD_CLOSE; /* remove it from timer list */ rt_timer_detach(&thread->thread_timer); if ((rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) && thread->cleanup == RT_NULL) { rt_object_detach((rt_object_t)thread); } else { /* insert to defunct thread list */ rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); } /* enable interrupt */ rt_hw_interrupt_enable(level); /* switch to next task */ rt_schedule(); }
static void timer_timeout(void* parameter) { rt_device_control(dev_beep, RT_DEVICE_CTRL_BEEP_STOP, RT_NULL); rt_timer_detach(&timer); }