FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  help: erreur lors de l'éxécution de notre programme

 




Il y a 25 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

help: erreur lors de l'éxécution de notre programme

n°5777
Milka81
Posté le 07-06-2005 à 14:22:37  profilanswer
 

bonjour
nous sommes un groûpe d'étudiants et nous devons réaliser
un projet informatique mais l'école est plus orienté "méca dans les transports" d'ou notre niveau en info pour le moins pitoyable.  
le but de ce projet est d'afficher une pression de pneu :le microcontrolleur récupère le signal venant du captur de pression, le convertit en valeur de pression puis l'affiche sur un afficheur LCD intelligent type RTC .  
nous avons tt le matériel pour réaliser la simulation et notre progrmme est terminé  
oui mais voila on a des erreurs repérées lors de l'éxécution avec bootloader et on ne connait pas leur origine...
 
voici les erreurs:
Error[1] E:\Projet info\prgmfinal.c 26 : Symbol 'RC2' is undefined  (The definition of the symbol in not known. This can be due to  
 wrong spelling or letter case mismatch. Otherwise a new symbol  
 definition is required: variable, function, macro, etc.)  
 
 
Deleting intermediary files... done.  
Executing: "C:\Progra~1\Pic\CC5X\Bin\CC5X.EXE" prgmfinal.c -CC -fINHX8M -p16F877 -IC:\Progra~1\Pic\CC5X\include\avecbootloader -a -L -Q -V -FM  
CC5X Version 3.2, Copyright (c) B Knudsen Data, Norway 1992-2004  
 --> FREE edition, 8-16 bit int, 24 bit float, 1k code, reduced optim.  
prgmfinal.c:  
 
      PORTC=0;  
      Lcd_RS=0;  
   
     Lcd_E;  
         ^------  
Error[2] E:\Projet info\prgmfinal.c 58 : Symbol 'RC3' is undefined  
  #define pins PORTC  
  #define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;  
              ^------  
Error[3] E:\Projet info\prgmfinal.c 10 : Previous error is at macro 'Lcd_E'  
       
     Lcd_E;  
         ^------  
Error[4] E:\Projet info\prgmfinal.c 58 : Illegal statement in function 'wr_Lcd'  (The syntax can not be compiled. Rewriting is required)  
 
  #define pins PORTC  
  #define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;  
              ^------  
