Je viens de passer ma soirée a tenter de faire un partage de memoire en rtai et pas moyen il y sans doute quelque chose qui m'échappe. Pouvez vous me dire ce que vous en pensez ?
je laisse le code coté rtai, je pense pas que le probleme vienne du code coté linux.
merci !
#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));
printk("test : %X\n",*test);
rt_task_wait_period();
i++;
}
}
int init_module(void){
ptr = rtai_kmalloc(101, 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;
}
# Modif
Posté par fr4ncois . Évalué à 1.
#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(101, 128);
if (ptr == 0){
printf("Erreur malloc\n");
return 0;
}
printf("%X\n",*ptr);
rtai_free(101,ptr);
return 0;
}
[^] # Re: Modif
Posté par TheBreton . Évalué à 2.
ptr = rtai_malloc(101, 128);
pourquoi 128 qui n'est pas 4*sizeof(int) et donc si tu alloue plus d'un coté que ce qui est alloué de l'autre (kmalloc) cela me parait normal que le malloc ne marche pas non ?
[^] # Re: Modif
Posté par fr4ncois . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.