[MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

[MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)



  1. #1
    Bertrand.adw

    [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)


    ------

    Bonjour,

    Je découvre l'IDE MPLAB (8.9) et je rencontre quelques difficultés.
    En fait, j'ai créé un programme très simple qui fait une somme et une multiplication sur la variable p :


    Code PHP:
    #include "33EP512MU810.h"
    #DEVICE ICD = true, ICD = 3

    #FUSES NOPROTECT, NOWRT, NOGSSK, NOAPLK, NOWDT, noPUT,HS, CKSFSM, PLLWAIT, NOIOL1WAY, noIESO, NOJTAG,debug


    void main(void){ 
    int p=5;
    p=p+5;
    p=p*10;



    Pour debugger, j'utilise le mode MPLAB SIM et j'observe les valeurs de p dans le watch :
    p=5 puis p=10 et enfin p=200 au lieu de 100 !
    Il y a toujours une multiplication par 2 quand j'utilise "*".

    Avez vous une idée ?

    Merci

    -----

  2. #2
    RISC

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Salut,

    Sous MPLAB X le résultat est correct et je doute aussi qu'il soit faux sous MPLAB v8.XX.
    Il serait plus simple d'utiliser une variable globale dans ton cas de façon est ce qu'elle soit visible en permanence dans la fenêtre de watch :
    Code:
    int p=5; 
    void main(void){
    D'autre part, je pense que tu vas avoir beaucoup de problème avec le dsPIC33EP512MU810 si tu essayes ton code sur un vrai circuit...
    Les dsPIC33EP ont besoin d'une séquence au démarrage pour initialiser l'oscillateur et la PLL (lire la documentation).
    Une bonne méthode serait de partir d'un exemple de code CExxx de Microchip mais tu utilises un autres compilateur que XC16 (CCS ?) et les exemples ne sont pas compatibles....

    Je te conseille également d'utiliser MPLAB X qui est plus convivial que MPLAB v8.xx

    a+

  3. #3
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    D'accord, vous me rassurez déjà, si ça fonctionne chez vous.
    Je vais essayer de creuser cette histoire (oui, le compilateur est CCS)

  4. #4
    Murayama

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Bonjour!

    Je ne sais pas si ceci peut être utile, mais j'ai déjà eu le problème avec un MSP430.
    Quand on configure le multiplieur en virgule constante (*), il considère que le premier bit
    à gauche est le signe, et que le reste est le chiffre lui-même entre 0 et 1. Le multiplieur hardware
    configuré en virgule constante fait les opérations correctement, mais si vous laissez en virgule
    constante et que vous essayez de calculer 1x1 avec des entiers, vous obtenez 2. Ce qui fait
    que tout se passe bien si on n'oublie pas de repasser en multiplieur ordinaire, mais qu'on
    va dans le mur si on oublie.

    (*) Je ne sais pas si on dit comme ça en français, c'est une traduction littérale.

    Pascal

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

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Bonjour,

    J'ai essayé de multiplier des "float", le problème persiste.
    Savez vous comment configurer MPLAB pour utiliser le multiplieur ordinaire ?

    Merci

  7. #6
    RISC

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Salut,
    Il n'y a pas besoin de configurer MPLAB ou MPLAB X.
    Ce que tu décris semble impossible (PB avec des int, des float).
    Peux-tu faire voir une capture d'écran et décrire précisémment comment tu lances le programme, comment tu l'arrêtes .
    Fais tu pas à pas (MPLAB devrait mettre je crois automatiquement ta variable locale dans la fenêtre.
    Je te recommande de mettre ton programme dans une boucle while(1) de façon à faire du pas à pas et à regarder à chaque pas la valeur prise par p
    a+

  8. #7
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    D'accord, je vous prépare ça

  9. #8
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    J'ai branché l'ICD3 et en surveillant le watch en mode debbugger, il est indiqué "Reserved Memory" pour la valeur de "p"
    Est ce normal ?

    J'ai vais repasser en MPLAP SIM et vous faire les captures et vous expliquer comment je procède

  10. #9
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    En pièce jointe les captures d'écran : Addition normal, c'est la multiplication qui donne n'importe quoi.
    J'ai utilisé des "float" ici.

    Ma méthode :
    - Debugger --> Select tool --> MPLAB SIM
    - Compilation
    - Watch--> add symbol--> observation de la variable p
    - j'appuie sur "step into" et je regarde les valeurs du watch

    Je n'arrive vraiment pas à comprendre ce probleme.

    Merci

    Pièce jointe supprimée
    Dernière modification par JPL ; 27/07/2014 à 15h20.

  11. #10
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Désolé pour le doublon.

    Ce qui est vraiment étrange est que la division "/" fonctionne ! C'est seulement la multiplication le problème. C'est vraiment fou.
    En faisant p=p/(1/10), je trouve le bon résultat !

    Donc p=p*10 et p=p/(1/10) sont différent. Existe -t-il une autre valeur que '*' pour multiplier ?

    Merci

  12. #11
    JPL
    Responsable des forums

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Poste à nouveau tes images non zippées. Merci.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  13. #12
    Bertrand.adw

    Talking Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Pièce jointe non zippée.

    j'ai essayé un autre test (copier les 2 premières cases de tab dans res). Seul la premiere valeur est copiée.

    Code PHP:
    #include "33EP512MU810.h" 
    #DEVICE ICD = true, ICD = 3 

    #FUSES NOPROTECT, NOWRT, NOGSSK, NOAPLK, NOWDT, noPUT,HS, CKSFSM, PLLWAIT, NOIOL1WAY, noIESO, NOJTAG,debug 



    void main(void){ 
        
    float res[2]={0.0,0.0};
        
    int k;
        while(
    1){
            const 
    tab[5] ={7.0,8.0,3.0,5.0,8.0};
            for(
    k=0;k<2;k++){
                   
    res[k]=tab[k]; 
            }    
        }


    J'obtiens res[2]={7.0,0.0}.
    Pourriez vous verifier ce programme sous votre systeme et me dire ce qu'il en est ?
    Merci
    Images attachées Images attachées

  14. #13
    Bertrand.adw

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Dernière image que je n'ai pas pu ajouter dans le message précédant (limitation)
    Images attachées Images attachées  

  15. #14
    paulfjujo

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    bonjour,


    En principe je mets toujours mes init de variables en dehors d'une boucle infinie tel que
    tab doit aussi etre specifié comme table de flottants.
    et le while(1) apres les resultats à verifier..

    Code:
    void main(void)
    {  
        float res[2]={0.0,0.0}; 
        const float tab[5] ={7.0,8.0,3.0,5.0,8.0}; 
        int k; 
         for(k=0;k<2;k++)
           { 
                res[k]=tab[k];  
            } 
         while(1);    
     }
    et concernant les captures d'ecran

    sur les copies d'ecran
    avec
    Code:
    float p=5.0;
    
    void main()
    {
    while(1)
    {
    p=p*5.0;
    p=p*10.0;
    }
    }
    dans une boucle infinie ... çà part directement en cacahuete...! debordement capacité du flottant en quelques µS..

  16. #15
    RISC

    Re : [MPLAB] Mauvais résultat d'une simple multiplication (visualisation watch)

    Salut,

    J'ai pu reproduire ton problème sous MPLAB v8.90.
    Cela fonctionne correctement sous MPLAB X V2.15 (10.0 * 10.0 = 100.0)

    Après avoir consulté la documentation de MPLAB v8.90, j'ai trouvé que la plupart des dsPIC33EP ne sont pas supporté du tout en simulation ou seulement partiellement (ce qui est le cas de ton dsPIC33EP512MU810). Donc tu peux t'attendre à d'autres problèmes car la release production n'a jamais eu lieu puisque MPLAB a basculé à MPLAB X il y a 4 ans...
    Cela est décrit dans le fichier readme su simulateur : C:\Program Files (x86)\Microchip\MPLAB IDE\Readmes\Readme for MPLAB SIM.htm

    En conclusion, si tu veux utiliser le simulateur pour les dsPIC33EP, il vaudrait mieux passer sur MPLAB X.
    A noter : toutes les fonctionalités ne sont pas encore supportées dans le simulateur (sous MPLAB X on peut voir dans une fenêtre quels sont les périphériques supportés pour chaque PIC en simulation.
    Si tu as un ICD3 sous la main est un carte, il vaudrait mieux travailler dessus.

    a+
    Dernière modification par RISC ; 28/07/2014 à 14h25.

Discussions similaires

  1. Mplab X V 1.95 - Watch
    Par jeym21 dans le forum Électronique
    Réponses: 1
    Dernier message: 24/02/2014, 13h30
  2. [MPLAB] Problème "out of bounds" fenêtre "WATCH"
    Par invite8a011b82 dans le forum Électronique
    Réponses: 4
    Dernier message: 22/08/2012, 11h47
  3. MPLAB 8.40 fenêtre Watch
    Par Laboum dans le forum Électronique
    Réponses: 7
    Dernier message: 26/11/2009, 08h13
  4. mplab mauvais chemin
    Par invite3c0815c5 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/09/2009, 13h05
  5. Réponses: 1
    Dernier message: 07/11/2006, 16h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.