IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Crosstool-ng et les registres flottants


Sujet :

Embarqué

  1. #1
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les registres flottants
    Bonjour,

    J'utilise Crosstool-Ng pour la cross compilation mipsel-unknown-linux-gnu pour la cible mips32 et Qemu comme emulateur.

    Je veux explorer l'unité flottante FPU mais en la cochant en configuant Crosstool-Ng tout floattant est afficher en zero (0) pour un programe en C contenant des flottants.

    Donc je n'ai pas pu detecter l'origine du problème si c'est Crosstool-Ng (il faut cocher une option) ou si c'est gdb ou Qemu?

    Pouvez vous m'orienter s'il vous plait!
    Merci!

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Peux-tu nous montrer un code C minimaliste reproduisant le problème ainsi qu'un aperçu de la sortie sur la console ?

  3. #3
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les registres flottants
    Salut,
    Merci pour votre interet!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include<string.h>
    #include <stdlib.h>
    float f(float a,float b)
    {
        return a*b;
    }
    int main(int argc,char *argv[])
    {
        float a;
        float b;
        a=atof(argv[1]);
        b=atof(argv[2]);
    
        printf(" %f * %f= %f \n",a,b,f(a,b));
        return 0;
    }
    La commande qemu-mipsel -cpu 34kf test 1.2 0.4 donne:
    0.000000 * 0.000000= 0.400000
    Merci encore!

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Il faut être conscient que atof() renvoie 0 si la conversion échoue. Il faut mieux utiliser strtod() si on veut être sûr de travailler avec un nombre valable.

    Es-tu sûr que Qemu passes-bien les paramètres à ton programme ? Tu devrais aussi tester argc avant d'accéder aux éléments de argv. Peux-tu rajouter la ligne suivant avec les appels à atof() pour voir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d %s %s\n", argc, argv[1], argv[2]);

  5. #5
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les registres flottants
    Salut,

    Je vous remercie vraiment.
    En ajoutant la ligne que vous m'avez déclaré, le résultat est comme suit:

    3 1.2 0.4
    0.000000 * 0.000000= 0.400000
    donc le programme reçoit bien les entrées non?

    Merci encore!

  6. #6
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les registres flottants
    En modifiant les lignes ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a= strtof(argv[1],0);
    b=strtof(argv[2],0);
    Le résultat devient coome suit:
    3 1.2 0.4
    0.000000 * 0.000000= 0.000000

    Sachant que:
    (gdb) show mipsfpu
    The MIPS floating-point coprocessor is set automatically (currently double-precision)

  7. #7
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    bonjour,

    Est-ce que tu peux faire un objdump -D te ton exécutable pour regarder si les instructions flottantes sont utilisées?

  8. #8
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les registres flottants
    Bonjour,

    Les instructions flottantes sont utilisées mais j'ai remarqué que les valeurs sont correctes au niveau du registre flotant 0 mais après je n'ai pas compris ce qui se passe des passages de double en simple et de simple en double de façon à perdre les valeurs d'entrées et par conséquent le resulat de multiplication est erroné.

    Je ne sais pas si le probleme est relié à Qemu ou non.

  9. #9
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Je sais que printf cast les float en double si on utilise %f.
    mais ça ne devrait pas poser de problème...
    Essai d'utiliser %d pour les caster en int pour voir, sur certaines architectures "faibles" le printf ne supporte pas le format flottant.

  10. #10
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Crosstool-ng et les floating point registers
    J'ai essayé de faire ainsi mais en vain.
    J'ai meme defini un union prenant un float et un entier pour forcer l'affichage du resultat au moins en entier mais en vain aussi

  11. #11
    Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Débogage
    Bonjour,

    J'utilise le gdb:GNU gdb (crosstool-NG 1.18.0) 7.4.1 pour cortex-a15 mais en debogage le ctrl-x 2 ne fonctionne pas:je veux afficher le code source ainsi les instructions mais je suis pas arrivée!

    Autre chose en autorisant le mode gdb (-g -DDEBUG), je remarque que le contenu des regisres changent donc je reçois des erreurs alors que sans ce mode j'ai bien la bonne résultat, sachant que j'utilise qemu comme émulateur, quel est le probleme?

    Merci d'avance!

Discussions similaires

  1. [MySQL] Probleme avec les nombres flottants
    Par Seth77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/07/2006, 10h20
  2. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  3. Réponses: 1
    Dernier message: 29/11/2005, 10h10
  4. Lire/écrire les registres
    Par Age Piranha dans le forum Windows
    Réponses: 11
    Dernier message: 11/03/2005, 18h31
  5. TASM ne connaît pas les registres FS et GS
    Par forthx dans le forum Assembleur
    Réponses: 4
    Dernier message: 07/06/2003, 00h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo