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

MPLAB XC8 et delay_ms mysterieux bug
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2619
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » sam. 18 nov. 2023 09:55

Bonjour à tous,

:sifflotte: Je dois être abonné aux cas libidineux !

J'ai passé plusieurs heures à chercher un probleme inexistant, car mal aiguillé
par le message d'erreur signalé par le compilo ...

17/11/2023

Probleme signalé sur CPrint ... utilisé auparavant à outrance sans probleme

CPrint sert à envoyer un message string constant sur le terminal YAT (via UART1)


Code : Tout sélectionner

//en ligne 430 du main.c
void CPrint (const char *T1)
 { 
   while
(*(T1)>0) 
   
{
     while(PIR3bits.U1TXIF==0);
     U1TXB=*(T1);
    T1++;
   }


le message d'erreur :

Code : Tout sélectionner

C:/MPLABX_Projects/18F27k42_RFID_reader_2023-11.X/RC522_SPI_Hardw.X.c:207::
 error: (1098) conflicting declarations for variable "_CPrint" 
 
(C:/MPLABX_Projects/18F27k42_RFID_reader_2023-11.X/main.c:430


:mur: je n'ai pas d'autre message d'erreur !

je verifie de partout où j'ai utilisé CPrint ... (107 occurences !)
et en particulier ICI :

Code : Tout sélectionner


 CPrint
("\r\nModif bloc de 16 cars sur La Carte presentée\r\n");
             txt=&TEXTE[0];
             strcpy(txt, p2+8);
             Print(txt);CRLF1();
             CPrint("Vous avez 4 sec. pour presenter le Jeton ou la Carte\r\n ");
             __delay_ms(4000);   


et une reminescence neuronale, idea ! m'aiguille sur l'usage de __delai_ms(4000);
utilisé juste apres un CPrint ...
(qui au passage etait utilisé dans ma version (fonctionelle) en MikroC 7.60)
sachant que pour MPLABX , et l'usage de grand delais (en secondes ) j'avais déja rajouté une fonction __delay_xSec(xx);

---------------------------------------------------------------------------------
Microchip docu:
https://microchip.my.site.com/s/article ... tionaility
__delay_ms(x) // request a delay in milliseconds
The macro argument must be a constant expression. An error will result if these macros
are used without defining the oscillator frequency symbol, the delay period requested
is too large or the delay period is not a constant.
The delay argument must be a constant
and less than approximately 179,200 for PIC18 devices :!!: c'est FAUX
and approximately 50,659,000 for other devices. :!!: c'est presque ça !

sur un autre document Microchip ...
_delay
An error will result if the delay period requested is not a constant expression
or idea ! is too large (greater than 50,463,240 instructions).

-------------------------------------------------
18/11/2023
FOSC=64MHz 1 cycle=0.0625µS
50,659,000 * 0.0625= 3 166 187.5µS > 3166 mS !

1er Test avec

__delay_ms(3166); // ERROR

C:/MPLABX_Projects/18F27k42_RFID_reader_2023-11.X/main.c:2103:: error: (1274)
delay exceeds maximum limit of 50 463 240 cycles

50 463 240 * 0.0625 => 3153952 µS -> >3153 mS
2em test avec
__delay_ms(3153); // BUILD SUCCESSFUL (total time: 11s)

3em Test
retour avec __delay_ms(4000);
:eek: cette fois le message est bien lié au delai ??

C:/MPLABX_Projects/18F27k42_RFID_reader_2023-11.X/main.c:2103:: error: (1274)
delay exceeds maximum limit of 50 463 240 cycles
ET NON PLUS lié à CPrint(.. constaté la veille

:!!: J'en perds mon latin ( d'autant que je n'en ai jamais fait !)

la seule différence est que j'ai redémarré mon PC ce matin !

Le compilateur XC8 doit etre bugué quelques part ....
ou probleme de gestion memoire PC
ou gestion memoire PIC18
gestion "ramasse miettes" apres plusieurs compilations ?

EN Résumé :
ATTENTION aux messages d'erreur proposés par XC8
qui peuvent aiguiller vers de fausses pistes à suivre ...

Nota :
Consolation : j'ai vu bien pire avec MikroC qui ne sait pas gerer le bon numero de ligne
du probleme en cause ..
Aide toi, le ciel ou FantasPic t'aidera

Retourner vers « Langage C »

Qui est en ligne

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