Esempio n. 1
0
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();
}
Esempio n. 2
0
/**
 * 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);
}
Esempio n. 4
0
/**
 * 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;
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
    }
}
Esempio n. 7
0
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();
}
Esempio n. 8
0
static void timer_timeout(void* parameter)
{
    rt_device_control(dev_beep, RT_DEVICE_CTRL_BEEP_STOP, RT_NULL);
    rt_timer_detach(&timer);
}