示例#1
0
int main(int argc, char** argv)
{
#ifdef RAM_ONLY
    if (mlockall(MCL_FUTURE) == -1)
    {
        std::cerr << "Failed to lock memory to RAM" << std::endl;        
    }
#endif
    float husbands_2[HUSBANDS_ROWS][HUSBANDS_COL];
    float husbands_3[HUSBANDS_ROWS][HUSBANDS_COL];
    float husbands_4[HUSBANDS_ROWS][HUSBANDS_COL];
    float husbands_5[HUSBANDS_ROWS][HUSBANDS_COL];
    float wives[WIVES_ROWS][WIVES_COL];
    float wage_moments[WAGE_MOM_ROWS][WAGE_MOM_COL];
    float marr_fer_moments[MARR_MOM_ROWS][MARR_MOM_COL];
    float emp_moments[EMP_MOM_ROWS][EMP_MOM_COL];
    float general_moments[GEN_MOM_ROWS][GEN_MOM_COL];
    float* epsilon_b_arr =          new float[DRAW_B*T_MAX*SCHOOL_GROUPS*3];
    float* epsilon_f_arr =          new float[DRAW_F*T_MAX*SCHOOL_GROUPS*3];
    float* h_draws_b_arr =          new float[DRAW_B*T_MAX*SCHOOL_GROUPS*4];
    float* w_draws_b_arr =          new float[DRAW_B*T_MAX*SCHOOL_GROUPS*6];
    uint16_t* w_ability_draw_arr =  new uint16_t[DRAW_F*SCHOOL_GROUPS];
    float* h_draws_arr =            new float[DRAW_F*T_MAX*SCHOOL_GROUPS*5];
    float* w_draws_arr =            new float[DRAW_F*T_MAX*SCHOOL_GROUPS*3];
    
    float param[INIT_PARAM_ROWS];

    if (estimation_init(param, husbands_2, husbands_3, husbands_4, husbands_5, wives, wage_moments, marr_fer_moments, emp_moments, general_moments, 
                            epsilon_b_arr, epsilon_f_arr, h_draws_b_arr, w_draws_b_arr, w_ability_draw_arr, h_draws_arr, w_draws_arr))
    {

        // TODO read run_mode from input
        // TODO add "usage" function
        RunMode run_mode = TEST_MODE;
    
        switch (run_mode)
        {
            case TEST_MODE:
            {
                std::cout << "Run in test mode..." << std::endl;
                float value = estimation_f(param, husbands_2, husbands_3, husbands_4, husbands_5, wives, wage_moments, marr_fer_moments, 
                        emp_moments, general_moments, epsilon_b_arr, epsilon_f_arr, h_draws_b_arr, w_draws_b_arr, w_ability_draw_arr, h_draws_arr, w_draws_arr);
                std::cout << "Value of estimation is: " << value << std::endl;
            }
            break;
        default:
            break;
        }
    }
   
    delete[] epsilon_b_arr;
    delete[] epsilon_f_arr;
    delete[] h_draws_b_arr;
    delete[] w_draws_b_arr;
    delete[] w_ability_draw_arr;
    delete[] h_draws_arr;
    delete[] w_draws_arr;

    return 0;
}
示例#2
0
int threads_linux_init(void)
{
    int status = 0;
    int n = 0;
    int return_value = THREADS_LINUX_SUCCESS;

    // Init data
    status = sensors_init(&battery_data, &gps_data, &imu_data, &pitot_data, &pwm_read_data, &pwm_write_data, &scp1000_data, &sonar_data);
    if(status != SENSORS_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = calibration_init(&calibration_local_coordinate_system_data, &calibration_local_fields_data, &calibration_altimeter_data);
        if(status != CALIBRATION_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = gps_init(&gps_measure);
        if(status != 1)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = imu_init(&imu_measure);
        if(status != 1)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = magnetometer_init(&magnetometer_measure);
        if(status != 1)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
    	status = sonar_init(&sonar_measure);
    	if(status != 1)
    	{
    		return_value = THREADS_LINUX_FAILURE;
    	}
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = estimation_init(ESTIMATION_DO_NOT_ESTIMATE_ACCEL_BIAS, &estimation_data);
        if(status != ESTIMATION_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = control_init(&control_data);
        if(status != CONTROL_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = protocol_init();
        if(status != PROTOCOL_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = ui_init();
        if(status != UI_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    if(return_value != THREADS_LINUX_FAILURE)
    {
        status = datalogger_init();
        if(status != DATALOGGER_SUCCESS)
        {
            return_value = THREADS_LINUX_FAILURE;
        }
    }

    // Main Loop
    if(return_value != THREADS_LINUX_FAILURE)
    {
        threads_linux_timer_start_task_1();
        usleep(0.5*task_1_period_us);
        threads_linux_timer_start_task_2();
        usleep(5*task_1_period_us);

        while(quittask == 0)
        {
            #if ANU_COMPILE_FOR_OVERO
            #else
            if(datalogger_status() == DATALOGGER_RUNNING) datalogger_update_IPC();
            #endif
            if(++n>100)
            {
                if(datalogger_status() == DATALOGGER_RUNNING) datalogger_write_file();
                n = 0;
            }
            usleep(5*task_1_period_us);
        }

        threads_linux_timer_stop_task_1();
        usleep(TASK1_PERIOD_US);
        threads_linux_timer_stop_task_2();
        usleep(TASK2_PERIOD_US);
    }

    status = datalogger_close();
    if(status != DATALOGGER_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = ui_close();
    if(status != UI_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = protocol_close();
    if(status != PROTOCOL_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = control_close();
    if(status != CONTROL_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = estimation_close(&estimation_data);
    if(status != ESTIMATION_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = magnetometer_close(&magnetometer_measure);
    if(status != 1)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = imu_close(&imu_measure);
    if(status != 1)
    {
        return_value = THREADS_LINUX_FAILURE;
    }
    status = gps_close(&gps_measure);
    if(status != 1)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = calibration_close(&calibration_local_coordinate_system_data, &calibration_local_fields_data, &calibration_altimeter_data);
    if(status != CALIBRATION_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    status = sensors_close();
    if(status != SENSORS_SUCCESS)
    {
        return_value = THREADS_LINUX_FAILURE;
    }

    return return_value;
}