kerplunk | 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 :
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <rtai.h>
- #include <rtai_sched.h>
- #include <rtai_shm.h>
- #define PERIOD 1000000 //1ms
- static RT_TASK t1;
- RTIME time, t;
- int *ptr = NULL;
- int *test = NULL;
- int i = 0;
- static void tache_tr(int C){
- while(i<10){
- printk("%d\n",i);
- //test = memset(ptr, 0xDEADBEEF, sizeof(ptr));
- *ptr=0xDEADBEEF;
- printk("test : %X\n",*ptr);
- rt_task_wait_period();
- i++;
- }
- return;
- }
- int init_module(void){
- ptr = rtai_kmalloc(11011, 4*sizeof(int));
- if (ptr == 0)
- printk("Erreur kmalloc\n" );
- rt_set_periodic_mode();
- time = start_rt_timer(nano2count(PERIOD/4));
- // Créer la tâche de temps réel.
- rt_task_init(&t1, (void *)tache_tr, 1, 512, 1, 0, 0);
- // La rendre périodique.
- rt_task_make_periodic(&t1, rt_get_time()+1000*time, nano2count(1000000000));
- return 0;
- }
- void cleanup_module(void){
- rt_task_delete(&t1);
- stop_rt_timer();
- rtai_kfree(101);
- return;
- }
|
coté linux
Code :
- #include <stdio.h>
- #include <fcntl.h>
- #include <rtai_shm.h>
- //gcc -o e3user e3user.c -I /usr/realtime/include
- int main(int argc, char **argv){
- int *ptr=NULL;
- ptr = rtai_malloc(11011, 4*sizeof(int));
- if (ptr == 0){
- printf("Erreur malloc\n" );
- return 0;
- }
- printf("%X\n",*ptr);
- rtai_free(101,&ptr);
- return 0;
- }
|
|