Пример #1
0
/* Available in: thread. */
int tt_wq_wait_event_timeout (TT_WQ_T *wait_queue, uint32_t msec)
{
    __TIMEOUT_WQ_T wq_args;

    wq_args.wait_queue	= wait_queue;
    wq_args.thread		= tt_thread_self ();

    if (tt_is_irq_disabled ())
    {
        int i;
        __tt_wq_add_event (wait_queue);

        for (i = 0; tt_is_irq_disabled (); ++i)
            tt_enable_irq ();

        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_schedule_timeout);
        tt_timer_kill (&wq_args.timer);

        while (i-- != 0)
            tt_disable_irq ();
    }
    else
    {
        tt_timer_start (&wq_args.timer, __tt_wq_wakeup, &wq_args, msec);
        tt_syscall ((void *)&wq_args, __tt_wq_wait_event_timeout);
        tt_timer_kill (&wq_args.timer);
    }
    return wq_args.result;
}
Пример #2
0
/* Available in: irq, thread. */
void tt_wq_set_event (TT_WQ_T *wait_queue)
{
	if (tt_is_irq_disabled ())
		__tt_wq_set_event (wait_queue);
	else
		tt_syscall ((void *)wait_queue, __tt_wq_set_event);
}
Пример #3
0
/* Available in: thread (interruptable). */
void tt_wq_wait_event (TT_WQ_T *wait_queue)
{
	if (tt_is_irq_disabled ())
	{
		int i;
		__tt_wq_add_event (wait_queue);
		
		for (i = 0; tt_is_irq_disabled (); ++i)
			tt_enable_irq ();
		
		tt_syscall (NULL, __tt_schedule);
		
		while (i-- != 0)
			tt_disable_irq ();
	}
	else
		tt_syscall ((void *)wait_queue, __tt_wq_wait_event);
}
Пример #4
0
void tt_set_priority (TT_THREAD_T *thread, unsigned char priority)
{
	__SET_PRIORITY_T set_priority_arg;
	set_priority_arg.thread		= thread;
	set_priority_arg.priority	= priority;
#ifdef	TT_SUPPORT_MUTEX
	set_priority_arg.inherit	= false;
#endif	// TT_SUPPORT_MUTEX
	tt_syscall ((void *)&set_priority_arg, __tt_set_priority);
}
Пример #5
0
/* Available in: thread. */
void tt_thread_yield (void)
{
	tt_syscall (NULL, __tt_schedule_yield);
}
Пример #6
0
/* Available in: thread. */
void tt_thread_exit (void)
{
	tt_syscall (NULL, tt_schedule_remove);
}