Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Erreur compilation MPLAB



  1. #1
    Docteur_who

    Erreur compilation MPLAB


    ------

    Bonjour,

    je suis actuellement en train de développer un programme pour PIC en C. Mais MPLAB me met le message suivant quand j'appelle une de mes fonctions: "can't generate code for this expression". J'ai cherché sur internet les raisons de cette erreur, en général c'est une histoire de pointeurs mais je n'en utilise pas pour cette fonction.

    je vous joins les bouts de code en cause :

    déclarations
    Code:
    float ADC_Result(bit pin);
    
    	float i;
    extrait du main en cause:
    Code:
    	do{ 
    			i=ADC_Result(1);	//erreur à l'appel de cette fonction
    			}while(i<Imax);
    la fonction:

    Code:
    float ADC_Result(bit pin)
    {
    	float current;
    
    	if(pin){
    				CHS2=CHS1=0;	//RA1 is measured
    				CHS0=1;
    	}
    	
    	else	CHS0=CHS1=CHS2=0;	//RA0 is measured
    
    	GODONE=1;		//Conversion starts
    	while(GODONE);	//wait for the end of conversion
    
    	current=((ADRESH*256)+ADRESL)*q; //calculation of the current
    
    	return(current);
    }
    Merci à tous ceux qui pourront m'aider

    -----

  2. Publicité
  3. #2
    cherwam07

    Re : Erreur compilation MPLAB

    Pourquoi tu met des float partout ?

    Remplace les par des int

  4. #3
    Docteur_who

    Re : Erreur compilation MPLAB

    Citation Envoyé par cherwam07 Voir le message
    Pourquoi tu met des float partout ?

    Remplace les par des int
    J'ai essayé et ça me donne les mêmes erreurs.

    Je préfère des floats pour éviter aux personnes qui seront peut-être amenées à modifier la valeur Imax de faire des calculs de conversion.

  5. #4
    cherwam07

    Re : Erreur compilation MPLAB

    On ne met pas de float dans un PIC !

    Mais bon si c'est pas ca...tu évoques "can't generate code for this expression", le compilo t'indique surement la ligne sur laquelle il bute ?

    Par exemple ca :
    else CHS0=CHS1=CHS2=0; //RA0 is measured
    C'est correct en C, mais si le compilo est un peu leger :
    1) Il peut chercher à tout prix des accolades {}
    2) Il peut ne pas comprendre l'enchainemenent de '='

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

    Re : Erreur compilation MPLAB

    L'erreur est sur la ligne d'appel de la fonction mais il n'en indique pas dans la fonction elle-même.

    Il n'y a plus que des int, le compilateur c'est HI-TECH. J'ai remplacé l'enchainement de '=' et ajouté des accolades même si cela fonctionne ailleurs dans le programme mais l'erreur subsiste.

    ps: on ne peut pas manipuler de nombres decimaux dans un pic?
    Dernière modification par Docteur_who ; 12/06/2012 à 14h58.

  8. #6
    mrhyd

    Re : Erreur compilation MPLAB

    Peux-tu préciser quel PIC tu utilises?

  9. Publicité
  10. #7
    Docteur_who

    Re : Erreur compilation MPLAB

    J'utilise un PIC16F88

  11. #8
    cherwam07

    Re : Erreur compilation MPLAB

    Citation Envoyé par Docteur_who Voir le message
    ps: on ne peut pas manipuler de nombres decimaux dans un pic?
    Si on peut, mais c'est un format de représentation des nombres qui n'est pas géré nativement.
    Ca demande donc au compilateur de rajouter du code, donc parfois pas mal de calcul que tu ne vois pas, pour gérer ces nombres, ce qui est lourd, et peu performant. Le même souci existe plus ou moins sur nos PC de tous les jours, mais les ressources sont tellement énorme qu'on peut fermer les yeux.

    De plus, ton CAN te renvoi un résultat sous forme d'entiers (ADRESHn etc.)
    Alors quand tu écris
    current=((ADRESH*256)+ADRESL)* q
    Tu manipules des types qui n'ont rien à voir, en priant implicitement pour que ton compilo fasse ce que tu attendes.

  12. #9
    Docteur_who

    Re : Erreur compilation MPLAB

    C'est bon j'ai réussi à compiler en remplaçant le bit par un int

    int ADC_Result(int pin);

    à la place de

    flat ADC_Result(bit pin);

    Voilà merci beaucoup Cherwam et mrhyd d'avoir tenté de résoudre mon problème.

    Docteur_who

  13. #10
    Docteur_who

    Re : Erreur compilation MPLAB

    Citation Envoyé par cherwam07 Voir le message
    Si on peut, mais c'est un format de représentation des nombres qui n'est pas géré nativement.
    Ca demande donc au compilateur de rajouter du code, donc parfois pas mal de calcul que tu ne vois pas, pour gérer ces nombres, ce qui est lourd, et peu performant. Le même souci existe plus ou moins sur nos PC de tous les jours, mais les ressources sont tellement énorme qu'on peut fermer les yeux.
    Merci de l'info je m'en rapellerai pour mes projets futurs.

Discussions similaires

  1. MPLAB compilation
    Par ladainian83 dans le forum Électronique
    Réponses: 3
    Dernier message: 17/03/2012, 23h14
  2. erreur de compilation avec Mplab ?
    Par barth69 dans le forum Électronique
    Réponses: 4
    Dernier message: 17/07/2011, 08h54
  3. [PIC/MPLAB]- Erreur lors de la compilation
    Par jorg1n dans le forum Électronique
    Réponses: 3
    Dernier message: 19/08/2010, 07h55
  4. [MPLAB / C18] - Erreur de compilation
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 20/11/2009, 10h32
  5. Problème compilation MPLAB
    Par guijac92 dans le forum Électronique
    Réponses: 0
    Dernier message: 18/06/2008, 21h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.