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

MikroC vous aide à perdre votre temps, souriez
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1019
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#1 Message par paulfjujo » dim. 15 avr. 2018 19:51

:furieux: encore une boulette de MikroC !

ou comment perdre plus de 2 plombes sur un probleme INEXISTANT ... :cry:

morceau de code posant probleme :

Code : Tout sélectionner

// version avec probleme : because majuscule sur Source
void strConstRamCpy(unsigned char *dest, const code char *Source)
{
  while (*Source)  *(dest++) = *(Source++) ;
  *(dest)=0;
}


message windows :
189 300 Syntax Error: ')' expected, but '"Mini_DDS_12F1840"' found Mini_DDS_12F1840_180415.c
192 402 ; expected, but '=' found Mini_DDS_12F1840_180415.c
192 371 Specifier needed Mini_DDS_12F1840_180415.c
192 396 Invalid declarator expected'(' or identifier Mini_DDS_12F1840_180415.c
193 371 Specifier needed Mini_DDS_12F1840_180415.c
193 396 Invalid declarator expected'(' or identifier Mini_DDS_12F1840_180415.c
196 393 '' Identifier redefined Mini_DDS_12F1840_180415.c
196 300 Syntax Error: '(' expected, but '{' found Mini_DDS_12F1840_180415.c
0 102 Finished (with errors): 15 avr. 2018, 18:07:38 Mini_DDS_12F1840.mcppi


je cherche , tourne en rond , SANS TROUVER quoi que ce soit ...
DIVISER POUR MIEUX REGNER !
je decoupe mon code en petit morceaux ( mise en commentaire de certaines parties ) jusqu'à trouver une compilation sans erreurs ..
et là je tombe sur la fonction ci -dessus ???? :furieux:

par harsard je modifie le nom de variable Source en variable source ..


Code : Tout sélectionner

//  OK avec la version ci-dessous  et source sans majuscule au début !
/*
void strConstRamCpy(unsigned char *dest, const code char *source)
 {
  while (*source) *(dest++) = *(source++) ;
  *dest = 0 ;    // terminateur
}


BINGO !

Code : Tout sélectionner


0 1144 Used RAM 
(bytes): 168 (70%)  Free RAM (bytes): 72 (30%) Used RAM (bytes): 168 (70%)  Free RAM (bytes): 72 (30%)
0 1144 Used ROM (program words): 4058 (99%)  Free ROM (program words): 38 (1%) Used ROM (program words): 4058 (99%)  Free ROM (program words): 38 (1%)
0 125 Project Linked Successfully Mini_DDS_12F1840.mcppi
0 128 Linked in 47 ms  
0 129 Project 
'Mini_DDS_12F1840.mcppi' completed: 281 ms  
0 103 Finished successfully
: 15 avr. 2018, 19:43:42 Mini_DDS_12F1840.mcppi



De quoi etre dégouté de ce MikroC ! apres avoir laché 240 boules !
moi qui aimait tant C18 gratuit ! (bon j'aurais pas pu programmer mon 12F avec C18, d'accord)
Je vais fini par retourner sur le monstrueux MPLAB X
ou :sifflotte: MPLAB XPRESS ..

le projet mikroc en cours concerné par ce probleme ( Generateur DDS minimaliste avec sortie signal ana sur RA2 ... pas encore finalisé )
_Mini_DDS_12F1840.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

MikroC vous aide à perdre votre temps, souriez
venom
Avatar de l’utilisateur
Passioné
Passioné
Messages : 368
Âge : 32
Enregistré en : avril 2016
Localisation : . <------ ici
Contact :

#2 Message par venom » dim. 15 avr. 2018 21:52

:eek: WOUAH truc de fou juste pour une majuscule tu a eu une erreur. En effet il y a de quoi être dégouté. Nous ne sommes même pas maitre d’écrire nos propre procédure :sad:






@++

MikroC vous aide à perdre votre temps, souriez
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1019
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#3 Message par paulfjujo » lun. 16 avr. 2018 10:31

la reponse sur mikroelektronika

[i ]
You already have an define in your code:
#define Source "Mini_DDS_12F1840"
That's the mistake.
Peter
[/i]

MAIS ..

------------------- ma reponse ---------------------------------
hello,
PARBLEU, mais c'est bien sur !
Thank's for your help..

Normally, global variable are separate from local variable ..

if i add in my globale variable :
unsigned char *source;
and use (same variable name!)

Code : Tout sélectionner

void strConstRamCpy(unsigned char *dest, const code char *source)
 {
  while (*source) *(dest++) = *(source++) ;
  *dest = 0 ;    // terminateur
}


i get NO errors in compile ..

does it means that #define = reserved name for only one variable into the program ?
--------------------------------------------------------------------

pourtant le distingo entre variable globale et variable locale est bien établi..
le #define serait donc particulier.
Attendons une reponse de MikroE sur ce point ...

on en apprend ou on s'adapte tous les jours ...

j'ai meme vu sur le site MicroChip forum, cette forme d'ecriture

SSPBUFF;

Quoi t-est-ce-que ?
sous entendu que le compilo ferait un
dummy=SSPBUFF ;


idea ! disgression:

si on ne garde pas une certaine rigueur d'ecriture de programme, et qu'on se dit que le compilo corrigera
ça craint un maximum pour les futures voitures sans conducteur !
Ne pas oublieraussi qu'un compilo , c'est d'abord un programme !
De la à écrire un code en SMS , y a pas loin.

MikroC vous aide à perdre votre temps, souriez
satinas
Passioné
Passioné
Messages : 283
Enregistré en : novembre 2015

#4 Message par satinas » lun. 16 avr. 2018 12:51

Bonjour,
J'aurais dû y penser hier en voyant ton post ...

Tu peux avoir des variables globales et locales de même nom. La variable locale sera prioritairement utilisée tant qu'elle reste en vie.
Les defines et macros sont traitées par le préprocesseur C.
Pour le define, ce n'est que find et replace tout simple effectivement.
Pour les macros, c'est plus compliqué car il faut traiter les arguments, mais c'est toujours du traitement de texte.
Un deuxième source C ainsi étendu est généré par le préprocesseur, et l'étape de compilation peut alors commencer.

Le préprocesseur détecte peu d'erreur, il indiquera par exemple qu'il manque un argument lors de l'utilisation d'une macro, ou une tentative de redefine sans utiliser #undef. Dans ton cas il a rien vu car sa syntaxe était respectée. C'est le compilateur qui a crié.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 4 invités