void task_L(void* data) { rt_sem_p(&syncsem,TM_INFINITE); rt_sem_p(&semA,TM_INFINITE); int prio = rt_task_set_priority(NULL,99); rt_printf("L : I got A\n"); busy_wait_ms(3); rt_sem_p(&semB,TM_INFINITE); busy_wait_ms(3); print_pri(NULL,(char) data); rt_sem_v(&semB); rt_sem_v(&semA); }
bool EcMaster::start() throw(EcError) { #ifdef HRT rt_task_set_priority(&master,0); if (asprintf(&devnameOutput, "/proc/xenomai/registry/rtipc/xddp/%s", XDDP_PORT_OUTPUT) < 0) throw(EcError(EcError::FAIL_OUTPUT_LABEL)); //open the socket for the outputs fdOutput = open(devnameOutput, O_WRONLY); free(devnameOutput); if (fdOutput < 0) { perror("open"); throw(EcError(EcError::FAIL_OPENING_OUTPUT)); } if (asprintf(&devnameInput, "/proc/xenomai/registry/rtipc/xddp/%s", XDDP_PORT_INPUT) < 0) throw(EcError(EcError::FAIL_INPUT_LABEL)); //open the socket for the inputs fdInput = open(devnameInput, O_RDONLY); free(devnameInput); if (fdInput < 0) { perror("open"); throw(EcError(EcError::FAIL_OPENING_INPUT)); } /* *Create a thread for update slave inputs periodically */ sched_param sch; sch.sched_priority = 90; pthread_setschedparam(updateThread.native_handle(), SCHED_OTHER, &sch); updateThread = std::thread(&EcMaster::update_EcSlaves,this); #endif for (int i = 0 ; i < m_drivers.size() ; i++) m_drivers[i] -> start(); //wait to start correctly drivers usleep(50000); rt_printf("Master started!!! \n"); return true; }
bool EcMaster::stop() throw(EcError) { #ifdef HRT rt_task_set_priority(&master,98); #endif //Stops slaves for (int i = 0 ; i < m_drivers.size() ; i++) m_drivers[i] -> stop(); #ifdef HRT //Stops the NRT thread threadFinished = true; updateThread.join(); threadFinished = false; close(fdInput); close(fdOutput); #endif rt_printf("Master stoped!!! \n"); return true; }
int set_priority(int prio) { return rt_task_set_priority(&main_shadow_task, prio); }
int game_init(void) { int err, i; player[0].enable = 1; player[1].enable = 0; player[2].enable = 0; player[0].x = LCD_MAX_X / 2 - 8; player[0].y = LCD_MAX_Y - 20; player[0].lifes = MAX_HP; gift.enable = 0; for(i = 0; i < NB_MAX_SHOTS; i++) { shot[i].enable = 0; } for(i = 0; i < nbEnnemis; i++) { ennemi[i].enable = 1; } hp_update_leds(); err = rt_mutex_create(&mutex_ennemi, "mutex ennemi"); if (err != 0) { printk("mutex ennemi creation failed: %d\n", err); return -1; } err = rt_mutex_create(&mutex_shots, "mutex shots"); if (err != 0) { printk("mutex shots creation failed: %d\n", err); return -1; } err = rt_mutex_create(&mutex_score, "mutex score"); if (err != 0) { printk("mutex score creation failed: %d\n", err); return -1; } // Création de la tâche gérant le rafraichissement de l'écran err = rt_task_create(&refresh_task, "refresh", STACK_SIZE, 50, 0); if (err != 0) { printk("refresh creation failed: %d\n", err); return -1; } printk("Task created\n"); err = rt_task_start(&refresh_task, refresh, 0); if (err != 0) { printk("refresh task start failed: %d\n", err); return -1; } // Création de la tâche gérant le rafraichissement de l'écran err = rt_task_create(&move_task, "move_player", STACK_SIZE, 50, 0); if (err != 0) { printk("move player creation failed: %d\n", err); return -1; } printk("Task created\n"); err = rt_task_start(&move_task, move_player, 0); if (err != 0) { printk("move player start failed: %d\n", err); return -1; } err = rt_task_set_priority(&move_task, 80); if (err < 0) { printk("Switch events task set prio failed: %d\n", err); return -1; } // Création de la tâche gérant le déplacement des vaisseaux ennemis err = rt_task_create(&ennemi_task, "move_ennemi", STACK_SIZE, 50, 0); if (err != 0) { printk("ennemi task creation failed: %d\n", err); return -1; } printk("Ennemi Task created\n"); err = rt_task_start(&ennemi_task, move_ennemi, 0); if (err != 0) { printk("ennemi task start failed: %d\n", err); return -1; } // Création de la tâche gérant les tirs et les impacts err = rt_task_create (&shots_impacts_task, "shots_impacts", STACK_SIZE, 50, 0); if (err != 0) { printk("Shots & impacts task creation failed: %d\n", err); return -1; } printk("Shots & impacts task created\n"); err = rt_task_start(&shots_impacts_task, shots_impacts, 0); if (err != 0) { printk("Shots & impacts task start failed: %d\n", err); return -1; } // Création de la tâche gérant les tirs et les impacts err = rt_task_create (&missile_ennemi_task, "shots_ennemi", STACK_SIZE, 50, 0); if (err != 0) { printk("Shots ennemi task creation failed: %d\n", err); return -1; } printk("Shots ennemi task created\n"); err = rt_task_start(&missile_ennemi_task, missile_ennemi, 0); if (err != 0) { printk("Shots ennemi task start failed: %d\n", err); return -1; } // Création de la tâche gérant le gift err = rt_task_create (&gift_task, "gift", STACK_SIZE, 50, 0); if (err != 0) { printk("gift task creation failed: %d\n", err); return -1; } printk("gift task created\n"); err = rt_task_start(&gift_task, gift_weapon, 0); if (err != 0) { printk("gift task start failed: %d\n", err); return -1; } // Création de la tâche gérant les switchs err = rt_task_create (&switch_events_task, "switch_events", STACK_SIZE, 50, 0); if (err != 0) { printk("Switch events task creation failed: %d\n", err); return -1; } printk("Switch events task created\n"); err = rt_task_start(&switch_events_task, switch_events_handler, 0); if (err != 0) { printk("Switch events task start failed: %d\n", err); return -1; } /* Attribution d'un priorité plus élevée pour la lecture sur le bus i2c */ err = rt_task_set_priority(&switch_events_task, 99); if (err < 0) { printk("Switch events task set prio failed: %d\n", err); return -1; } return 0; }