Пример #1
0
static inline void tbx_receive_core(TBX *tbx, void *msg, int *msg_size, unsigned char type, unsigned char *lock)
{
	char *temp;

	temp = msg;    
	if (type == TYPE_BROADCAST) {
		if (*tbx->bcbadr == TYPE_NONE) {
			tbxget(tbx, (char **)(&temp), *msg_size);
			if (tbx->waiting_nr > 0) {
				memcpy((char*)(tbx->bcbadr+sizeof(type)), msg, *msg_size);
				*tbx->bcbadr = TYPE_BROADCAST;
				*lock = 1;
			} else {
				rt_sem_broadcast(&(tbx->bcbsmx));
			}
			*msg_size = 0;
		} else {
			memcpy(msg, (char*)(tbx->bcbadr+sizeof(type)), *msg_size);
			*msg_size = 0;                
			if (tbx->waiting_nr == 0) {
				*tbx->bcbadr = TYPE_NONE;
				rt_sem_broadcast(&(tbx->bcbsmx));
            		} else {
				*lock = 1;
			}
		}
	} else {
		*msg_size = tbxget(tbx, (char **)(&temp), *msg_size);
	}
}
Пример #2
0
static void event(void *cookie)
{
	int err;

	err = rt_task_set_periodic(NULL,
				   TM_NOW,
				   rt_timer_ns2ticks(sampling_period));
	if (err) {
		warning("failed to enter periodic timing (%s)\n",
			symerror(err));
		return;
	}

	for (;;) {
		err = rt_task_wait_period(NULL);
		if (err) {
			if (err != -ETIMEDOUT)
			       exit(EXIT_FAILURE);
			late++;
		}

		switch_count++;
		err = rt_sem_broadcast(&switch_sem);
		switch_tsc = rt_timer_tsc();
		if (err) {
			if (err != -EIDRM && err != -EINVAL)
				warning("failed to broadcast semaphore (%s)\n",
					symerror(err));
			break;
		}
	}
}
Пример #3
0
int main(){
	mlockall(MCL_CURRENT|MCL_FUTURE);
	rt_print_auto_init(1);
	rt_sem_create(&semaphore, "sem", 1, S_PRIO);
	rt_sem_create(&synca, "sync", 0, S_PRIO);
	rt_mutex_create(&mutex, "mutex");

	RT_TASK L, M, H;
	
	rt_task_shadow(NULL, "main", 4, T_CPU(1)|T_JOINABLE);

	rt_task_create(&L, "low", 0, 1, T_CPU(1)|T_JOINABLE);
	rt_task_create(&M, "medium", 0, 2, T_CPU(1)|T_JOINABLE);
	rt_task_create(&H, "high", 0, 3, T_CPU(1)|T_JOINABLE);

	rt_task_start(&L, &low, (void*) 0);
	rt_task_start(&M, &medium, (void*) 0);
	rt_task_start(&H, &high, (void*) 0);

	usleep(100000);
	rt_printf("RELEASING SYNC\n");
	
	rt_sem_broadcast(&synca);

	rt_task_join(&L);
	rt_task_join(&M);
	rt_task_join(&H);

	rt_sem_delete(&synca);
	rt_sem_delete(&semaphore);
	rt_mutex_delete(&mutex);

	return 0;
}
Пример #4
0
int main(int argc, char* argv[])
{
 
  // Perform auto-init of rt_print buffers if the task doesn't do so
  rt_print_auto_init(1);
 
  // Lock memory : avoid memory swapping for this program
  mlockall(MCL_CURRENT|MCL_FUTURE);
 
  rt_printf("starting tasks\n");
 
  int res = rt_sem_create(&semGlobal, "a", 0, S_PRIO);
  if(res < 0) rt_printf("Failed to create semaphore; error: %d: %s", res, strerror(-res));

  rt_task_create(&task1, "t1", 0, 10, 0);
  rt_task_create(&task2, "t2", 0, 20, 0);
  rt_task_create(&task3, "t3", 0, 30, 0);
  rt_task_create(&task4, "t4", 0, 40, 0);
  rt_task_create(&task5, "t5", 0, 50, 0);
 

  int a1 = 1;
  int a2 = 2;
  int a3 = 3;
  int a4 = 4;
  int a5 = 5;
  
  rt_task_start(&task1, &task, &a1);
  rt_task_start(&task2, &task, &a2);
  rt_task_start(&task3, &task, &a3);
  rt_task_start(&task4, &task, &a4);
  rt_task_start(&task5, &task, &a5);

  rt_sem_broadcast(&semGlobal);
}
Пример #5
0
int main(int argc, char *const argv[])
{
	int ret;

	traceobj_init(&trobj, argv[0], 0);

	ret = rt_sem_create(&sem, "SEMA", 0, S_FIFO);
	traceobj_check(&trobj, ret, 0);

	ret = rt_task_create(&t_rr1, "rr_task_1", 0, 10, 0);
	traceobj_check(&trobj, ret, 0);

	ret = rt_task_start(&t_rr1, rr_task, "t1");
	traceobj_check(&trobj, ret, 0);

	ret = rt_task_create(&t_rr2, "rr_task_2", 0, 10, 0);
	traceobj_check(&trobj, ret, 0);

	ret = rt_task_start(&t_rr2, rr_task, "t2");
	traceobj_check(&trobj, ret, 0);

	ret = rt_sem_broadcast(&sem);
	traceobj_check(&trobj, ret, 0);

	traceobj_join(&trobj);

	exit(0);
}
Пример #6
0
void event(void *cookie)
{
       int err;

       err = rt_task_set_periodic(NULL,
				  TM_NOW,
				  rt_timer_ns2ticks(sampling_period));
       if (err) {
	       fprintf(stderr,"switch: failed to set periodic, code %d\n", err);
	       return;
       }

       for (;;) {
	       err = rt_task_wait_period(NULL);
	       if (err) {
		       if (err != -ETIMEDOUT) {
			       /* Timer stopped. */
			       exit(EXIT_FAILURE);
		       }
	       }

	       switch_count++;
	       switch_tsc = rt_timer_tsc();

	       rt_sem_broadcast(&switch_sem);
       }
}
Пример #7
0
//startup code
void startup()
{
  int i;
  char  str[10] ;

  // semaphore to sync task startup on
  rt_sem_create(&mysync,"MySemaphore",0,S_FIFO);

  // set timing to ns
  rt_timer_set_mode(BASEPERIOD);

  for(i=0; i < NTASKS; i++) {
    rt_printf("start task  : %d\n",i);
    sprintf(str,"task%d",i);
    rt_task_create(&demo_task[i], str, 0, 50, 0);
    rt_task_start(&demo_task[i], &demo, &i);
  }
  // assign priorities to tasks
  // (or in creation use 50+i)
  rt_task_set_priority(&demo_task[0],LOW);
  rt_task_set_priority(&demo_task[1],MID);
  rt_task_set_priority(&demo_task[2],MID);

  rt_printf("wake up all tasks\n");
  rt_sem_broadcast(&mysync);
}
Пример #8
0
void cleanRosBlock(unsigned int num) {
    SEM *sem;

    rt_shm_free(nam2num(rosBlockConfigs[num].shmName));
    sem = (SEM*)rt_get_adr(nam2num(rosBlockConfigs[num].semName));

    rt_sem_broadcast(sem);
    rt_sem_delete(sem);
}
Пример #9
0
int main(){
	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_print_auto_init(1);

	
	rt_sem_create(&semA, "A", 1, S_FIFO | S_PRIO);
	rt_sem_create(&semB, "B", 1, S_FIFO | S_PRIO);
	rt_sem_create(&syncsem, "ss", 0, S_FIFO);
	RT_TASK tasks[3];
	

	rt_task_create(tasks, "C", 0, 99, T_CPU(0)|T_JOINABLE);
	//rt_task_create(&(tasks[1]), "B", 0, 50, T_CPU(0));
	rt_task_create(tasks+2, "D", 0, 33, T_CPU(0));

	rt_task_start(&(tasks[0]),&task_H,(void*)'H'); 
	//rt_task_start(&(tasks[1]),&task_M,(void*)'M');
	rt_task_start(&(tasks[2]),&task_L,(void*)'L');
	 

	rt_task_shadow(NULL, "main", 0, 0);
	rt_task_sleep_ms(200);
	rt_sem_broadcast(&syncsem);
	//rt_task_sleep_ms(2000);

	rt_task_join(tasks);
	rt_task_join(tasks+2);
	rt_sem_delete(&semA);
	rt_sem_delete(&semB);

/*
	pthread_t disturbance[10];
	for (i=0; i<10; i++){
		pthread_create(&(disturbance[i]),NULL,&busy_wait,NULL);
	}
	
	for (i=0; i<10; i++){
		pthread_join(disturbance[i],NULL);
	}
*/

	return 0;
};
Пример #10
0
int main(int argc, char **argv)
{	
	mlockall(MCL_CURRENT|MCL_FUTURE); //lock current mem alloc and future mem alloc main mem

	
	rt_print_auto_init(1); //hvis vi trenger printf
	
	rt_sem_create(&xenomai_semaphore, "Vaarsemafor", SEM_INIT_COUNT, SEM_MODE);
	rt_sem_create(&resource_semaphore, "ressursemafor", SEM_RES_INIT_COUNT, SEM_MODE);
	
	
	rt_mutex_create(&resMut,"Resource control mutex");	

	
	rt_task_create(&taskLow, "task L", AUT0_STCK_SIZE, 50, SINGLE_CORE_MODE);
	rt_task_create(&taskMed, "task M", AUT0_STCK_SIZE, 75, SINGLE_CORE_MODE);
	rt_task_create(&taskHigh, "task H", AUT0_STCK_SIZE, 99, SINGLE_CORE_MODE);
	rt_task_shadow (NULL, "main", 99,SINGLE_CORE_MODE);
	

	rt_task_start(&taskLow, &taskL, NULL);
	rt_task_start(&taskMed, &taskM, NULL);
	rt_task_start(&taskHigh, &taskH, NULL);	
	
	
	rt_printf("Started program\n");
	
	rt_task_sleep(ONE_SEC);
	rt_printf("One second passed\n");		
	rt_sem_broadcast(&xenomai_semaphore);
		
	while(1){
		rt_task_sleep(100000);
	}
	
	rt_sem_delete(&xenomai_semaphore);
	rt_sem_delete(&resource_semaphore);

	rt_mutex_delete(&resMut);
	
	return 0;
}
Пример #11
0
int main(int argc, char* argv[])
{
	char str[10] ;
	int i;

	rt_print_auto_init(1);
	mlockall(MCL_CURRENT | MCL_FUTURE);
	rt_printf("start task\n");

	rt_sem_create(&sem, "sem", 0, S_FIFO);

	for (i=0; i<5; i++)
	{
		sprintf(str, "hello-%d", i);
		rt_task_create(&task[i], str, 0, 50+i, 0);
		rt_task_start(&task[i], &demo, &i);
	}
//	rt_sem_v(&sem);
	rt_sem_broadcast(&sem);
}
Пример #12
0
Файл: ex07c.c Проект: jd7h/des
//startup code
void startup()
{
  int i;
  char  str[10] ;

  // semaphore to sync task startup on
  rt_sem_create(&mysync,"MySemaphore",0,S_FIFO);

  // change to period mode because round robin does not work
  // in one shot mode
  rt_timer_set_mode(BASEPERIOD);// set tick period
  for(i=0; i < NTASKS; i++) {
    rt_printf("start task  : %d\n",i);
    sprintf(str,"task%d",i);
    if(i<NTASKS-1){rt_task_create(&demo_task[i], str, 0, 50, 0);}
    	else{rt_task_create(&demo_task[i],str,0,80,0);}
    rt_task_start(&demo_task[i], &demo, &i);
  }
  rt_printf("wake up all tasks\n");
  rt_sem_broadcast(&mysync);
}
Пример #13
0
int main(int argc, char* argv[])
{
    char  str[10] ;
    int i;

    // Perform auto-init of rt_print buffers if the task doesn't do so
    rt_print_auto_init(1);

    // Lock memory : avoid memory swapping for this program
    mlockall(MCL_CURRENT|MCL_FUTURE);

    /* create semaphore */
    rt_sem_create(&semGlobal,"semaphore",0,S_PRIO);

    rt_printf("start task\n");

    for (i=0; i<5; i++)
    {
        /*
         * Arguments: &task,
         *            name,
         *            stack size (0=default),
         *            priority,
         *            mode (FPU, start suspended, ...)
         */
        sprintf(str,"hello-%d",i);
        rt_task_create(&demo_task, str, 0, 50+i, 0);

        /*
         * Arguments: &task,
         *            task function,
         *            function argument
         */
        rt_task_start(&demo_task, &demo, &i);
    }

    rt_sem_broadcast(&semGlobal);

}
int main(int argc, char **argv) {

  char task_name[TASKS][16];
  RT_TASK task[TASKS];

  rt_print_auto_init(1);

  if(rt_sem_create(&sem, "Semaphore", 0, S_PRIO) != 0) {
	exit(-1);
  }
  
  mlockall(MCL_CURRENT|MCL_FUTURE);

  for(int i = 0; i < TASKS; i++) {
    snprintf(task_name[i], 16, "Lab5Task-%d", i);
    if (rt_task_create(&task[i], task_name[i], 0, 10 + (i * 2), T_JOINABLE) != 0) {
      exit(-1);
    }
  }

  for (int i = 0; i < TASKS; i++) {
    rt_printf("Starting task %s\n", task_name[i]);
    rt_task_start(&task[i], &task_body, NULL);
  }

  rt_printf("All tasks started\n");

  rt_sem_broadcast(&sem);
  
  for(int i = 0; i < TASKS; i++) {
    rt_task_join(&task[i]);
  }

  rt_printf("All tasks shutted down\n");
  
  rt_sem_delete(&sem);
}
Пример #15
0
void syncFunc() {
	sleep(1);
	rt_sem_broadcast(&sem);
	sleep(1);
}
Пример #16
0
int main(void){

    /* Perform auto-init of rt_print buffers if the task doesn't do so */
    rt_print_auto_init(1);

    /* Lock memory : avoid memory swapping for this program */
    mlockall(MCL_CURRENT|MCL_FUTURE);
    
    /* Make main a Real-Time thread */
    if(rt_task_shadow(NULL, NULL, RT_MAIN_PRI, T_CPU(CPU_ID) ) != SUCCESS){
        printf("RT Thread main failed to be created!\n");
        exit(1);
    }else{
        /* print success */
        rt_printf("RT Thread main initiated successfully \n");
    }

    /* Create semaphore for synchronized start */
    if(rt_sem_create(&sync_sem, "sync_start", 0, S_PRIO) != SUCCESS){
            rt_printf("sync semaphore failed to be created \n");
            exit(1);
        }

    /* Create Barrier */
    #ifdef semaphore
        if(rt_sem_create(&sem, "Barrier_sem", 0, S_PRIO) != SUCCESS){
            rt_printf("Barrier_sem failed to be created \n");
            exit(1);
        }
    #endif
    #ifdef mutex
        if(rt_mutex_create(&mut, "Barrier_mut") != SUCCESS){
            rt_printf("Barrier_mut failed to be created \n");
            exit(1);
        }
    #endif
    /* Initialize Real-Time threads */
    int* id;
	int i;
    RT_TASK rt_threads[N_RT_THREADS];

    for(i=0; i<N_RT_THREADS; i++){
        /* Give the new thread the channel to respond to by argument */
        int *method = malloc(sizeof(int));
        *method = USE_METHOD;
        
        /* Create new thread */
        if(rt_task_create(&rt_threads[i], NULL, 0, RT_THREADS_PRI[i], T_CPU(CPU_ID)|T_JOINABLE) != SUCCESS){
            rt_printf("RT Thread %i failed to be created!\n", i);
            exit(1);
        }

        /* Execute task */
        if(rt_task_start(&rt_threads[i], RT_FUNC[i], id) != SUCCESS){
            rt_printf("RT Thread %i failed to start!\n", (void*) i);
            exit(1);
        }

        /* print success */
        rt_printf("RT Thread  %i initiated successfully \n", i);
    }
    
    /* Wait untill all threads have been blocked, restart them */
    rt_task_sleep(SLEEP_DELAY);
    if(rt_sem_broadcast(&sync_sem)!= SUCCESS){
        rt_printf("main thread failed to broadcast on BARRIER semaphore \n");
        exit(1);
    }
    rt_task_sleep(SLEEP_DELAY);

    /* Wait for all threads to terminate */
    for(i=0; i<N_RT_THREADS; i++){
        rt_task_join(&rt_threads[i]);
    }

    /* Clean up */
    rt_sem_delete(&sem);
    rt_sem_delete(&sync_sem);
    rt_mutex_delete(&mut);

    return 0;
}