Exemple #1
0
/* The shall be one task for each person. All person tasks shall be implemented by the same C function, called passenger_task. */
void passenger_task(void)//TODO
{
	//printf("blaba\n");

	int id;
	int length;
	int send_task_id;
	
	int current;
	int from;
	int to;
	
	int arrived;
    int n_travels=0;

    message_data_type msg;

    /* receive id */ 
    si_message_receive((char *) &id, &length, &send_task_id);//TODO Ska vi skicka via usertask först? Sedan ändra till att ta emot msg

	printf("Person %d spawned as task %d \n", id, id_to_task_id(id));

	/* message för att be om hisstur */
	message_data_type travel_msg;
	travel_msg.type = TRAVEL_MESSAGE;
	travel_msg.id = id;
	
	current = random_level();	

	while (n_travels < 2)
    {
	
	
		arrived = 0;
		from = current;
        to = random_level();
		
	    travel_msg.from_floor = from;
    	travel_msg.to_floor = to;
		
		si_message_send((char *) &travel_msg, sizeof(travel_msg), Lift_Task_Id);

		while(!arrived)
		{
			si_message_receive((char *) &msg, &length, &send_task_id);
			
			if(msg.type == TRAVEL_DONE_MESSAGE)
			{
				arrived = 1;
			}
		}
		
		
		current = to;

		n_travels++;
		si_wait_n_ms(TIME_TO_NEW_JOURNEY);
    }
}
Exemple #2
0
void real_time_task(void)
{
    while(1)
    {
        console_put_string("This is a real-time task\n"); 
        si_wait_n_ms(5000); 
    }
}
Exemple #3
0
/* alarm_task: alarm task */ 
void alarm_task(void) 
{
    /* infinite loop */ 
    while (1)
    {	
	alarm_wait();

    display_alarm_text();
	increment_alarm();
    /* wait one second */ 
	si_wait_n_ms(1000);
    }
}
Exemple #4
0
/* move_lift_task: controls the motion of the lift */ 
void move_lift_task(void)
{
    /* message to be sent to lift task */ 
    message_data_type message; 

    /* it is a move message */ 
    message.type = MOVE_MESSAGE; 

    while (1)
    {
        /* send move message to lift task */ 
        si_message_send((char *) &message, sizeof(message), Lift_Task_Id); 

        /* it takes two seconds to move to the next floor */ 
        si_wait_n_ms(TIME_BETWEEN_FLOORS); 
    }
}
Exemple #5
0
/* The shall be one task for each person. All person tasks shall be implemented by the same C function, called passenger_task. */
void passenger_task(void)
{
	//printf("blaba\n");

	int id;
	int length;
	int send_task_id;
	
	int current;
	int from;
	int to;

    /* receive id */ 
    si_message_receive((char *) &id, &length, &send_task_id);
	
	current = random_level();	

	while (1)
    {
    	from = current;
    	to = random_level();
    	
    	
    	si_sem_wait(&mainlift->mutex);
        enter_floor(mainlift,id, current);//spawna
    	si_sem_signal(&mainlift->mutex);

    	printf("Passenger %d starting journey from %d to %d.\n", id, from, to);
    	
    	lift_travel(mainlift, id, from, to);//res
    	current = to;

    	printf("Passenger %d arrived at %d.\n", id, current);
    	
    	si_sem_wait(&mainlift->mutex);

        leave_floor(mainlift, id, current);//ta bort från våning

    	si_sem_signal(&mainlift->mutex);
    	
    	si_wait_n_ms(TIME_TO_NEW_JOURNEY);
    
    }
}
Exemple #6
0
/* clock_task: clock task */ 
void clock_task(void) 
{
    /* local copies of the current time */ 
    int hours, minutes, seconds; 

    /* infinite loop */ 
    while (1)
    {
        /* read and display current time */ 
        get_time(&hours, &minutes, &seconds); 
        display_time(hours, minutes, seconds); 

        /* increment time */ 
        increment_time(); 

        /* wait one second */ 
        si_wait_n_ms(500); 
    }
}
Exemple #7
0
/* display_task: display task */ 
void display_task(void) 
{
    /* current value of the integer number */
    int number;
    /* current noted information whether the integer number is
       odd or even (a copy of the common variable Even_Number) */
    int even_number;

    /* set GUI size */ 
    si_ui_set_size(400, 200); 

    /* set initial value for the integer number */
    set_number(100); 

    while (1) 
    {
        /* get the number and the information regarding odd or even */
        get_number(&number, &even_number);
        /* print the number */
        print_number(number, even_number);
        /* wait for a while */ 
        si_wait_n_ms(1000 + rand() % 1000); 
    }
}