void taskpool_init( int c, int n, int m ) { log_3("taskpool_init %d %d %d - enter\n",c,n,m); log_0("taskpool_init - allocating taskpool\n"); feldspar_taskpool = malloc(sizeof(struct taskpool)); log_1("taskpool_init - allocating %d closures\n",c); feldspar_taskpool->closures = malloc( c * sizeof(void*) ); feldspar_taskpool->capacity = c; feldspar_taskpool->head = 0; feldspar_taskpool->tail = 0; feldspar_taskpool->shutdown = 0; feldspar_taskpool->num_threads = n; feldspar_taskpool->act_threads = n; feldspar_taskpool->min_threads = m; feldspar_taskpool->max_threads = n; if( n > 0 ) pthread_mutex_init( &(feldspar_taskpool->mutex), NULL ); log_1("taskpool_init - starting %d threads\n",n); for( ; n > 0; --n ) { pthread_t th; pthread_create( &th, NULL, &worker, NULL ); log_1("taskpool_init - thread %p created\n", &th); } log_0("taskpool_init - leave\n"); }
void taskpool_shutdown() { log_0("taskpool_shutdown - enter\n"); feldspar_taskpool->shutdown = 1; log_0("taskpool_shutdown - leave\n"); }
void app_main(void *data) { EatEvent_st event; u16 len = 0; EatUartConfig_st uart_config; eat_bool ret; APP_InitRegions();//Init app RAM APP_init_clib(); //C library initialize, second step #if 0 if(eat_uart_open(EAT_UART_1 ) == EAT_FALSE) { eat_trace("[%s] uart(%d) open fail!", __FUNCTION__, EAT_UART_1); } uart_config.baud = EAT_UART_BAUD_115200; uart_config.dataBits = EAT_UART_DATA_BITS_8; uart_config.parity = EAT_UART_PARITY_NONE; uart_config.stopBits = EAT_UART_STOP_BITS_1; if(EAT_FALSE == eat_uart_set_config(EAT_UART_1, &uart_config)) { eat_trace("[%s] uart(%d) set config fail!", __FUNCTION__, EAT_UART_1); } #endif log_0("app_main ENTRY"); Gpio_init(); ret = eat_mem_init(s_memPool,EAT_MEM_MAX_SIZE); if (!ret) log_0("ERROR: eat memory initial error!"); eat_timer_start(TIMER_SOFT_RESET,600000); at_cluster(); while(EAT_TRUE) { eat_get_event(&event); log_2("MSG id%x", event.event); switch(event.event) { case EAT_EVENT_TIMER : { EatTimer_enum timer_id = event.data.timer.timer_id; timer_hdlr(timer_id); } break; case EAT_EVENT_INT : log_0("INTERRUPT IS COMING"); if(get_key())/*donw = 1 */ key_hdlr(); break; case EAT_EVENT_USER_MSG: { u8 data = event.data.user_msg.data[0]; set_debounce(data); } break; case EAT_EVENT_KEY: { eat_bool press = event.data.key.is_pressed; log_0("power key"); pwrkey_hdlr(press); } break; case EAT_EVENT_MDM_READY_WR: break; case EAT_EVENT_UART_READY_RD: log_2("EAT_EVENT_UART_READY_RD"); break; case EAT_EVENT_MDM_READY_RD: { len = 0; /* boot info(such as:RDY ;+CFUN: 1 ;+CPIN: READY) * will be sent to here(main task); */ len = eat_modem_read(buf, 2048); /*necessary:Read it out*/ buf[len] = 0; log_2("main task buf (%s)",buf); #if 0 if(core_is_ready(buf)) { eat_trace("core is ready"); eat_timer_start(TIMER_SOFT_RESET,600000); at_cluster(); } #endif } break; case EAT_EVENT_UART_SEND_COMPLETE : break; default: break; } } }