Error[5] E:\Projet info\prgmfinal.c 10 : Previous error is at macro 'Lcd_E'  
Error options: -ew: no warning details  -ed: no error details  -eL: list details  
BUILD FAILED: Mon Jun 06 17:02:02 2005  
 
 
voici le programme:
#pragma chip PIC16F877 //déclaration microcontrôleur  
#pragma config WDTE=off,FOSC=HS  
#pragma bit V@PORTA.0//capteur de pression relié au bit 0 du portA (port en analogique)  
#pragma bit BP1@PORTB.1//bouton pour gonflage  
#pragma bit BP2@PORTB.2//bouton pour dégonflage  
#pragma bit OK@PORTB.3//bouton validation pression demandée  
#pragma origin=0x05  
 
  #define pins PORTC  
  #define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;  
  #define Lcd_RS RC2  
     
  unsigned char cL;  
     
  void Efface_LCD(void);  
  void Ligne_LCD(char cLigne);  
  void Efface_LigneLCD(char cEff);  
  void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS);  
  void Ini_Lcd(void);  
  void Tempo(char ti); // tempo  
     
  void Ini_Lcd(void)    
  {  
      // ****   initialisation LCD *****  
      PORTC=0;  
      Lcd_RS=0;  
      for(cL=0;cL<2;cL++) {TMR0=1; while(TMR0 != 0);} //32ms  afficheur  
         
      pins=0x30;  
      Tempo(189); // 4,3ms E inclus  
      Tempo(254); // 150µs    
      pins=0x20;  
      Tempo(254); // 150µs    
       
      //**** initialisation paramètres LCD **********************************  
      wr_Lcd(0x38,0);  // Mode 8 bits 2 lignes  
      wr_Lcd(1,0);     // Efface l'affichage initialisation  DD-ram  
      wr_Lcd(0x0C,0);  // Affichage des caractères de gauche à droite et curseur se déplace  
      wr_Lcd(6,0);     // Déplacement vers la droite  
       
    }    
       
     void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS)      
     {    
     char b3;  
     Lcd_RS=cLcd_RS;  
       
     b3=cVar & 0xF0;   // envoi 4 bit poids fort  
     pins=pins & 4;    // copie du bit lcd_E  
     pins=pins | b3;    
       
     Tempo(255);  
                   
        pins=pins & 4;   // envoi 4 bits poids faible  
        b3=(cVar<<4);  
        pins=pins | b3;  
       
     Lcd_E;  
        if((cVar>2) && (Lcd_RS==0)) TMR0=255; // tempo 86µs  
       else TMR0=228;                         // tempo 1,7ms    
          while(TMR0 != 0);      
       }  
       
     void Tempo(char ti)  
     {  
     Lcd_E;  
     TMR0=ti;  
     while(TMR0 != 0);  
     }  
       
     void Ligne_LCD(char cLigne)  
     {    
     if(cLigne==1) wr_Lcd(0x80,0); // afficheur ligne 1  
       else if (cLigne==2) wr_Lcd(0xC0,0); // afficheur ligne 2  
       }  
       
     void Efface_LigneLCD(char cEff)  
     {    
     if(cEff==1)  
      {      
      wr_Lcd(0x80,0);      // set DDRAM passe 1 ere ligne  
      for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces  
      }  
             
     if(cEff==2)  
      {      
      wr_Lcd(0xC0,0);      // set DDRAM passe 2 eme ligne    
      for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces  
      }        
     }  
       
    void Efface_LCD(void)  
     {  
      wr_Lcd(1,0);    
     }    
 
  #include<pic16877.h> // fichier du pic16F877  
   #include "lcdspi.h"  // fichier du lcd (HD 44780),partie config juste au dessus  
     
   void Message_Lcd(const char* texte) // fonction de transfert, d'un message vers lcd    
   
   void Message_Lcd(const char* texte)    // écriture d'une chaine de caractère  
   {  
     char cCount=0;  
     while (texte[cCount] != 0 )        
     wr_Lcd(texte[cCount++],1);  
   }  
//-------------------------------------------------------------  
//DECLARATION DES VARIABLES????????  
 
float V,PA,PD;  
int k;  
//-------------------------------------------------------------  
 
