Exemplo n.º 1
0
void control_init(void){
  /*Inicialitza el mòdul de control. ës imprescindible cridar la funció
    abans d'usar el mòdul. Una vegada inicialitzat deixa els semàfors
    apagats i cal engegar-los explícitament.*/
  
  /*Inicialitza el timer y activa les interrupcions.*/
  //Inicialitza els Semafors A i B, amb els seus ports corresponents.
  semaph_init(&(SemA.state), &PORTD, 5, &PORTD, 6, &PORTD, 7);    
  semaph_init(&(SemB.state), &PORTD, 4, &PORTC, 3, &PORTC, 2);
  //Posa a l'estat d'apagat els semafors.
  semaph_set(&(SemA.state),SemOff);                             
  semaph_set(&(SemB.state),SemOff);
  //Indiquem a la variable global que estemx a l'estat d'off.
  (control).estat = Off;
  timer_init();
  i=timer_every(TIMER_MS(100),control_change);
  //Activem interrupcions
  sei();
}
Exemplo n.º 2
0
int wthreads_init() {
	// create queues for working threads
	int err;
	if(err = rqueue_init(&unprot_queue_g, unprot_queue_data_g, MAX_QUEUE_SIZE)) 
		return err;
	if(err = rqueue_init(&sync_queue_g, sync_queue_data_g, MAX_QUEUE_SIZE)) 
		return err;

	// start working threads
	if(semaph_init(&init_sem_g, 0))
		return -1;
	pthread_t dummy_pthread;
	if(pthread_create(&dummy_pthread, 0, unprot_thread, 0)) {
		fprintf(stderr, "wthread_init: can\'t start unprot thread\n");
		return -1;
	}
	if(pthread_create(&dummy_pthread, 0, sync_thread, 0)) {
		fprintf(stderr, "wthread_init: can\'t start sync thread\n");
		unprot_quit();
		return -1;
	}
	// set exit handlers
	if(semaph_wait(&init_sem_g) || semaph_wait(&init_sem_g) ||
		 atexit(unprot_quit) || atexit(sync_quit)) {
		fprintf(stderr, "wthread_init: can\'t finish initialization\n");
		unprot_quit();
		sync_quit();
	}
	// add to immute threads
	if(immune_nthreads_g + 2 > MAX_NTHREADS) {
		fprintf(stderr, "wthread_init: too many immune threads\n");
		unprot_quit();
		sync_quit();
	}
	immune_threads_g[immune_nthreads_g++] = unprot_thread_g;
	immune_threads_g[immune_nthreads_g++] = sync_thread_g;

	// destroy initialization semaphore
	semaph_destroy(&init_sem_g);

	return 0;
}  // wthread_init