Example #1
0
int main(void) {
    DDRB |= 0b1111111;
    DDRA |= 0b11100001;
    PORTB = 0;

    adc_setup();
    task_setup();
    task_start();

    task_manager();
    return 0;
}
Example #2
0
int main()
{
    // Set up low level systems:
    bus_setup();
    io_setup();
    periods_setup();
    memory_setup();
    task_setup();
    midi_io_setup();
    apu_setup();
    battery_setup();
    assigner_setup();
    sequencer_setup();
    ui_sequencer_setup();
    ui_programmer_setup();

    // The task manager takes over from here
    task_manager();
}
Example #3
0
File: schedule.c Project: nis/EMP
INT16S start_rtcs_scheduler(void)
/*****************************************************************************
*   Input    :	-
*   Output   :	-
*   Function :	The RTCS scheduler
******************************************************************************/
{
    // contains temp status of semaphores.
    // INT16U semaphores_task = 0;

    ENTER_CRITICAL();
    task_setup();
    init_tasks();
    systick_init();
    EXIT_CRITICAL();

    while(1)
    {
        if (systick_get())
        {
            systick_decrement();
            for (rtcs_i = 0; rtcs_i < LAST_TASK+1; rtcs_i++)
            {
                if ((task_state[rtcs_i] == RUNNING) && (task_time[rtcs_i] > 0))
                {
                    task_time[rtcs_i]--;
                }
            }

            for (rtcs_i = 0; rtcs_i < LAST_TASK+1; rtcs_i++)
            {
                if _READY(rtcs_i)
                {
                    task_time[rtcs_i] = 0;
                    current_task = rtcs_i;
                    // Call task.
                    (*task[rtcs_i])();
                }
            }
        } // if (tick_flag)
    } // while(!)
    return 0;
}
Example #4
0
int16_t start_rtcs_scheduler(void)
/*****************************************************************************
*   Input    :	-
*   Output   :	-
*   Function :	The RTCS scheduler 
******************************************************************************/
{
	// contains temp status of semaphores.
	// INT16U semaphores_task = 0;

	ENTER_CRITICAL();
	timer0_systick_init();
	timer0_systick_start();
	task_setup();
	init_tasks();
	EXIT_CRITICAL();

	while(1)
	{
		//Simple and no good implementation of timer incrementation
		//This needs to be changed into a correct interrupt handler.
		if (Xil_In32(XSCUTIMER_0_INT_STATUS_REG) & 0x00000001)
		{
			// Clear SCUtimer interrupt flag
			Xil_Out32(XSCUTIMER_0_INT_STATUS_REG,0x00000001);

			//increment tick
			systick_increment();
			//increment systime
			systime_increment();
		}

		if (systick_get())
		{
			systick_decrement();
			for (rtcs_i = 0; rtcs_i < LAST_TASK+1; rtcs_i++)
			{
				if ((task_state[rtcs_i] == RUNNING) && (task_time[rtcs_i] > 0))
 			  	{
					task_time[rtcs_i]--;
				}	
			}	
			
			for (rtcs_i = 0; rtcs_i < LAST_TASK+1; rtcs_i++)
			{
				if _READY(rtcs_i)
				{
					task_time[rtcs_i] = 0;
					current_task = rtcs_i;
					// Call task.
					(*task[rtcs_i])();
				}
			}

			if(err_overload_hndlr != NULL)
			{
				//call overload error handler
				(*err_overload_hndlr)(systick_get()); //if tick > 0 the cpu is overloaded
			}

		}

	} // while(!)
	return 0;
}
Example #5
0
/**
 * Vstupni bod programu.
 */
int main(int argc, char **argv) {

	// inicializace MPI
	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &node);
	MPI_Comm_size(MPI_COMM_WORLD, &node_count);

	srpdebug("mpi", node, "inicializace <uzel=%d/%d>", node, node_count);

	// vsichni si poznamenaji cas spusteni tbeg
	MPI_Barrier(MPI_COMM_WORLD);
	tbeg = MPI_Wtime();

	// inicializace random seminka
	srand(time(NULL) + getpid() + node);

	// nacteni ulohy a distribuce provadi uzel 0
	if(node == 0) {
		parse_args(argc, argv);

		// nacteni ulohy
		if(!read_file(filename)) {
			srpfprintf(stderr, node, "chyba: nelze nacist zadani ulohy SRP `%s''",
				filename);
			exit(EXIT_FAILURE);
		}

		if(filename)
			free(filename);
	}

	// distribuovat zadani
	mpi_bcast_task();

	// pripravit zasobnik
	s = stack_init();

	// referencni reseni pro porovnavani
	tf = task_init(t->n, t->k, t->q);
	task_setup(tf);

	// inicializace uzlu pocatecni praci
	cc = 0; co = 0;

	// inicializace pesku
	mpi_token[TOKEN_SOLVER] = -1;
	mpi_token[TOKEN_PENALTY] = -1;

	if(node == 0) {
		mpi_solve_init();
	}

	// zaruci ze vsichni dostanou praci
	MPI_Barrier(MPI_COMM_WORLD);
	if(node > 0)
		mpi_handle();

	// resit ulohu
	mpi_solve();

	// v mpi_solve je nekonecna smycka, konec se resi volanim funkce
	// finalize();
	// this is another brick in the -Wall
	return EXIT_FAILURE;
}