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

Bibliothèque standard C Discussion :

Trouver utilisations des fonctions de la libc


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Par défaut Trouver utilisations des fonctions de la libc
    Bonjour à tous,

    je vous explique rapidement mon problème. Je développe un projet tournant sur un microcontrôleur ARM (Cortex-M4) qui possède une FPU (floating point unit) et afin de gagner un rapidité en taille du programme, je veux faire en sorte que tous les calculs se fassent avec des float et non des doubles pour éviter d'avoir des conversions de type.

    J'ai parcouru tout mon code pour rajouter des .f après les constantes numériques (ex 2.0f) et utilisé les fonctions mathématiques sur float (sqrtf, cosf, etc) mais quand je fais appel à la commande nm (arm-none-eabi-nm pour être exact) de GCC pour savoir quels sont les fonctions utilisées, je vois qu'il me reste encore des fonctions travaillant avec des doubles (des dsub, dadd, etc).

    J'aimerais donc bien trouver où ces fonctions sont appelées afin de corriger ça mais je sais pas du tout comment faire. (je suis aller faire un tour sur google mais j'ai pas trouvé ce que je voulais)

    Merci d'avance

  2. #2
    Membre très actif

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

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 595
    Par défaut
    Fait un : objdump -D executable > executable.dump pour voir par qui sont appelée ces fonctions.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Par défaut
    Merci c'est parfait comme solution, par contre j'ai remarqué certaines choses contre lesquelles je ne peux rien faire (à priori).

    Par exemple, la fonction sqrtf() fait appel dans son code à __aeabi_f2d qui vu le nom, fait une conversion d'un float vers un double. C'est quand même étrange qu'une fonction devant travailler sur du float travaille en interne sur du double non? Ce qui m'embête c'est que du coup ça m'ajoute les fonctions que je cherche à éliminer…

    Quelqu'un sait si il existe une version float uniquement de la librairie mathématique?

  4. #4
    Membre très actif

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

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 595
    Par défaut
    Il faut poser la question au fournisseur de la libC de ta cible.
    Ta requête est légitime. Si ta FPU est simple précision c'est quand même ton droit de ne faire que du simple précision...

    Si c'est un truc open source tu peux peut-être recompiler tout le bousin avec des options spéciales => grosse galère quand même....

  5. #5
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Par défaut
    ouais je pense que je vais aller poser la question aux gens qui proposent le compilateur, je verrai ce qu'ils ont à me dire et je reviendrai faire le point ici, ça pourra toujours intéresser quelqu'un. En plus entre deux j'ai remarqué quelque chose, même si le FPU est capable de calculer une racine carrée, c'est uniquement les fonctions des librairies qui sont appelées, que se soit en float ou en double...

    Merci pour ton aide en tout cas, j'arrive tout de même à réduire la taille de mon code grâce à objdump

  6. #6
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Par défaut
    Après quelques discussions avec les gens qui fournissent le compilateur, un minimum d'optimisations doivent être activées pour l'utilisation de l'instruction du FPU pour le calcul de la racine carrée (ce que je trouve un peu bizarre tout de même).

    Ça n'empêche pas qu'il reste toujours des conversions float/double à l'intérieur de sqrtf (et de expf par la même occasion). Apparemment, cela est dû à la gestion des erreurs. Tous les floats sont convertis en doubles en sont envoyés à une fonction générique de gestion des exceptions. Le nombre retourné est donc reconverti en float avant d'être retourné par sqrtf ou expf. C'est pour ça que malgré tous mes efforts, il restait des fonctions travaillant sur des doubles.

    En espérant que ça puisse éclairer quelqu'un dans la même situation que moi

Discussions similaires

  1. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 12h10
  2. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  3. [hibernate] utilisation des fonctions d'aggregation
    Par osopardo dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/08/2005, 09h41
  4. utilisation des fonctions d'une dll
    Par jackk dans le forum C++
    Réponses: 14
    Dernier message: 15/06/2005, 16h50
  5. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43

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