Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Probleme de pointeur ou ? (Résolu)
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » sam. 27 mai 2023 19:14

bonsoir,


Je ne vois pas pourquoi ça bugue ici !
txt=&TEXTE[0];
une affectation de pointeur , ne devrait pas modifier le contenu de l'element pointé ..
à part un effet de bord non désiré par d'autres portions de code ....

mais si je supprime cette affectation la
la 2em partie s'execute OK
:!!: je sais, j'ai vu qu'il manque les unites secondes ..

2) kL= 29
19H08M1 Sam 27 Mai 25.13°C
Long Trame = 29


avec bavard=1
remplissage d'une trame d'affichage 12 max7219 avec differents éléements

le code correspondant à 1ere partie




Code : Tout sélectionner



   CPrint
(" Test Update()\r\n");
   txt=&TEXTE[0];
   Repetition_Affichage_Texte=0;
   UpDate_Trame();
   kL=strlen(txt);
   p2=txt;
   Print(p2); CRLF1();
   sprintf(CRam1," Long Trame = %5d  \r\n",kL);
   Print(CRam1);CRLF1();
   remplis_buffer_with_string(p2);
   CPrint(" remplis buffer with string TEXTE \r\n");
   Print(txt); 


resultat via YAT terminal

Test Update()
18H33M3
18H33M3 Sam
18H33M3 Sam 27 Mai
18H33M3 Sam 27 Mai 24.82°C <-- print via pointeur txt ..OK
18H33M3 Sam 27 Mai 24.82°C <--- print via pointeur P2=txt ...OK
Long Trame = 29 <-- OK !

remplis buffer with string TEXTE
18H33M3 Sam 27 Mai 24.82°C
Bit Bang Soft SPI RC2=Clk ,RC1=Dout RC0=CS -> Max7219:
Init Matrices MAX7219
Clear Matrices MAX7219

....
TEXTE to display : 18H33M3 Sam 27 Mai 24.82°C

......
=========== 2em partie=======================



code 2em partie

Code : Tout sélectionner

Test update() : 

 1
) kL=   29       <--- OK
 18H33M3           
<-- BAD!!

 2) kL=    9       <---  ???  
 18H33M3 
 Long Trame 
=     9  




Code : Tout sélectionner


 CPrint
(" Test update() : \r\n");
   sprintf(CRam1,"\r\n 1) kL=%5d \r\n",kL);
   Print(CRam1);
   txt=&TEXTE[0];                         <--- perturbation ICI !
   UpDate_Trame();
   Print(txt); CRLF1();
   kL=strlen(txt);
   sprintf(CRam1,"\r\n 2) kL=%5d \r\n",kL);
   Print(CRam1);



malgré ce test prealable

Code : Tout sélectionner


 
//--- test zone ------------- 
    for (i=0;i<sizeof(TEXTE);i++) TEXTE[i]=0;
    txt=&TEXTE[0];
    *(txt)='A';
    *(txt+1)='B';
    *(txt+2)='C';
    Print(txt);CRLF1();
    p2=txt;
    Print(p2);CRLF1();
    txt=&TEXTE[0];
    Print(txt);CRLF1();
     Print(p2);CRLF1();
 //---------------------------------


où il n'y a rien d'anormal ...

Compile le May 27 2023 a 19:00:56 UTC
avec version XC8 : 2360 et PACK PIC18F-K_DFP 1.6.125

ABC
ABC
ABC
ABC



le pack du projet mplabx
_18F27K42_Horloge_12xMax7219_2023-0527.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par paulfjujo le dim. 28 mai 2023 12:14, modifié 1 fois.
Aide toi, le ciel ou FantasPic t'aidera

Probleme de pointeur ou ?
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » dim. 28 mai 2023 12:10

bonjour,

:sifflotte: j'ai appliqué ma devise .. et trouvé le bug


Avant la premeiere partie
j'ai utilisé la fonction RTC

Code : Tout sélectionner

 cx=Lecture_Affichage_Registre_DS3231(j,1); // parametre 1=avec affichage   

pour recuperer Time..

mais entre la 1ere partie et la 2em partie ,j'ai utilisé cette fonction
Print_Date_Complete();
or dans cette fonction time resultat était sur 9 cars 12H23M15S +zero
et non plus 8 cars 12:23:15 +zero
j'avais donc un zero terminateur de trop qui s'inserait apres le Update()
et donc écourtait le string txt ! ... un zero = terminateur de string
(déja qu' au départ, un string n'est pas tres long!) oops non c'est pas obscène !


Code : Tout sélectionner

  
void Print_Date_Complete
(void)
 {
     DS3231_Read_All_Registers();
     time[0]=0;
     BCD_To_Ascii(jour,date); date[2]='/';
     BCD_To_Ascii(mois,date+3); date[5]='/';
     BCD_To_Ascii(Annee,date+6); date[8]=0;
     
     CPrint
(JourSemaine[jS]);PrintChar(' ');
     BCD_To_Ascii(jour,CRam1);Print (CRam1);PrintChar(' ');
     Month=Bcd2Dec(mois);
     CPrint(Douze_Mois[Month]);PrintChar(' ');
     BCD_To_Ascii(Annee,CRam1);Print (CRam1);PrintChar(' ');
     BCD_To_Ascii(heure,time) ;   time[2]=':';
     BCD_To_Ascii(minute,time+);  time[5]=':';
     BCD_To_Ascii(second,time+6);   
     
// was  time[8]='S';time[9]=0;                                      <----  BUG Here!
      time[8]=0;
     Print(time);
     CRLF1();
  }
 


le terminal est vraiment utile dans ces cas là !
Aide toi, le ciel ou FantasPic t'aidera

Probleme de pointeur ou ? (Résolu)
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » lun. 29 mai 2023 09:08

:bravo:

Bien joué car il fallait la trouver celle la
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Probleme de pointeur ou ? (Résolu)
nicolas78
Membre
Membre
Messages : 1
Enregistré en : juillet 2023

#4 Message par nicolas78 » ven. 7 juil. 2023 13:05

Salut,

Merci beaucoup pour ce partage, ça m'a vraiment aidé :idea:

Merci


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 113 invités