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

Probleme de chaine de caractere



  1. #1
    cedric300

    Probleme de chaine de caractere


    ------

    Bonjour,

    J'ai un problème avec mes chaines de caractère,
    Je programme un PIC18F2620 avec mplab, mcc18, icd3,

    Suivant comment j’écris mes chaines de caractère, j'ai des problèmes,

    Si j'écris:
    const char INTRO_PROG[] = "test";
    Lorsque le micro travaille avec cette chaine les valeurs de cette chaine sont aléatoires,
    Alors que en mode debug, si je vais voire la valeur de la chaine elle n'a pas changé...

    Et si j’écris
    const char INTRO_PROG[] = {'t','e','s','t','\0'}
    Tous fonctionne correctement,

    Comment expliquer cela?
    Quelle est la différence entre les deux notations?
    Est ce que ça peut provenir d'un problème de pointeur?

    Merci

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : Probleme de chaine de caractere

    Lorsque le micro travaille avec cette chaine les valeurs de cette chaine sont aléatoires
    Comment constates-tu cela?

    A+

  4. #3
    cedric300

    Re : Probleme de chaine de caractere

    J'envoie ces chaines sur la liaison série rs232, mon hyper terminal les réceptionne et affiche a l’écran.

    const char INTRO_PROG[] = "test"; // comme ça j'ai des caractères hexa sans sens; ni longueur fixe,

    const char INTRO_PROG[] = {'t','e','s','t','\0'} // comme ça, ca marche, j'ai a l’écran le texte voulu;

  5. #4
    alban77

    Re : Probleme de chaine de caractere

    Salut,
    Et si tu enleves le '\0' de ta deuxieme solution, est ce que tu n'a pas le même probleme ?

    Ca pourrait être la detection de fin de chaine qui se passe mal sur la premiere solution.

    A+

    Cédric
    Dernière modification par alban77 ; 12/01/2012 à 16h57.

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

    Re : Probleme de chaine de caractere

    Presque,
    le début est bon, mais j'ai une chaine de 32 caractères a l’écran,
    je travaille en tableau de caractère, mon '\0' permet de connaitre la fin,
    mon programme ne marche plus du tous,

  8. #6
    cedric300

    Re : Probleme de chaine de caractere

    Le PIC18F2420 me fait la même chose,
    Le problème n'est pas hard.

    Merci

  9. Publicité
  10. #7
    Jack
    Modérateur

    Re : Probleme de chaine de caractere

    Tu n'as pas de possibilité de debugger le programme du PIC et de visualiser l'état des variables afin de voir ce qui est contenu dans le tableau?

    J'avoue que le fait de retirer le 0 final permet de faire apparaitre les premiers caractères n'a aucun sens, ou alors c'est tordu.

    A+

  11. #8
    cedric300

    Re : Probleme de chaine de caractere

    lorsque je debug, a un moment (aléatoire) la variable passe plus en paramètre,

    {
    blablabla
    ma_fonction ( chaine);
    blablabla
    }

    void ma_fonction (char * buff){
    buff n'est pas bon, il ne pointe plus sur chaine,
    }

  12. #9
    cedric300

    Re : Probleme de chaine de caractere

    J'ai fait un test
    Si je programme que la liaison série, ( 1/10 du programme) tout marche normalement,
    dans les deux cas.
    quand je rajoute des fichiers, a un moment ca ne remarche plus, mais je n'arrive pas a le remettre dans un état qui marche.

    Est ce de la magie?

  13. #10
    Jack
    Modérateur

    Re : Probleme de chaine de caractere

    tu n'as pas un warning des fois? Parce que tu déclares un tableau de caractères constants et dans ta fonction, tu passes un pointeur qui pointe sur ces caractères, ce qui pourrait permettre de les modifier et ça, le compilateur, il n'aime peut-être pas.
    Essaie avec
    Code:
    void ma_fonction (const char * buff){
    C'est un compilateur C ou C++?

    A+

  14. #11
    cedric300

    Re : Probleme de chaine de caractere

    J'utilise déjà const, quand je peut le mettre je ne me prive pas (garde fou) ;
    je ne l'avais pas écrie , je m'en excuse.
    J'utilise un compilateur C.
    il y a t'il une différence entre ces deux déclaration.
    const char INTRO_PROG[] = {'t','e','s','t','\0'}
    const char INTRO_PROG[] ="test";
    Le micro travaille t-il de la meme façon avec ces deux déclarations?
    Le const ne sert qu'a empêcher de le modifier? non? je n'ai plus le programme sous les yeux mais je regarderai le const plus sérieusement demain.

    Merci A++

  15. #12
    Jack
    Modérateur

    Re : Probleme de chaine de caractere

    il y a t'il une différence entre ces deux déclaration.
    const char INTRO_PROG[] = {'t','e','s','t','\0'}
    const char INTRO_PROG[] ="test";
    Non, le résultat doit être strictement le même.

    A+

  16. Publicité
  17. #13
    cedric300

    Re : Probleme de chaine de caractere

    J'ai ajouté des const partout, et ca a l'aire de marcher.
    Je n'arrive pas a mettre en évidence le problème, ca reste un mystère!!
    Je vous tiens au courant si je trouve quelque chose.
    Merci A++

  18. #14
    cedric300

    Re : Probleme de chaine de caractere

    Bonjour,

    J'ai de nouveau problème,
    j'ai mis mes chaines dans la ROM, maintenant plus de problème, tous s'affiche correctement.
    Mais nouveau problème:
    Le pic redémarre suivant les instructions que je lui demande.
    // Question simple, tel que numéro de version du prog, ca fonctionne
    // Question plus complexe, faisant appelle a du traitement de chaine... il redémarre.
    J'ai vu qu'il y avais le registre RCON qui pourrai m'aider, mais je ne sais pas comment?
    pouvez vous m'aider a comprendre ce registre?
    avez vous une idée pour m'aider a trouver d'ou proviens le problème?

    Merci A++

  19. #15
    freepicbasic

    Re : Probleme de chaine de caractere

    Le pic redémarre suivant les instructions que je lui demande.
    ça ressemble a un crash de la pile ...
    A+, pat

  20. #16
    cedric300

    Re : Probleme de chaine de caractere

    merci
    comment faire pour corriger ce problème?
    ce crash peut il également être a l'origine du problème des chaine de caractère?
    A+

  21. #17
    freepicbasic

    Re : Probleme de chaine de caractere

    il faut consulter la doc pour savoir combien de niveaux sont acceptables , par exemple 8 , puis regarder combien de call sont empilés, si ça dépasse on est crashé.
    Avec un compilateur c est pas toujours évident de savoir , il faut voir le code asm généré, parfois certains compilateurs ont un sytème de contrôle (stack overflow) de la pile mais c est plutôt sur des sytèmes plus gros comme un PC.
    Sur le système avec des grosses piles , les données sont parfois aussi empilées lors d'un call avec un tableau en paramètre, cela dépend du microprocesseur et du compilateur, il est préférable alors de passer un simple pointeur pour économiser la pile.
    A+, pat

  22. #18
    freepicbasic

    Re : Probleme de chaine de caractere

    je de jeter un oeil a la doc du 18F2620 , il a 31 niveaux de pile et un système de stack overflow qui reset le µC.
    Donc ça peut être ça la source du problème.
    A+, pat

  23. Publicité
  24. #19
    cedric300

    Re : Probleme de chaine de caractere

    Merci
    est ce que 31 ca veut dire que je peux appeler 31 fonctions?
    ou 31 est une taille mémoire ou est enregistré la fonction est les variables?
    J'ai vu que le registre STKPTR pourrai m'aider.
    par curiosité, comment la pile est géré lors d'une interruption?
    Merci A++

  25. #20
    freepicbasic

    Re : Probleme de chaine de caractere

    Une fonction peut en appeler d'autres donc ce n' est pas évident de savoir combien en fait sont empilées.
    Surtout que certaines fonctions peuvent être très gourmandes.
    le registre STKPTR peut permettre de vérifier ou il en est avec un debug ou en envoyant la valeur sur un port de controle par exemple pour un débuggage non ICD, mais bon pour le stack pas evident d 'appeler une fonction qui risque de prendre du stack aussi...,

    On devrait pouvoir apparement rallonger le stack puisque la doc dit qu'il est a l'adresse 0 et donc on doit pouvoir étendre la pile plus loin, puisque c est de la Ram après , à vérifier ... Je n'ai jamais utilisé ce µp..., et dans ce cas il faudrait enlever l'option de reset après over flow des 31 de base constructeur, en espérant que le STKPTR ne soit pas limité a 5 bits , LOL.
    Sur les processeurs plus gros le stack est programmable , peut être que le compilateur sait le faire, avec une instruction du genre STKLEN=xx

    Il semble que le stack ne puisse pas empiler de data , comme Microchip en a l'habitude d'ailleurs, bref, je n'ai pas vu de push ou pop instructions.
    A+, pat

  26. #21
    freepicbasic

    Re : Probleme de chaine de caractere

    page 56 le stack est une mémoire spécifique, et donc ne doit pas être modifiable.
    il disent que l'on peut empiler des datas aussi grace au registre,
    Alors si le compilo empile les datas on est vite crashé, il faudrait envoyé des messages court pas plus de 16 char...voir moins, en plusieurs fois.
    Dernière modification par freepicbasic ; 17/01/2012 à 11h19.
    A+, pat

  27. #22
    cedric300

    Re : Probleme de chaine de caractere

    Je ne sais pas si le stack est a l'origine de mon problème, mais je met le nez dans quelque chose qui m'est inconnu,
    Mplab X ide possède une doc dans "help" détaillé, je vais chercher si je trouve un moyen de résoudre mon problème;
    Grand merci, A++

Discussions similaires

  1. chaine de caractère
    Par dalida1111 dans le forum Programmation et langages, Algorithmique
    Réponses: 27
    Dernier message: 01/01/2012, 17h38
  2. chaîne de caractère
    Par dalida1111 dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 01/01/2012, 15h06
  3. Lire chaine de caractère
    Par celine2 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 31/01/2011, 21h06
  4. copie de chaine et changements de caractere en C
    Par gdm dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 19/10/2009, 08h08
  5. Chaine de caractère C++
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 06/03/2008, 20h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.