void conversion(V) // fonction de conversion de tension capteur en pression  
{OPTION_REG=0x00//résistances pull-up actives  
 TRISA=0x00; // Port A en entrée (capteur)  
 TRISC=0x00; // Port C en sortie vers l'afficheur LCD  
 PORTC=0;  
{  
 {PA=1.725*V-0.8625;  
 }  
return PA  
}  
 
void main() // fonction qui incrémente ou décrémente la valeur de la pression demandée  
{TRISD=0x00; // Port D en sortie, commande gonflage et dégonflage  
 TRISC=0x00; // Port C en sortie vers l'afficheur LCD  
 TRISA=0x00; // Port A en entrée,capteur  
 TRISB=0xFF; // Port B en entrée pour BP  
 PD=PA  
{   //écriture message-> bon emplacement?????  
     OPTION=0b10000101; // initialise TMR0 pas de 64µs  
       
     Ini_Lcd();   // Initialisation lcd      
           
     Efface_LCD();  
     Ligne_LCD(1);    
     Message_Lcd("PRESSION EN BARS : " );  
     Ligne_LCD(2);  
     Message_Lcd("ACT : "PA" DEM : "PD" " );  
     while(1);    
}      
{while(1);  
  {  PA=conversion(V);  
 if (BP2==0) // Appui sur la touche décrémentant la pression demandée  
 {PD=PD-0.1;return PD  
  {for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)  
 }  
 
 if (BP1==0) // Appui sur la touche incrémentant la pression demandée  
 {PD=PD+0.1;return PD  
  {for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)  
 }  
 
 if (OK==0)// validation de la valeur demandée  
  {if (PD>PA)  
  {GONF=1;  
  until (PA==PD);  
  }  
  {if (PD<PA)  
  {DEGONF=1;  
  until (PA==PD);  
  }  
  {if (PD=PA) (nop());  
 
 
 if((GONF==1)&&(PD<PA))  
  {GONF=0}  
 
 if((DEGONF==1)&&(PD>PA))  
  {DEGONF=0}  
  }  
}  
 
merci d'avance pour ceux qui auront le courage de répondre et d' se pencher sur la question..
 
 

mood
Google
Posté le 07-06-2005 à 14:22:37  profilanswer
 

n°5778
HARDCOREGA​MER
lllllloooooollllll
Posté le 07-06-2005 à 16:00:54  profilanswer
 

mais ton code entre les balise [cpp]


---------------
<-=|HARDCOREGAMER|=-> -=||=- GNU_USER  -=||=- FRAGUEUR [:hardcoregamer:1]
venez sur irc.langochat.net, chan #lol
n°5779
Milka81
Posté le 07-06-2005 à 16:19:31  profilanswer
 

merci pour la réponse il fo mettre les programmes et les SP  
entres crochets c'est çà ?  
keske çà veut dire cpp?

n°5780
HARDCOREGA​MER
lllllloooooollllll
Posté le 07-06-2005 à 16:20:42  profilanswer
 

voui, tu met ton code entre les balises [ cpp] et [ /cpp]
ça affichera le numero des lignes, c'est plus simple pour la visualisation
Bon, c'est mon jour de bontée :D
 

Code :
  1. #pragma chip PIC16F877 //déclaration microcontrôleur   
  2. #pragma config WDTE=off,FOSC=HS 
  3. #pragma bit V@PORTA.0//capteur de pression relié au bit 0 du portA (port en analogique)   
  4. #pragma bit BP1@PORTB.1//bouton pour gonflage   
  5. #pragma bit BP2@PORTB.2//bouton pour dégonflage   
  6. #pragma bit OK@PORTB.3//bouton validation pression demandée   
  7. #pragma origin=0x05 
  8.   #define pins PORTC 
  9.   #define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0; 
  10.   #define Lcd_RS RC2 
  11.    
  12.   unsigned char cL; 
  13.    
  14.   void Efface_LCD(void); 
  15.   void Ligne_LCD(char cLigne); 
  16.   void Efface_LigneLCD(char cEff); 
  17.   void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS); 
  18.   void Ini_Lcd(void); 
  19.   void Tempo(char ti); // tempo   
  20.    
  21.   void Ini_Lcd(void)   
  22.   { 
  23.       // ****   initialisation LCD *****   
  24.       PORTC=0; 
  25.       Lcd_RS=0; 
  26.       for(cL=0;cL<2;cL++) {TMR0=1; while(TMR0 != 0);} //32ms  afficheur   
  27.        
  28.       pins=0x30; 
  29.       Tempo(189); // 4,3ms E inclus   
  30.       Tempo(254); // 150µs     
  31.       pins=0x20; 
  32.       Tempo(254); // 150µs     
  33.      
  34.       //**** initialisation paramètres LCD **********************************   
  35.       wr_Lcd(0x38,0);  // Mode 8 bits 2 lignes   
  36.       wr_Lcd(1,0);     // Efface l'affichage initialisation  DD-ram   
  37.       wr_Lcd(0x0C,0);  // Affichage des caractères de gauche à droite et curseur se déplace   
  38.       wr_Lcd(6,0);     // Déplacement vers la droite   
  39.        
  40.     }     
  41.        
  42.      void wr_Lcd(unsigned char cVar,unsigned char cLcd_RS)       
  43.      {     
  44.      char b3;   
  45.      Lcd_RS=cLcd_RS;   
  46.        
  47.      b3=cVar & 0xF0;   // envoi 4 bit poids fort   
  48.      pins=pins & 4;    // copie du bit lcd_E   
  49.      pins=pins | b3;     
  50.        
  51.      Tempo(255);   
  52.                    
  53.         pins=pins & 4;   // envoi 4 bits poids faible   
  54.         b3=(cVar<<4);   
  55.         pins=pins | b3;   
  56.        
  57.      Lcd_E;   
  58.         if((cVar>2) && (Lcd_RS==0)) TMR0=255; // tempo 86µs   
  59.        else TMR0=228;                         // tempo 1,7ms     
  60.           while(TMR0 != 0);       
  61.        }   
  62.        
  63.      void Tempo(char ti)   
  64.      {   
  65.      Lcd_E;   
  66.      TMR0=ti;   
  67.      while(TMR0 != 0);   
  68.      }   
  69.        
  70.      void Ligne_LCD(char cLigne)   
  71.      {     
  72.      if(cLigne==1) wr_Lcd(0x80,0); // afficheur ligne 1   
  73.        else if (cLigne==2) wr_Lcd(0xC0,0); // afficheur ligne 2   
  74.        }   
  75.        
  76.      void Efface_LigneLCD(char cEff)   
  77.      {     
  78.      if(cEff==1)   
  79.       {       
  80.       wr_Lcd(0x80,0);      // set DDRAM passe 1 ere ligne   
  81.       for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces   
  82.       }   
  83.              
  84.      if(cEff==2)   
  85.       {       
  86.       wr_Lcd(0xC0,0);      // set DDRAM passe 2 eme ligne     
  87.       for(cL=0;cL<=15;cL++)wr_Lcd(0x20,1);  // affiche des espaces   
  88.       }         
  89.      }   
  90.        
  91.     void Efface_LCD(void)   
  92.      {   
  93.       wr_Lcd(1,0);     
  94.      }     
  95.  
  96.   #include<pic16877.h> // fichier du pic16F877   
  97.    #include "lcdspi.h"  // fichier du lcd (HD 44780),partie config juste au dessus   
  98.      
  99.    void Message_Lcd(const char* texte) // fonction de transfert, d'un message vers lcd     
  100.    
  101.    void Message_Lcd(const char* texte)    // écriture d'une chaine de caractère   
  102.    {   
  103.      char cCount=0;   
  104.      while (texte[cCount] != 0 )         
  105.      wr_Lcd(texte[cCount++],1);   
  106.    }   
  107. //-------------------------------------------------------------   
  108. //DECLARATION DES VARIABLES????????   
  109.  
  110. float V,PA,PD;   
  111. int k;   
  112. //-------------------------------------------------------------   
  113.  
  114. void conversion(V) // fonction de conversion de tension capteur en pression   
  115. {OPTION_REG=0x00//résistances pull-up actives   
  116. TRISA=0x00; // Port A en entrée (capteur)   
  117. TRISC=0x00; // Port C en sortie vers l'afficheur LCD   
  118. PORTC=0;   
  119. {   
  120. {PA=1.725*V-0.8625;   
  121. }   
  122. return PA   
  123. }   
  124.  
  125. void main() // fonction qui incrémente ou décrémente la valeur de la pression demandée   
  126. {TRISD=0x00; // Port D en sortie, commande gonflage et dégonflage   
  127. TRISC=0x00; // Port C en sortie vers l'afficheur LCD   
  128. TRISA=0x00; // Port A en entrée,capteur   
  129. TRISB=0xFF; // Port B en entrée pour BP   
  130. PD=PA   
  131. {   //écriture message-> bon emplacement?????   
  132.      OPTION=0b10000101; // initialise TMR0 pas de 64µs   
  133.        
  134.      Ini_Lcd();   // Initialisation lcd       
  135.            
  136.      Efface_LCD();   
  137.      Ligne_LCD(1);     
  138.      Message_Lcd("PRESSION EN BARS : " );   
  139.      Ligne_LCD(2);   
  140.      Message_Lcd("ACT : "PA" DEM : "PD" " );   
  141.      while(1);     
  142. }       
  143. {while(1);   
  144.   {  PA=conversion(V);   
  145. if (BP2==0) // Appui sur la touche décrémentant la pression demandée   
  146. {PD=PD-0.1;return PD   
  147.   {for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)   
  148. }   
  149.  
  150. if (BP1==0) // Appui sur la touche incrémentant la pression demandée   
  151. {PD=PD+0.1;return PD   
  152.   {for (k=0;k<=20;k++)(nop());} // Temporisation (pour changement trop rapide)   
  153. }   
  154.  
  155. if (OK==0)// validation de la valeur demandée   
  156.   {if (PD>PA)   
  157.   {GONF=1;   
  158.   until (PA==PD);   
  159.   }   
  160.   {if (PD<PA)   
  161.   {DEGONF=1;   
  162.   until (PA==PD);   
  163.   }   
  164.   {if (PD=PA) (nop());   
  165.  
  166.  
  167. if((GONF==1)&&(PD<PA))   
  168.   {GONF=0}   
  169.  
  170. if((DEGONF==1)&&(PD>PA))   
  171.   {DEGONF=0}   
  172.   }   
  173. }


 
Sinon, pour t'aider pour le code, j'en suis incapable :whistle:


Message édité par HARDCOREGAMER le 07-06-2005 à 16:25:35

---------------
<-=|HARDCOREGAMER|=-> -=||=- GNU_USER  -=||=- FRAGUEUR [:hardcoregamer:1]
venez sur irc.langochat.net, chan #lol
n°5781
CryoGen
Powered by kitkat©
Posté le 07-06-2005 à 16:46:54  profilanswer
 

#define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
 
ca me semble vraiment bizarre ^^ y'a pas de ';' apres un #define normalement


---------------
I am the bone of my sword...
n°5782
HARDCOREGA​MER
lllllloooooollllll
Posté le 07-06-2005 à 17:08:05  profilanswer
 

wé, surtout que c'est le seul ou il en a mi un :/


---------------
<-=|HARDCOREGAMER|=-> -=||=- GNU_USER  -=||=- FRAGUEUR [:hardcoregamer:1]
venez sur irc.langochat.net, chan #lol
n°5783
Milka81
Posté le 07-06-2005 à 17:13:49  profilanswer
 

merci  c sympa d'avoir répondu  
j'avais pas capté que les crochets c'était juste pour la visualisation enfin au moins comme çà les erreurs sauteront aux yeux des initiés..

n°5784
Milka81
Posté le 07-06-2005 à 17:15:43  profilanswer
 

on va essayer ce ke çà donne..

n°5788
ced-2k
TODO : Insert text here.
Posté le 09-06-2005 à 18:59:09  profilanswer
 

CryoGen a écrit :

#define Lcd_E RC3=1;asm("nop" );asm("nop" );RC3=0;
 
ca me semble vraiment bizarre ^^ y'a pas de ';' apres un #define normalement


pourquoi pas?? un defin c'est juste une macro qui remplacera tous les "Lcd_E" par "RC3=1;asm("nop" );asm("nop" );RC3=0;", autrement dit une impultion sur le bit enable du LCD

n°5797
Deather2
OpenBSD: the way to go!
Posté le 10-06-2005 à 01:34:44  profilanswer
 

Code :
  1. //**** initialisation paramètres LCD **********************************


 
J'ai pas eu le courage de lire tout le code, mais ca m'etonne que personne n'ai remarque ca... d'ailleurs le listing entre balises cpp plus haut montre bien le probleme !
Ceci dis ca depend de l'interpretation du compilateur. Il est possible qu'apres la lecture des // il aillent direct a la ligne suivante.
Mais attention quand meme, c'est crade.

n°5803
Dr lous
I see old password
Posté le 10-06-2005 à 18:29:04  profilanswer
 

j'adore l'include en plein milieu :D


---------------
Oseras-tu m'affronter ?
n°5804
Deather2
OpenBSD: the way to go!
Posté le 10-06-2005 à 21:50:05  profilanswer
 

[:rofl]

n°5816
KnX
To be or not to code.
Posté le 16-06-2005 à 06:51:38  profilanswer
 

RC3 est probablement définit dans l'un des includes, lorsques à la ligne 58 tu utilise Lcd_E, tu utilise RC3 , qui n'existe pas encore vu que l'include n'est qu'à la ligne 97/98 ....
 
Remonte les include en haut, y'a de grandes chances que ce soit ca le pb ....
 
( pour le commentaires, si ca fesait vraiment ce que montre la coloration, il aurait pas cette erreur, donc effectivement, le pseudo-cpp est vaguement merdique, et ne prends que les commentaires // et pas les /* */ :/ )


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
mood
Google
Posté le 16-06-2005 à 06:51:38  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  help: erreur lors de l'éxécution de notre programme

 

Hit Parade