Mémoire partagée avec RTAI

Mémoire partagée avec RTAI - C - Programmation

Marsh Posté le 28-05-2007 à 17:30:40    

Salut,
 
Je tente de faire un partage de mémoire en rtai et pas moyen. Le principe est d'allouer une partie mémoire coté RTAI avec la fonction rtai_kmalloc auquel on passe en argument le motif qui servira au coté linux pour reconnaitre l'endroit ou est stocké l'info puis d'écrire dedans. Il y sans doute quelque chose qui m'échappe. Pouvez vous me dire ce que vous en pensez ?
 
je laisse le code coté rtai et coté linux.
merci !
 
coté RTAI

Code :
  1. #include <linux/kernel.h>
  2. #include <linux/module.h>
  3. #include <rtai.h>
  4. #include <rtai_sched.h>
  5. #include <rtai_shm.h>
  6. #define PERIOD 1000000 //1ms  
  7. static RT_TASK t1;
  8. RTIME time, t;
  9. int *ptr = NULL;
  10. int *test = NULL;
  11. int i = 0;
  12. static void tache_tr(int C){
  13. while(i<10){
  14.  printk("%d\n",i);
  15.  //test = memset(ptr, 0xDEADBEEF, sizeof(ptr));
  16.  *ptr=0xDEADBEEF;
  17.  printk("test : %X\n",*ptr);
  18.  rt_task_wait_period();
  19.  i++;
  20. }
  21. return;
  22. }
  23. int init_module(void){
  24. ptr = rtai_kmalloc(11011, 4*sizeof(int));
  25. if (ptr == 0)
  26.  printk("Erreur kmalloc\n" );
  27. rt_set_periodic_mode();
  28. time = start_rt_timer(nano2count(PERIOD/4));
  29. // Créer la tâche de temps réel.
  30. rt_task_init(&t1, (void *)tache_tr, 1, 512, 1, 0, 0);
  31. // La rendre périodique.
  32. rt_task_make_periodic(&t1, rt_get_time()+1000*time, nano2count(1000000000));
  33. return 0;
  34. }
  35. void cleanup_module(void){
  36. rt_task_delete(&t1);
  37. stop_rt_timer();
  38. rtai_kfree(101);
  39. return;
  40. }


 
coté linux

Code :
  1. #include <stdio.h>
  2. #include <fcntl.h>
  3. #include <rtai_shm.h>
  4. //gcc -o e3user e3user.c -I /usr/realtime/include
  5. int main(int argc, char **argv){
  6. int *ptr=NULL;
  7. ptr = rtai_malloc(11011, 4*sizeof(int));
  8. if (ptr == 0){
  9.  printf("Erreur malloc\n" );
  10.  return 0;
  11. }
  12. printf("%X\n",*ptr);
  13. rtai_free(101,&ptr);
  14. return 0;
  15. }


 

Reply

Marsh Posté le 28-05-2007 à 17:30:40   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed