[Numérique] PIC18F46K40 Problème Variable Globale
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

PIC18F46K40 Problème Variable Globale



  1. #1
    cresus54

    PIC18F46K40 Problème Variable Globale


    ------

    boujour,
    Je programme des PIC depuis peu en C, c'est un loisir. J'utilise d'habitude un PIC 18F46K22.
    Je viens de commencer avec le 18F46K40 (vendu depuis deux mois environ).
    Et avec ce PIC, j'ai un problème avec les variables globales.
    Je déclare et initialise deux variables globales:
    Var_1=1;
    Var_2=0;
    Ci dessous, avec le SIMULATEUR, pas de problème, dans Main{ }, VAR_1=1

    simulateur.png


    Alors qu'avec Le PIC + Débug PICKit 3, VAR_1=0!!!
    L'initialisation ne se fais pas!

    reel.png

    De plus avec le PIC 18F46K22, je n'ai pas ce problème...
    Quelqu'un a une explication?

    -----

  2. #2
    antek

    Re : PIC18F46K40 Problème Variable Globale

    J'ai déjà vu ça, des registres qui prennent des valeurs folklo en débug.

    Courage . . .

  3. #3
    terriblement

    Re : PIC18F46K40 Problème Variable Globale

    Salut,

    Idem pour des valeurs folklo en debug...

    Tu peux dépanner en utilisant des if et en mettant des breakpoint dedans... ou autre bidouille dans ce genre.

  4. #4
    antek

    Re : PIC18F46K40 Problème Variable Globale

    J'ai essayé en éclatant le clavier sur le mur, ça marche pas . . .

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

    Re : PIC18F46K40 Problème Variable Globale

    Salut,
    Tu utilises MPLAB X v3.55 ? une autre version ?
    Le PIC18F46K40 est relativement récent...il se peut que le simulateur de MPLAB X ait un souci.
    De toute facon la seul chose qui fasse foi c'est le hardware ;=)
    Essaye de mettre les variables dans la fenêtre de watch ou de regarder le menu Memory view ou on voit toute la RAM.
    a+

  7. #6
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    Merci à tous pour vos réponses.
    Pour info, j'utilise MPLAB X v3.55 et XC8 1.41.
    Encore un fois, cela marche très bien avec le simulateur, Mon problème est en hardware. Ma variable globale n'est pas initialisé.
    Si je déclare et initialise VAR_1=1 en variable globale, dans ma RAM elle set égale à 0!
    J'en suis sûre car si l'ai testée avec le code suivant:
    if (var_1==1)
    {
    LATD = 0x01;
    }else
    {
    LATD = 0x02;
    }
    }
    et lza bonne LED en sortie ne s'allume pas.
    Je n'ai pas ce problème avec un 18F46K22.
    J'ai essayé avec un 18F26K42, qui est de la même famille...même problème! Ces PIC sont, il est vrai, très récents.
    J'aimerai savoir si quelqu'un sur ce forum possède un de ces PIC pour faire l'essai...

  8. #7
    satinas

    Re : PIC18F46K40 Problème Variable Globale

    Bonjour, cela donne quoi en version release, sans debugger, branché, elle s'allume cette led ?

  9. #8
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    Même problème en version release, sans debugger, ma LED ne s'allume pas. Un vrai casse tête..
    En revanche cela marche si je déclare ma variable dans le Main{} comme suit:
    Code:
    #include "mcc_generated_files/mcc.h"
    
    void main(void)
    {
       
        int var_1=1;
        int var_2=0;
        
        while (1)
        {
          var_2 = var_1;
          var_2 = 0;  
          if (var_1==1)
          {
              LATD = 0xFF;
          }else         
          {
              LATD = 0x00;
          }
        }
    }
    Dernière modification par Antoane ; 25/02/2017 à 14h01. Motif: Ajout balises code

  10. #9
    Seb.26

    Re : PIC18F46K40 Problème Variable Globale

    poste un exemple de code qui bug ...

    et essaye de mettre ta variable en "volatile" pour voir
    Dernière modification par Seb.26 ; 25/02/2017 à 10h04.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  11. #10
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    Même problème avec ma variable en volatile...

  12. #11
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    J'ai peut-être trouvé quelqu'un qui le même moi avec un PIC18F67K40 (proche des caractéristique de mon 18F46K40)
    Voir ici: http://stackoverflow.com/questions/4...ot-initialized
    Mon anglais n'est pas terrible...Mais il semble expliqué que le problème viendrait du PIC?
    Quelqu'un pourrait traduire?
    Merci

  13. #12
    satinas

    Re : PIC18F46K40 Problème Variable Globale

    Bonjour,
    Cela y ressemble, c'est un bug sur l'instruction machine TBLRD. Elle est utilisée par le C pour copier les données stockées dans la flash.
    voir ici http://ww1.microchip.com/downloads/e...12B.pdf#page=4
    Ils préconisent d'ajouter au projet dans Source Files, le fichier assembleur "powerup.as" contenant :

    Code:
    #include <xc.inc>
      GLOBAL  powerup, start
      PSECT   powerup, class=CODE, delta=1,reloc=2
    powerup:
      BSF     NVMCON1, 7
      GOTO    start
      end

  14. #13
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    Et bah voilà, ça marche enfin!!!!! après 4 jours de galères!!
    Merci à tous pour votre aide!
    D'après le PDF erratum de chez microchip, mes PIC (ID: A043) sont concernés pas toutes sortes de Bugs Hardware!! Je ne se sais si je vais continué à travaillé avec. Je n'ai plus très confiance.
    Conclusion: Les PIC, s'est comme les voitures: Quand une nouvelle sort, attendre environ un an avant d'en acheter une!! Le temps pour le constructeur de régler tous les problèmes de jeunesse.
    Cela dit, ce n'est pas sérieux de la part de Microchip, vendre des PIC qui n'accepte pas l'initialisation d'une variable globale...ce n'est pas qu'un bug, c'est une énormité.
    J'ai l'impression d'avoir acheté une voiture qui ne freine pas!

  15. #14
    antek

    Re : PIC18F46K40 Problème Variable Globale

    Citation Envoyé par cresus54 Voir le message
    Cela dit, ce n'est pas sérieux de la part de Microchip, vendre des PIC qui n'accepte pas l'initialisation d'une variable globale...ce n'est pas qu'un bug, c'est une énormité.
    Tout à fait d'accord et je ne dois pas être le seul.

  16. #15
    satinas

    Re : PIC18F46K40 Problème Variable Globale

    La release 1.41 de xc8 est censée avoir pris en charge le problème.
    http://ww1.microchip.com/downloads/e...OC_FixedIssues

    New Errata Workaround A new device errata workaround has been added to circumvent issues that relate to the memory regions accessed by table read instructions immediately after reset. This issue might affect the runtime startup code of programs that need to access program memory.

  17. #16
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    Salut
    Encore un mystère, car cela ne fonctionne pas en compilant uniquement avec XC8 1.41.
    Il faut impérativement ajouter le fichier powerup.as.

  18. #17
    RISC

    Re : PIC18F46K40 Problème Variable Globale

    Citation Envoyé par cresus54 Voir le message
    Même problème en version release, sans debugger, ma LED ne s'allume pas. Un vrai casse tête..
    En revanche cela marche si je déclare ma variable dans le Main{} comme suit:
    Code:
    #include "mcc_generated_files/mcc.h"
    
    void main(void)
    {
       
        int var_1=1;
        int var_2=0;
        
        while (1)
        {
          var_2 = var_1;
          var_2 = 0;  
          if (var_1==1)
          {
              LATD = 0xFF;
          }else         
          {
              LATD = 0x00;
          }
        }
    }
    Salut,

    Attention aux variables globales... :
    ============================== =======================
    10.2.2. Variables globales

    Les variables déclarées au début du fichier, à l'extérieur de toutes les fonctions sont disponibles à toutes les fonctions du programme. Ce sont alors des variables globales. En général, les variables globales sont déclarées immédiatement derrière les instructions #include au début du programme.
    ============================== ========================

    Tes variables ne sont pas des variables globales..il faut les sortir du main()

    a+

  19. #18
    cresus54

    Re : PIC18F46K40 Problème Variable Globale

    D'accord avec toi, dans le cas précisé, les variables déclarées dans le Main() ne sont pas des variables globale.
    Mais je montrer que mes variables déclarées "localement "dans le main() s'initialisait bien!
    Reviens au tout début de la discussion, mon problème était qu'une variable globale déclarée hors du Main() ne s'initialisait pas!
    Nom : reel.jpg
Affichages : 131
Taille : 97,5 Ko

  20. #19
    RISC

    Re : PIC18F46K40 Problème Variable Globale

    Salut,

    OK j'ai compris le PB.
    C'est très certainement un PB du mode debug qui n'affiche pas la bonne donnée car si le silicium faisait cela rien ne fonctionnerait ;=)
    Peux-tu essayer de mettre un NOP(); entre les 2 lignes var_2 pour voir ?
    Utilises-tu MPLAB X v3.55 qui vient d'être publié (peut-être que ce PB est résolu...)

    a+

Discussions similaires

  1. PHP : Variable globale dans un Switch
    Par narqoarts dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 08/04/2016, 13h59
  2. python : variable globale dans des class
    Par docEmmettBrown dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 25/05/2015, 21h29
  3. PIC18F interuption et variable globale
    Par manuj dans le forum Électronique
    Réponses: 7
    Dernier message: 07/08/2012, 15h04
  4. langage C : problème avec variable globale et scanf
    Par invitedba13d1f dans le forum Logiciel - Software - Open Source
    Réponses: 18
    Dernier message: 21/06/2009, 12h55
  5. matlab variable globale
    Par invitea255964f dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 04/06/2009, 07h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.