Exemplo n.º 1
0
void tt_console_run(IN tt_cons_ev_handler_t ev_handler,
                    IN void *param,
                    IN tt_bool_t local)
{
    TT_ASSERT(ev_handler != NULL);

    if (!TT_OK(tt_atomic_s32_cas(&tt_s_console_running, 0, 1))) {
        TT_ERROR("console is already running");
        return;
    }

    tt_s_console_ev_handler = ev_handler;
    tt_s_console_param = param;

    if (local) {
        __console_run();
    } else {
        tt_thread_attr_t attr;

        tt_thread_attr_default(&attr);
        attr.detached = TT_TRUE;

        if (tt_thread_create(__console_thread, NULL, &attr) == NULL) {
            TT_ERROR("fail to craete console thread");
        }
    }
}
Exemplo n.º 2
0
static void tt_create_thread_nop (void)
{
	TT_THREAD_T *thread = tt_thread_create ("__tt_nop", 0, g_thread_nop_buffer, sizeof (g_thread_nop_buffer),
		tt_thread_nop_entry, NULL);
	listDetach (&thread->list_schedule);
	thread->wait_parent = NULL;
	//sysSafePrintf("%d\n", sizeof (g_thread_nop_buffer));
}
Exemplo n.º 3
0
int main()
{
	int i;

	/* The clock frequency of systick may be changed by user's application.
	   Please change the value of SYSTICK_CLOCK according to real situration */
#define TT_SYSTICK_CLOCK		22118400
	/* Initialize TinyThread */
	tt_init(TT_SYSTICK_CLOCK);
	
	/* Open LED GPIO for testing */
	DrvGPIO_Open(LED_GPIO_GREEN_GRP, LED_GPIO_GREEN_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_RED_GRP, LED_GPIO_RED_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_ICE_GRP, LED_GPIO_ICE_BIT, E_IO_OUTPUT);

	/* Create and run thread */
	arg[0].gpio_group = LED_GPIO_RED_GRP;
	arg[1].gpio_group = LED_GPIO_ISP_GRP;
	arg[2].gpio_group = LED_GPIO_ICE_GRP;
	arg[0].gpio_bit = LED_GPIO_RED_BIT;
	arg[1].gpio_bit = LED_GPIO_ISP_BIT;
	arg[2].gpio_bit = LED_GPIO_ICE_BIT;
	for (i = 0; i < THREAD_NUM; ++i)
	{
		tt_sem_init (&join_sem[i], 0);
		arg[i].join_sem = &join_sem[i];

		thread[i] = tt_thread_create("thread",			/* thread Name */
									 0,					/* thread priority */
									 stack[i],			/* stack pointer */
									 sizeof(stack[i]),	/* stack size */
									 thread_entry,		/* thread entry function */
									 (void *)&arg[i]	/* argument for thread entry function */
									 );	
	}
	
	
	/* Join threads.
	 * TinyThread does not support build-in tt_thread_join() 
	 * since it is easy to emulate by a semaphore.
	 */
	for (i = 0; i < THREAD_NUM; ++i)
		tt_sem_down (&join_sem[i]);



	/* Set LED to indicate that run to here */
	DrvGPIO_SetBit(LED_GPIO_RED_GRP, LED_GPIO_RED_BIT);		/* OFF */
	DrvGPIO_SetBit(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT);		/* OFF */
	DrvGPIO_SetBit(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT);		/* OFF */

	DrvGPIO_ClrBit(LED_GPIO_GREEN_GRP, LED_GPIO_GREEN_BIT);	/* ON */
		
	while(1);
}
Exemplo n.º 4
0
int main()
{
	int i;
	THREAD_ARG_T	arg[THREAD_NUM];
	MY_SEM_T		sem;

	/* The clock frequency of systick may be changed by user's application.
	   Please change the value of SYSTICK_CLOCK according to real situration */
#define TT_SYSTICK_CLOCK		22118400
	/* Initialize TinyThread */
	tt_init(TT_SYSTICK_CLOCK);
	
	/* Open LED GPIO for testing */
	DrvGPIO_Open(LED_GPIO_GREEN_GRP, LED_GPIO_GREEN_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_RED_GRP, LED_GPIO_RED_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_ISP_GRP, LED_GPIO_ISP_BIT, E_IO_OUTPUT);
	DrvGPIO_Open(LED_GPIO_ICE_GRP, LED_GPIO_ICE_BIT, E_IO_OUTPUT);

	/* Set semaphore value to 3, so that always 3 threads' LED is blinking */
	my_sem_init (&sem, 3);

	/* Create and run thread */
	arg[0].gpio_group = LED_GPIO_RED_GRP;
	arg[1].gpio_group = LED_GPIO_ISP_GRP;
	arg[2].gpio_group = LED_GPIO_ICE_GRP;
	arg[3].gpio_group = LED_GPIO_GREEN_GRP;
	arg[0].gpio_bit = LED_GPIO_RED_BIT;
	arg[1].gpio_bit = LED_GPIO_ISP_BIT;
	arg[2].gpio_bit = LED_GPIO_ICE_BIT;
	arg[3].gpio_bit = LED_GPIO_GREEN_BIT;

	for (i = 0; i < THREAD_NUM; ++i)
	{
		arg[i].sem = &sem;
		thread[i] = tt_thread_create("thread",			/* thread Name */
									 0,					/* thread priority */
									 stack[i],			/* stack pointer */
									 sizeof(stack[i]),	/* stack size */
									 thread_entry,		/* thread entry function */
									 (void *)&arg[i]	/* argument for thread entry function */
									 );	
	}
	

	tt_thread_exit ();
	return 0;
}
Exemplo n.º 5
0
int main()
{
	int i;

	/* The clock frequency of systick may be changed by user's application.
	   Please change the value of SYSTICK_CLOCK according to real situration */
#define TT_SYSTICK_CLOCK		22118400
	/* Initialize TinyThread */
	tt_init(TT_SYSTICK_CLOCK);
	
	/* Open LED GPIO for testing */
	_GPIO_SET_PIN_MODE(LED0_GPIO_GRP, LED0_GPIO_BIT, GPIO_PMD_OUTPUT);
	_GPIO_SET_PIN_MODE(LED1_GPIO_GRP, LED1_GPIO_BIT, GPIO_PMD_OUTPUT);
	_GPIO_SET_PIN_MODE(LED2_GPIO_GRP, LED2_GPIO_BIT, GPIO_PMD_OUTPUT);
	_GPIO_SET_PIN_MODE(LED3_GPIO_GRP, LED3_GPIO_BIT, GPIO_PMD_OUTPUT);

	/* Test threads lock by value[]
	   the element in value should be the same,
	   if not, there must be an error */
	tt_rmutex_init(&mutex);
	for(i = 0; i < THREAD_NUM; ++i)
		value[i] = 0;

	arg[0].gpio_group = LED0_GPIO_GRP;
	arg[1].gpio_group = LED1_GPIO_GRP;
	arg[2].gpio_group = LED2_GPIO_GRP;
	arg[0].gpio_bit = LED0_GPIO_BIT;
	arg[1].gpio_bit = LED1_GPIO_BIT;
	arg[2].gpio_bit = LED2_GPIO_BIT;

	for(i = THREAD_NUM; i-- != 0; )
	{
		arg[i].value = value;
		arg[i].mutex = &mutex;
		thread[i] = tt_thread_create("th", 
			0,
			stack[i], sizeof(stack[i]),
			thread_entry, (void *)&arg[i]);
	}
	
	tt_sleep(1024);
	
	while(1);
	return 0;
}
Exemplo n.º 6
0
tt_result_t tt_io_worker_create(IN tt_io_worker_t *w,
                                IN tt_iowg_t *wg,
                                IN OPT tt_io_worker_attr_t *attr)
{
    tt_io_worker_attr_t __attr;

    TT_ASSERT(w != NULL);

    if (attr == NULL) {
        tt_io_worker_attr_default(&__attr);
        attr = &__attr;
    }

    w->wg = wg;

    w->thread = tt_thread_create(__io_worker_routine, w, &attr->thread_attr);
    if (w->thread == NULL) {
        TT_ERROR("fail to create w thread");
        return TT_FAIL;
    }

    return TT_SUCCESS;
}