예제 #1
0
파일: main.c 프로젝트: eirikpre/TTK4147
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);
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
파일: init.cpp 프로젝트: smolorz/rtros
int set_priority(int prio)
{
    return rt_task_set_priority(&main_shadow_task, prio);
}
예제 #5
0
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;


}