CCS error
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

CCS error



  1. #1
    invite774e931e

    CCS error


    ------

    bonjour
    je programme une carte digicode et le compilateur CCS m'affiche les erreurs suivants:
    * previous identifier must be a pointer ( pour le script suivant)
    for(k==0;k<4;k++)
    {
    do
    {
    A[k]= kbd_getc ();
    }
    * numeric expression must appear here ( pour le script suivant)
    ...
    else
    ...
    SVP je veux l'aide et merci d'avance

    -----

  2. #2
    LABTOOL48

    Re : CCS error

    bonjour

    moi aussi je suis un débutant mais je pesne qu'il te faut ecrire un pointeur pour ton tableau A[] exemple "const pointeur* A " et dans ta boucle for() incrimenter le pointeur de A[] et pas le contune de ton tableau exempe
    for(i=0;i<4;i++)
    {

    pointeur ++; // l'adresse de tableau +1
    }
    et pour la variable K=0 et pas K==0 on ne fait pas la comparison ici
    dans cette zone on initialse seulment la variable

  3. #3
    mortaurat

    Re : CCS error

    Peut t'on avoir le programme entier ?

  4. #4
    invite774e931e

    Re : CCS error

    bonjour
    voila une portion du programme:
    ...
    for(k=0;k<4;k++)
    {
    do
    {

    A[k]= kbd_getc ();

    }
    while (A[k]==0||A[k]=='b'||A[k]=='a');
    LCD_putc("*");
    }
    delay_ms(2000);
    if ((A[0]=='1')&&(A[1]=='2')&&(A[2]=='3')&&(A[3]=='4'))
    {
    lcd_gotoxy (1,2);
    ...
    je pense aussi a declarer un pointeur mais comment ?? pouvez vous me donner la solution ?

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

    Re : CCS error

    bonjour

    moi je ne comprendre pas bien ton code est-ce qu'il est a toi ?
    sinon dis nous que fait ta fonction "kbd_getc(); car pour moi cette fonction elle ne fait rien que ecrasé la variable "k" de ton tableau
    et pour le pointeur pour ton tableau je pesnse que c'est possible d'utiliser la variable FSR avec son pointeur INDF charger le FSR avan l'appel a ta fonction

    exemple
    FSR = A;
    for(k=0;k<4;k++)
    {
    do
    {

    A[k]= kbd_getc ();
    INDF ++;
    }
    while (A[k]==0||A[k]=='b'||A[k]=='a');
    bonn chanse

  7. #6
    LABTOOL48

    Re : CCS error

    désolé ce la ne marche pas car il faut tester le INDF
    "while (INDF==0||INDF=='b'||INDF=='a' ); et dans ce cas je ne sais commet faire pour inctrimenter le INDF dans la boucle

  8. #7
    invite774e931e

    Re : CCS error

    ok j veux t'expliquer c que je veux dire:

    ...
    for(k=0;k<4;k++) // K est une variable qqe
    {
    do
    {

    A[k]= kbd_getc (); // le tableau A recoit les coordonnees de boutons de la clavier a 16 touches //

    }
    while (A[k]==0||A[k]=='b'||A[k]=='a'); // elliminer * et #
    LCD_putc("*");
    }
    delay_ms(2000);
    if ((A[0]=='1')&&(A[1]=='2')&&(A[2]=='3')&&(A[3]=='4')) // 1 2 3 4 est le code a taper pour ouverture de porte //
    {
    lcd_gotoxy (1,2);
    ...
    mais c'est qoi INDF ?? la probleme c'est que je doit utiliser un pointeur pour le tableau A...mais je sais pas comment ?

  9. #8
    mortaurat

    Re : CCS error

    Citation Envoyé par LABTOOL48 Voir le message
    sinon dis nous que fait ta fonction "kbd_getc(); car pour moi cette fonction elle ne fait rien que ecrasé la variable "k" de ton tableau
    Pas du tout, Kbd_getc() renvoit le code ASCII d'une touche saisie au clavier.
    Il a juste un tableaux A et il affecte à la case 'k' la valeur du code ASCII saisi au clavier. A devrait être du type "char A[80] ;"

    Je veux bien ton code entier, avec la ligne exacte ou ce situe l'erreur. Il est difficile de resonner sur une si petite partie, nous n'avons même pas la declaration des variables.

  10. #9
    mortaurat

    Re : CCS error

    Citation Envoyé par zizou_ali Voir le message
    mais c'est qoi INDF ?? la probleme c'est que je doit utiliser un pointeur pour le tableau A...mais je sais pas comment ?
    Utilise une variable globale pour ton tableaux !
    Ce n'est pas 4 octets de ram qui va tuer ton µc...

    Le pointeur à l'inconvenient de rendre un code incomprehensible...

    Si tu tiens absolument à utiliser les pointeurs tu dois envoyer dans une fonction l'adresse du tableau (&A[0]), pointer vers le debut du tableaux, et incrementer ton pointeur.

  11. #10
    invite774e931e

    Re : CCS error

    ok voila mon programme. je pense que j'ai trouvé une sol pour le cas de pointeur mais cette fois ci il m'affiche une erreur " a segment of program is too large" je pense ainsi a faire des procedures et l'appelle dans le main mais j'ai compliqué les choses ...PLZ je veux une correction..(le compilateur est le CCS)

    Code:
    #include "prog_principal.h"
    #include "PCF8583.c"
    #include "2432pointeuse.C"
     
    
    long int chartoint(char code[3])
    {long int param;
    param=(code[1]-48 +(code[0]-48)*10);
    return param;
    }
    char bytetochar(byte x)
    {char param [3];
    param[0]=x/100+48;
    param[1]=x/10-((param[0]-48)*10);
    param[2]=x-((param[0]-48)*100)-((param[1]-48)*10);
    return x;
    }
    void initial()
    {
    lcd_init();
    kbd_init();
    }
    void main()
    {int page,an,a,x; long int timeout;
    char c;
    char code[2];
    date_time_t dt;
    
    timeout=0;
    
       setup_adc_ports(NO_ANALOGS);
       setup_adc(ADC_OFF);
       setup_psp(PSP_DISABLED);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       lcd_init();
       init_ext_eeprom();
       PCF8583_init();
       an=read_eeprom(0);
       printf("Voulez vous regler le  temps/date de\n\r");
    
       SET_TRIS_C(0x86);
       output_low(PIN_C0);
    
    
    
    while(1)
      {
       while (!kbhit()&&(++timeout<3000)) {delay_ms(1);++timeout;lcd_gotoxy(1,1);lcd_putc("Init...");}
       if (timeout >3000){break;}
       c = getc();
       c = toupper(c);
    
       if(c == 'O')
         {
       L1:printf("\n\r");
          printf("donnez le mois Format:XX\n\r");
          while(!kbhit());gets(code);
          dt.month   = chartoint(code);
          if (dt.month >12){printf("format Incorrect ?\n\r");goto L1;}
          printf("\n\r");
       L2:printf("donnez le jour Format:XX\n\r");
          while(!kbhit());gets(code);
          dt.day     = chartoint(code); printf("\n\r");
          if (dt.day >31){printf("format Incorrect ?\n\r");goto L2;}
       L3:printf("donnez année Format:XX\n\r");
          while(!kbhit());gets(code);
          an    = chartoint(code);printf("\n\r");
          if (an <7){printf("Date invalide ?\n\r");goto L3;}
          if (an >99){printf("Date invalide ?\n\r");goto L3;}
          write_EEPROM(0,an);
       L4:printf("donnez heure Format:XX\n\r");
          while(!kbhit());gets(code);
          dt.hours   = chartoint(code);printf("\n\r");
          if (dt.hours >23){printf("format Incorrect ?\n\r");goto L4;}
       L5:printf("donnez minute Format:XX\n\r");
          while(!kbhit());gets(code);
          dt.minutes = chartoint(code);printf("\n\r");
          if (dt.minutes >59){printf("format Incorrect ?\n\r");goto L5;}
          dt.seconds = 0;
          dt.weekday = 0;
    
          PCF8583_set_datetime(&dt);
          printf("\n\r");
          printf("Nouvelle date/temps est ecrite dans le PCF8583.\n\r");
          break;
         }
    
       if(c == 'N')
          break;
    
      }
    
    while(1)
      {
       while (!kbhit()&&(++timeout<3000)) {delay_ms(1);++timeout;lcd_gotoxy(1,1);lcd_putc("Init...");}
       if (timeout >3000){break;}
       c = getc();
       c = toupper(c);
    
       if(c == 'O')
         {
          for (c=1;c<256;c=c+1)
          {              printf("   ");
                         putc(bytetochar(x));
          for (page=1;page<31;page=page+1)
                         {
                         dt.day=read_ext_eeprom(page+c-48);putc(dt.day); printf("  ");
                         dt.month=read_ext_eeprom(page+c-48+256);putc(dt.month);printf("  ");
                         dt.hours=read_ext_eeprom(page+c-48+512);putc(dt.hours);printf("  ");
                         dt.minutes=read_ext_eeprom(page+c-48+1024);putc(dt.minutes);printf("  ");printf("\n\r");
                         }
          }
          break;
         }
    
       if(c == 'N')
          break;
    
      }
    
    printf("\n\r");
    
    printf("Démarrage avec succé \n\r");
    while(1)
      {
       delay_ms(1000);
    
       PCF8583_read_datetime(&dt);
       lcd_gotoxy(1,1);
       printf(LCD_putc," %u/%u/10 %u:%02u:%02u\n\r",
                dt.day, dt.month
               dt.hours, dt.minutes, dt.seconds);
      
      }
      
      initial();  
      {
    lcd_gotoxy (1,2);
    lcd_putc ("entrez code");  
    
    for(j=0;j<4;j++)
         { do
         {
         B[j]= kbd_getc ();
         }
         while (B[j]==0||B[j]=='b'||B[j]=='a');
          LCD_putc("*");
         }
         delay_ms(2000);
          if ((B[0]=='1')&&(B[1]=='2')&&(B[2]=='3')&&(B[3]=='4')) 
          {
          lcd_gotoxy (1,2);
          LCD_putc("CODE correcte");
          output_high(PIN_C2);  
          delay_ms(700);
          delay_ms(1500);
          lcd_gotoxy (1,2);        
          LCD_putc("ouverture porte"); 
          output_high(PIN_C3);  
          delay_ms(2000);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          lcd_gotoxy (1,2);
         lcd_putc("entrez S.V.P");
        
           
         
          if (input (pin_D0)==1)
       { output_low(PIN_C3);
       output_low(PIN_C2);
       lcd_gotoxy (1,2);
           lcd_putc("fermeture");
           delay_ms(300);
            
       } }
          else  
          {
              lcd_gotoxy (1,2);
              LCD_putc("CODE incorrecte");
              output_high(PIN_C1); 
              delay_ms(200);
              output_low(PIN_C1);
              delay_ms(200);
              output_high(PIN_C1);
              delay_ms(200);
              output_low(PIN_C1);
              delay_ms(200);
              output_high(PIN_C1);
              delay_ms(200);
              output_low(PIN_C1);
              delay_ms(2000);
              lcd_gotoxy (1,2);
              LCD_putc("Retapez SVP!");
             
          }
            
     for(k=0;k<4;k++)
              {
              do
              {
            
              *(A+k)= kbd_getc ();
                 
              }
              while (*(A+k)==0||*(A+k)=='b'||*(A+k)=='a');
              LCD_putc("*");
              }
              delay_ms(2000);
              if ((*A=='1')&&(*(A+1)=='2')&&(*(A+2)=='3')&&(*(A+3)=='4')) 
              {
              lcd_gotoxy (1,2);
              LCD_putc("CODE correcte");
              output_high(PIN_C2);
              delay_ms(700);
              delay_ms(1500);
              lcd_gotoxy (1,2);
              LCD_putc("ouverture porte");
              output_high(PIN_C3);  
          delay_ms(2000);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          lcd_gotoxy (1,2);
         lcd_putc("entrez S.V.P");
         
          
          if (input (pin_D0)==1)
       { output_low(PIN_C3);
       output_low(PIN_C2);
       lcd_gotoxy (1,2);
           lcd_putc("fermeture");
           delay_ms(300);
            
       } 
              
              else
                  {
                  lcd_gotoxy (1,2);
                  LCD_putc("CODE incorrecte");
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(200);
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(200);
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(2000);
                  lcd_gotoxy (1,2);
                  LCD_putc("Retapez CODE!");
                  lcd_gotoxy (4,2);
                  }
       for(l=0;l<4;l++)
                  {
                  do
                  {
                  D[l]= kbd_getc ();
                  }
                  while (D[l]==0||D[l]=='b'||D[l]=='a');
                  LCD_putc("*");
                  }
                  delay_ms(2000);
                  if ((D[0]=='1')&&(D[1]=='2')&&(D[2]=='3')&&(D[3]=='4'))  
                  {
                  lcd_gotoxy (1,2);
                  LCD_putc("CODE correcte");
                  output_high(PIN_C2);
                  delay_ms(700);
                  delay_ms(1500);
                  lcd_gotoxy (1,2);
                  LCD_putc("ouverture de porte");
                  output_high(PIN_C3);  
          delay_ms(2000);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          delay_ms(700);
          output_low(PIN_C3);
          delay_ms(700);
          output_high(PIN_C3);
          lcd_gotoxy (1,2);
         lcd_putc("entrez S.V.P");
         
          
          if (input (pin_D0)==1)
       { output_low(PIN_C3);
       output_low(PIN_C2);
       lcd_gotoxy (1,2);
           lcd_putc("fermeture");
           delay_ms(300);
            
       } }
    
                  }
                   else  
                  {
                  
                  lcd_gotoxy (1,2);
                  LCD_putc("DESOLE");
                  delay_ms(500);
                  lcd_gotoxy (1,2);
                  LCD_putc("CODE incorrecte");
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(200);
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(200);
                  output_high(PIN_C1);
                  delay_ms(200);
                  output_low(PIN_C1);
                  delay_ms(2000);
                  LCD_putc("Vous avez depa-");
                  lcd_gotoxy (2,2);
                  LCD_putc("sser la limite");
                  delay_ms(2000);
                  output_high(PIN_C0);
                  output_high(PIN_C5);
                  LCD_putc("clavier bloquée");
                  output_high(PIN_C0);
                  delay_ms(2000);
                   output_low(PIN_C0);
                  output_high(PIN_C5);
                   delay_ms(2000);
                  output_low(PIN_C5);           
                  }}}
    le fichier prog_principale.h est comme suit
    Code:
    #include <16F877.h>
    #device adc=8
    #use delay(clock=4000000)
    #fuses NOWDT,RC, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
    #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
    #define EEPROM_SCL   PIN_C3
    #define EEPROM_SDA   PIN_C4
    #include "LCD1.C"
    #include "kbd1.c" 
    #byte port_b=6   
    #byte port_d=8  
    #byte port_c=7  
    
    #include <ctype.h>
    #include <string.h>
    
    int K,j,l;  
    char B[8],A[8],D[8];  
    char code [4];
    char code1[4];
    byte key, ee_adr ;

  12. #11
    mortaurat

    Re : CCS error

    Tu n'a pas besoin de pointeur, tu as declaré ton tableau A en variable globale.
    Par contre, je met tjr les variables dans le .c, mais bon...

  13. #12
    invite774e931e

    Re : CCS error

    ok le main parait trop long pour cela il mindique erreur dans l'espace ROM dnc comment faire pour reduire le main . je pense a faire des procedures contenant le code dans le main et l'appele dans le main..mais comment ? pourrez vous le courriger ?

  14. #13
    mortaurat

    Re : CCS error

    Citation Envoyé par zizou_ali Voir le message
    pourrez vous le courriger ?
    Oula non, ton code, c'est du charabia. Pas un seul commentaire pour environ 200 lignes de code... Et je ne parle pas de l'indentation ou des variables qui ne portent pas des noms significatif...

    Un manque d'espace dans la memoire ROM est etonnant, tu es sur que tu manque de rom ? Utilise un autre pic alors.

    Pour rendre ton code plus lisible, tu peut utiliser des fonctions que tu appel dans ton main. D'ailleurs ton main ne devrait contenir que des appels de fonctions !

Discussions similaires

  1. Rs232 sur ccs c
    Par invite4b36df62 dans le forum Électronique
    Réponses: 12
    Dernier message: 13/05/2009, 01h07
  2. CCS compiler
    Par invitefc1671e3 dans le forum Électronique
    Réponses: 0
    Dernier message: 16/09/2007, 21h27
  3. CCS et nom d'utilisateur
    Par invite0fadfa80 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 20/06/2007, 22h40
  4. Ccs Mplab
    Par inviteb679aa6a dans le forum Électronique
    Réponses: 2
    Dernier message: 29/08/2006, 22h01
  5. CCS C... problème
    Par invitea093086b dans le forum Électronique
    Réponses: 2
    Dernier message: 16/09/2005, 11h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...