Program de corectat plss pentru licenta

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
catalin
Junior
Junior
Posts: 1
Joined: 17 Mar 2013, 17:50
Judet: Olt

Program de corectat plss pentru licenta

Post by catalin » 17 Mar 2013, 18:03

Salut.Cine poate sa ma ajute si pe mine cu programul asta?Imi da foarte multe erori la declarare.

Code: Select all

#include <ctype.h>
#define WRITEPORT(port,newval,keepMask) \
    (port) =  ((newval) & (~keepMask)) | ((port) & (keepMask));
#define setBit(var, bitnum)   (var)|=(1<<(bitnum))
#define resBit(var, bitnum)   (var)&=~(1<<(bitnum))
#define clearBit(var, bitnum) (var)&=~(1<<(bitnum))
#define testBit(var, bitnum)  (var)&(1<<(bitnum))
// Definiţii
static char store_unget=0;   
void init_ports(void) {
   ADCON1 = 0x06; 
   PORTA = 0;
   TRISA = 0xFC;  // setarea portului A ca intrare cu excepţia pinilor RA1,RA0 

   PORTB = 0;
   TRISB = 0;     // portul B este setat ca iesire
   PORTC = 0x00;
   TRISC = 0x81;  
   PORTD = 0;
   TRISD = 0;     // portul D este setat ca iesire
   PORTE = 0;
   TRISE = 0;     // portul E este setat ca iesire
}
void init_LCD(void) {
   Lcd_Config(&PORTB,0,2,1,7,6,5,4);   
}
int USART_get_char() {
unsigned short ch;
   if (store_unget!=0) {
      ch = store_unget;
      store_unget = 0;
      return ch;
   }
   while (! Usart_Data_Ready()) {;} // aşteaptă intrarea
   return  Usart_Read();  
}
void USART_unget_char(unsigned short ch) {
   store_unget = ch;
}
int get_2dig_num() {
unsigned short ch1,ch2;
   ch1 = USART_get_char();  // primul digit
   if (! isdigit(ch1) ) {   // nu e un digit aşa că eşuează şi iese.
      USART_unget_char(ch1);
      return -1;
   }
   ch2 = USART_get_char();  // al doilea digit

   if (! isdigit(ch2) ) {    // nu e un digit aşa că eşuează.
      USART_unget_char(ch2);
      // în acest caz este folosit un singur digit
      return (ch1-'0');
   }
   return ((ch1-'0')*10) + (ch2-'0');
}
void get_and_set_X(unsigned short *px, unsigned short *py) {
int num;
   num = get_2dig_num();
   if (num==-1) return;
   *px = num % 40; 
   Lcd_Out(*py+1,*px+1,""); // updatează poziţia cursorului
}
void get_and_set_Y(unsigned short *px, unsigned short *py) {
int num;
   num = get_2dig_num();
   if (num==-1) return;
   *py = num;
   Lcd_Out(*py+1,*px+1,""); // updatează poziţia cursorului
}
void execute_command(char rx, unsigned short *px,unsigned short *py) {
   switch (toupper(rx)) {
         case 'C' : Lcd_Cmd(LCD_CLEAR);       *px=0;*py=0;  break;
         case 'H' : Lcd_Cmd(LCD_RETURN_HOME); *px=0;*py=0;  break;
         case 'L' : Lcd_Cmd(LCD_MOVE_CURSOR_LEFT); *px-=1;  break;
         case 'R' : Lcd_Cmd(LCD_MOVE_CURSOR_RIGHT);*px+=1;  break;
         case 'U' : Lcd_Cmd(LCD_UNDERLINE_ON);              break;
         case 'B' : Lcd_Cmd(LCD_BLINK_CURSOR_ON);           break;
         case 'I' : Lcd_Cmd(LCD_CURSOR_OFF);                break;
         case 'F' : Lcd_Cmd(LCD_TURN_OFF);          break;
         case 'O' : init_LCD();*px=0;*py=0;                 break;
         case 'X' : get_and_Set_X(px,py);                     break;
         case 'Y' : get_and_set_Y(px,py);                      break;
         case '.' : 
         case '>' : Lcd_Cmd(LCD_SHIFT_RIGHT);     break;
         case ',' : 
         case '<' : Lcd_Cmd(LCD_SHIFT_LEFT);        break;
         case '#' : Lcd_Chr(*py+1,*px+1,'#');*px+=1;   break;
         default  : USART_unget_char(rx); 
   }
}
void get_prefix_and_execute_command(unsigned short *px, unsigned short *py) {
int rx;
   while (! Usart_Data_Ready()) {;} // aşteaptă apăsarea unei taste
   rx = USART_get_char();
   execute_command(rx,px,py);
}
void show_intro(void) {
int i                   ; 
char *msg1,msg2         ; 
char str1[] = "PROIECT LICENTA";
   Lcd_Cmd(LCD_RETURN_HOME); // Realizează deplasarea cursorului spre stânga sus
   i = 0;
   while (1) {
      if (Usart_Data_Ready()) break; 
      switch (i) {
         case 0 :  msg1 = str1; msg2 = str2; break;
         case 1 :  msg1 = str2; msg2 = str3; break;
         case 2 :  msg1 = str3; msg2 = str4; break;
         case 3 :  msg1 = str4; msg2 = str5; break;
         case 4 :  msg1 = str5; msg2 = str1; break;
      }
      Lcd_Cmd(LCD_CLEAR);       // Şterge afişorul
      Lcd_Out(1, 1, msg1);      // rândul 1
      Lcd_Out(2, 1, msg2);      // rândul 2
      if(i==0) delay_ms(3000); else delay_ms(1000);
      if(++i==5) i=0; 
   }
} 
void main() {
int rx                  ; // Datele portului de intrare USART.
unsigned short blinkc=0 ; 
unsigned short x=0,y=0  ; // Poziţiile curente x,y de pe afişorul LCD.
char op[4]              ; 
   init_ports();
   init_LCD();
   USART_Init(2400);         
   Lcd_Cmd(LCD_CLEAR);       // Şterge afişorul
   Lcd_Cmd(LCD_CURSOR_OFF);  
   show_intro();
   execute_command('C',&x,&y); 
   execute_command('B',&x,&y); // Blochează cursorul
   for(;;) {
      rx = USART_get_char();
      if (rx=='#') { 
         get_prefix_and_execute_command(&x,&y);
         rx=0; // 
      } else {       // Acesta e textul pentru afişare
         LCD_Chr(y+1,x+1,rx); // afişează şi
         x++;                 // updatează poziţia lui x
      }
   } // Buclă infinită de tip for
}



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: eroare compilare

