Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

"String to float" dans un PIC : erreur



  1. #1
    hoffmann

    Question "String to float" dans un PIC : erreur


    ------

    Bonjour,
    Me voilà bien dans l'ambaras.
    Une chaine de caractère contient en fait un nombre a virgule qui m'intéresse sérieusement.
    Je voudrais donc utiliser la fonction :
    atof (const auto char *s);
    fournit par C18

    L'utilisation de cette dernière ne fonctionne pas :


    Error - section '.code_main.o' can not fit the section. Section '.code_main.co' length = 0x0000016

    link step failed

    Ce qui me fait peur, c'est que lorsque j'utilise cette fonction dans un projet tres vide, cela fonctionne. Et l'erreur semble indiquer un problème d'espace ? :S

    atoi, atol fonctionne....


    Mon programme n'est pas si gros que ça... j'utilise moins de 5 float et une 10ene de calcules de trigonométrie.

    J'utilise un PIC18F488 ainsi que le compilateur C18.


    Très cordialement

    -----
    Hoffmann

  2. Publicité
  3. #2
    hoffmann

    Re : "String to float" dans un PIC : erreur

    Je viens de changer de PIC pour un de taille deux fois supérieur.
    Tout fonctionne...

    Je suis quand meme déçus. Mon programme est vraiment petit.
    Il gère le lcd.

    Il fait aussi un méchant calcul en float (distance entre deux points GPS) :

    Δlat = lat2− lat1
    Δlong = long2− long1
    a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
    c = 2.atan2(√a, √(1−a))
    d = R.c


    Je pensais pas que 5 float et moins d'une centaine de ligne allait le mettre a genoux, a moins que cela vienne de mon programme qui serait pas optimisé ? ou lors de la compilation...

    Votre avis m'intéresse...
    Hoffmann

  4. #3
    RISC

    Re : "String to float" dans un PIC : erreur

    Salut,

    Ton proglème n'a rien à voir avec tes 5 float...
    Tu oublies que pour pouvoir utiliser des librairies mathématiques, les fonctions de base doivent être chargées.

    De plus les 8 bits ne sont pas du tout faits pour faire des calculs trigonométiques en flotant....c'est de l'hérésie

    As-tu déjà jeté un oeil au format flottant IEEE754 ?
    La moindre multiplication ou division demande un très grand nombre d'itérations...

    Ma recommendation est :
    1/ d'utiliser un 16 ou 32 bits si tu dois impérativement faire ce genre de calcul en flottant.
    2/ de faire des tables de transcodage (lookup) qui te permettront d'obtenir le résultat en quelques us. Le travail de base étant fait sur un PC (tableur)

    a+

  5. #4
    hoffmann

    Re : "String to float" dans un PIC : erreur

    Bonjour et merci pour ta réponse...
    1/ d'utiliser un 16 ou 32 bits si tu dois impérativement faire ce genre de calcul en flottant.
    Tu parles de la mémoire du micro ?
    J'avais en stock un 18F4520
    32768 bytes de Program Memory
    16384 Instruction (Programm Memory)

    Donc pour toi cette surcharge provient des fonctions mathématiques utilisées ?


    2/ de faire des tables de transcodage (lookup) qui te permettront d'obtenir le résultat en quelques us. Le travail de base étant fait sur un PC (tableur)
    Veux tu dire par la que je devrai charger dans un assez grand tableau les différentes valeurs de calcul + résultats (calculé ailleurs). Et qu'ensuite le uC viendrait voir si il ne trouve pas son bonheur dans ce tableau et au pire faire une approximation ?


    Merci bcp

    Cordialement
    Hoffmann

  6. A voir en vidéo sur Futura
  7. #5
    RISC

    Re : "String to float" dans un PIC : erreur

    Salut,
    Citation Envoyé par hoffmann Voir le message
    Tu parles de la mémoire du micro ?
    Non, je parle de l'architecture du micro. Il vaudrait mieux utiliser un PIC24F ou un PIC32

    Donc pour toi cette surcharge provient des fonctions mathématiques utilisées ?
    Oui

    Veux tu dire par la que je devrai charger dans un assez grand tableau les différentes valeurs de calcul + résultats (calculé ailleurs). Et qu'ensuite le uC viendrait voir si il ne trouve pas son bonheur dans ce tableau et au pire faire une approximation ?
    Exactement. Je prends un exemple simple: si tu as une équation y = 5x2 + x +3
    Tu calcules sur ton PC (EXCEL ou autre), tous les y pour 0 <= x < 100 par pas de 1.
    Tu déclares un tableau dans lequel x sera l'index et y la valeur calculée, et tu reportes ces valeurs dans ton fichier source. En une simple lecture indexée du tableau tu récupères y (qq cycles machines). Si par contre tu fais faire le calcul à ton microcontroleur, cela prendra qq centaines de cycles voir quelques dizaines de milliers si tu fais les calculs en flottant.

    Donc tout dépend de la résolution de ton x car cela déterminera la taille de ton tableau. Si x à une résolution de 1%, ton tableau aura 100 éléments. Si x a une résolution de 0.1% ton tableau aura 1000 éléments.
    Ensuite il faut choisir le format. Si y est codé sur 8 bits, avec 100 élements ton tableau fait 100 octets. Si maintenant tu utilises le format flottant, chaque élément a une taille de 4 octets, ton tableau est donc de 400 octets. Evidemment, plus tu as d'équations plus les tailles des tableaux augmente mais c'est imbattable en temps de calcul

    a+

  8. #6
    hoffmann

    Re : "String to float" dans un PIC : erreur

    Ok merci pour vos réponses... C'est très riches d'enseignement...

    Pour info je viens de découvrir l'option permetant de connaitre la mémoire programme restante...

    Dans MPLAB -> View -> Memory Usage Gauge

    Bonne soirée
    Hoffmann

  9. Publicité
  10. #7
    RISC

    Re : "String to float" dans un PIC : erreur

    Salut,

    Il faut parfois se méfier des indications données par le "Memory gauge". Je te recommande de générer un fichier xxxx.map (voir dans les build options). Ce fichier donne très précisément le taux d'utilisation de la RAM et de la FLASH.

    a+
    Dernière modification par RISC ; 15/11/2009 à 12h08. Motif: correction

Discussions similaires

  1. Erreur de frappe dans "La Relativité" d'Einstein
    Par patoff10 dans le forum Lectures scientifiques
    Réponses: 6
    Dernier message: 31/03/2010, 09h57
  2. Réponses: 19
    Dernier message: 03/07/2008, 18h32
  3. virus "erreur dans usb496.dat" help me !!!
    Par butcher59 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 15
    Dernier message: 15/09/2007, 11h16
  4. Réponses: 3
    Dernier message: 14/09/2007, 19h51
  5. Decomposer une "string" en Maple
    Par dimofzion dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 08/06/2007, 19h18
Découvrez nos comparatifs produits sur l'informatique et les technologies.