Forum Programmation.c programmation temps réel sous RTAI

Posté par  .
Étiquettes : aucune
0
7
avr.
2005
bonjour
j'utilise des fonctions fournies par le système temps réel RTAI Linux ceci est équivalent à la programmation C sous Linux, j'espère que quelqu'un qui connais à la programmation C pourra me rependre.
mon problème concerne la fonction rt_task_init son role est l'initialisation d'une tache dont le prototype est int rt_task_init (RT_TASK *task, void(*rt_thread)(int), int data, int stack_size, int priority, int uses_fpu, void(*signal)(void)) .
la fonction qui correspond à la tache je la déclare comme suit
void tache(int ID) ou static void tache(int ID) et je fait l'appel suivant rt_task_init(id,tache,i,1000,1,NULL)
le compilateur m'affiche après la compilation du module une erreur de segmentation.
merci?
  • # re:

    Posté par  . Évalué à 2.

    tu as une erreur de segmentation quand tu essayes d'accéder à une zone de la mémoire non défini


    id doit etre l'adresse de..
    peut-etre en le précédant du & ??


    idem pour le 2eme argument

    quand au dernier, est-ce admis de laisser un pointeur null?


    comment savoir ce qu'il en retourne?
    ces arguments sont utilisés dans la fonction rt_task_init
    il faut donc verifier là-dedans
  • # Un petit exemple

    Posté par  . Évalué à 2.

    Il faudrait préciser plus de choses, là dans ton appel à rt_task_init, on ne sait
    pas à quoi correspond "id".

    J'ai trouvé un petit exemple pratique à :

    http://www.enseirb.fr/~kadionik/embedded/linux_realtime/linux_realt(...)

    Ca pourra te donner une piste je pense.
  • # Et le compilo ?

    Posté par  . Évalué à 1.

    Si je lis bien ton message, c'est ton compilo qui segfault. Or le compilo ne doit pas segfaulter, quelque soit le code que tu lui donne à bouffer.
    Il faut donc que tu voit ce problème avec ceux qui développe le compilo.
    • [^] # Re: Et le compilo ?

      Posté par  . Évalué à 1.

      je programme sous RTAI depuis quelque temps. Le prototype de rt_task_init que tu utilises prend comme premier paramètre une variable du type

      RT_TASK id;

      tu dois donc passer &id comme premier paramètre de rt_task_init.

      (ps: j'imagine que tu as dû te mettre à la programmation avancée de modules noyaux? pas évident au début!)
  • # reponse a ceux qui m'ont répondus

    Posté par  . Évalué à 1.

    marci a vous tous
    Je vais essayer la solution suivante
    dans la fonction void (*task)(int) je vai mettre rt_task_wait(); je pense que c'est le problème !!!
    a la prochaine.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.