Post by Ovidiu Cucu » 17 Mar 2013, 18:43

Pai, in primul rand te ajuta compilatorul care iti da o lista de erori, care contine fisierul sursa si linia unde este eroarea plus un cod de eroare si o scurta descriere. Daca din astea nu te prinzi despre ce-i vorba, iei frumusel codul erorii si-l cauti in documentatie unde poti gasi explicatii mai pe larg si eventual ceva exemple si sfaturi cum s-ar putea corecta.

De exemplu, ai compilat sa zicem cu VC++ si iti da ceva de genul

Code: Select all

1>c:\projects\myproject\test.cpp(11) : error C2065: 'ADCON1' : undeclared identifier
Poti arunca un ochi in MSDN la Compiler Error C2065.
Sau, daca folosesti alt compilator, cauti in documentatia lui proprie.

Desi e destul de clar la ce ne-ai aratat, ca folosesti oaresce variabile nedeclarate, care probabil ar trebui sa aiba declaratia prin vreun header pe care nu l-ai inclus.
Banui ca nu tu ai scris codul, ci l-ai luat de pe undeva de pe net. Mai uita-te odata cu atentie acolo si vezi daca-ti spune ce headere trebuie incluse.

Atat pana acum. Din ce ne-ai dat cu copy-paste aici, nu cred ca poate nimeni sa te ajute cu mai mult.
Retine deocamdata ca, spre deosebire de alte limbaje, in C++ orice variabila trebuie neaparat sa fie declarata inainte de a fi folosita.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: eroare compilare

Post by Ovidiu Cucu » 17 Mar 2013, 20:14

Cautand pe net am gasit confirmarea la ce-am spus mai inainte: codul e copy-pastuit intial de pe undeva de pe net, de exemplu de la
http://read.pudn.com/downloads197/sourc ... cd.c__.htm
...si doar modificate/traduse niste comentarii.

Din cate vad eu acolo si imi dau seama, este cod pentru un microcontroler, iar identificatori precum ADCON1, PORTA etc au o semnificatie speciala, probabil registri, porturi, alte chestii care tin de hardware si care sunt recunoscuti ca atare de catre un compilator dedicat. Doar banuiesc, n-as putea sa intru in amanunte deoarece n-am scris programe C pentru microcontrolere. Daca cineva a facut-o si stie mai bine, rog sa corecteze.
Si banui ca ar trebui sa folosesti un compilator dedicat daca vrei sa compilezi asa ceva.

Insa cel mai bine ar fi sa intri si sa intrebi intr-un forum dedicat programarii microcontrolerelor, de exemplu:
http://www.edaboard.com/forum31.html

Bafta!

viorel2005
Membru
Membru
Posts: 208
Joined: 24 May 2008, 09:41

Re: eroare compilare

Post by viorel2005 » 17 Mar 2013, 20:47

Codul este scris pentru compilatorul de mikroC.
http://www.mikroe.com/mikroc/pic/?gclid ... 3godPXkAAw

Totusi, pentru a vedea rezultatul executiei trebuie sa faci debug si daca codul
este scris pentru o schema electronica(99% din cazuri, doar daca nu e vreun driver special)
trebuie sa ai si placa electronica.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Program de corectat plss pentru licenta

Post by Ovidiu Cucu » 21 Mar 2013, 20:51

[ split topic ]

Post Reply