/* 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); } }
void real_time_task(void) { while(1) { console_put_string("This is a real-time task\n"); si_wait_n_ms(5000); } }
/* 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); } }
/* 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); } }
/* 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); } }
/* 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); } }
/* 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); } }