Skocz do zawartości

[Programowanie] Szybki start z WinAVR


Pomocna odpowiedź

Witam,
Zainstalowałem WinAVR, zrobiłem wszystko według instrukcji, i wyskakuje mi coś takiego:

> "make.exe" all

> Failed to create process: Nie można odnaleźć określonego pliku.

> Process Exit Code: 0

> Time Taken: 00:00

dodam, że mam Windows 7 64, i korzystam z programatora stk500v2.

Na poprzednik komputerze wszystko działało prawidłowo.

Pozdrawiam

nie ma pliku make.exe tam gdzie by oczekiwał. Ścieżkę dodałeś? Jeśli nie to dodaj ścieżkę do make.exe w zmiennych środowiskowych systemu operacyjnego.

Tak, dodałem katalog. Z wiersza poleceń udało mi się skompilować. W WinAVR dalej nic :/. Z plikiem makefile nie wiem na pewno, ale wydaje mi się, że jest w porządku, bo w przeciwnym razie komunikat byłby inny.

  • 2 miesiące później...

Przepraszam kolegów, ale czy nikt z Was (programujący w C) nie myślał, żeby przesiąść się na C++? Jest to "rozbudowana" wersja C. Wystarczy sięgnąć po np." Symfonia C++" i już wszystko potrafimy, tym bardziej,że umiemy C.

http://pl.wikibooks.org/wiki/C%2B%2B/Różnice_między_C_a_C%2B%2B

Jakby tak popatrzeć: GCC nie jest czystym C, wiele elementów C++ posiada, ponieważ jest to C99. W pratyce wiele możliwości określonych jako dostępne tylko w C++, mamy dostępne w C, np. możemy zrobić:

for (unsigned int i = 0; i<50;i++){...}

mimo iż jest to dozwolone tylko w C++. Natomiast klas nie widziałem, podobnie funkcji o zmiennej liczbie argumentów (jakoś powinno się to dać zrobić).

  • 1 miesiąc później...

Ja już nie mam siły do tego języka. Bascom był i jest lepszy. Próbuję skompilować taki program:

#include <tiny2313.h>   
#include <delay.h>

#define  	SW	PIND.6 
#define  	JMP	PINB.0 
#define  	VCC	PINB.2 
#define   	CLK	PORTB.3
#define  	RST	PORTB.4
#define  	IN	PORTB.1
#define  	OUT	PINB.1
#define  	LED	PORTD.0
#define     BUZZ PORTD.1
#define     PRZ PORTB.5

#define  del 15


char pytanie[48]={1,0,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,0};  // tablica zawierajaca zadawane karcie pytanie
char int_licz,int_licz1,int_licz2=0,wrong_card;							    // na podstawie ktorego generuje ona odpowiedz
unsigned int bin; 
bit ok=1;   
eeprom unsigned int chip_code[20];	// tablica przechowujaca aktywowane karty telefoniczne
eeprom int licz_kart;

char n;
int li_kart;


void reset(void)		// procedura resetujaca karte chipowa
{
RST=1;
delay_us(del);
CLK=1;
delay_us(del);
CLK=0;  
delay_us(del);
RST=0;
delay_us(del);
}     

void inc_adss(void)		// procedura zwiekszajaca adres na karcie chipowej
{
RST=0;
delay_us(del);
CLK=1;
delay_us(del);
CLK=0;
delay_us(del);
}

void wr_bit(void)		// procedura zapisujaca bit 
{
RST=1;
delay_us(del);
RST=0;
delay_us(del);
CLK=1;
delay_us(del);
CLK=0;
delay_us(del);
}

void wr_carry(void)		// procedura zapisujaca bit carry na karcie chipowej
{
RST=1;
delay_us(del);
RST=0;
delay_us(del);
CLK=1;
delay_us(del);
CLK=0;
delay_us(del);
RST=1;
delay_us(del);
RST=0;
delay_us(del);
CLK=1;
delay_us(del);
CLK=0;
delay_us(del);
}


unsigned int get_code(void)		// pobiera unikalne 16 bitowe slowo karty 
{                          			// na podstawie slowa wejsciowego
char i,j,k,l;   
unsigned int code=0,bin;  

IN=1;      
DDRB.1=1;   
reset(); 

code=0;

for(i=0;i<110;i++)
{ 
inc_adss();
}
wr_bit();
for(i=0;i<177;i++)
{
inc_adss();
}
for(j=0;j<48;j++)
{ 
IN=pytanie[j];
inc_adss();
}
DDRB.1=0;
IN=1; 
for(k=0;k<16;k++)
{  
for(l=0;l<160;l++)
{ 
inc_adss();
}     
 if(OUT==1)
 {code=code+1;
 }
if(k!=15) code=code<<1;                    
}

return code; 
}       

void dzwiek(void)		// generuje dzwiek - podwojny krotki
{  int q;
for(q=0;q<2;q++)
{
   BUZZ=0;
      delay_ms(70);
      BUZZ=1;
      delay_ms(40);
}
} 


char check_card(void)	// procedurka porownujaca slowo pobrane z karty z
{unsigned int c;		// zawartoscia EEPROMU jezeli ok. to zwraca 1
int j;
c=get_code();
for(j=0;j<licz_kart;j++)
{if(chip_code[j]==c)
 return 1;
}
return 0;
}	 


// procedurka obslugi przerwania od timera T0 (generowane co ok. 10ms)                              

interrupt [TIM0_OVF] void timer0_ovf_isr(void) 
{  

#asm("cli")     
if(!SW && VCC)
{ bin = get_code();
 if(!check_card() && bin!=0 && bin!=65535 && licz_kart<20)
   {chip_code[licz_kart]=bin;
   licz_kart+=1;
   li_kart+=1;
   dzwiek(); 
   wrong_card=0;}
   else
   { 
   }
   while(VCC)
   ;
}  


DDRD.6=0;   // SW jako wejscie
PORTD.6=1;

if(SW==0)
{if( ++int_licz2>15)         
  {   int_licz2=0;
      BUZZ=0;
      LED=1;
      delay_ms(400);
      BUZZ=1;
      LED=0;
      licz_kart=0;
      li_kart=0;  
  }
} else {int_licz2=0;
       }            

   if(wrong_card>4)
  { int_licz1=0;
   wrong_card=0;
   BUZZ=0;
   PRZ=0;
      for(n=0;n<20;n++)
      delay_ms(1000);
      BUZZ=1;
      }

  if(++int_licz1==3000)  
	{ wrong_card=0;

    }


if( JMP==0 && PRZ==1)
{   if(++int_licz==30)
{int_licz=0;
PRZ=0;}
}
else int_licz=0;

#asm("sei")
}


void main(void)
{

PORTB=56;
DDRB=56;
PORTD.0=1;
DDRD.0=1; 
PORTD.1=1;
DDRD.1=1;
TCCR0=0x05;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
GIMSK=0x00;
MCUCR=0x00;
TIMSK=0x02;            
ACSR=0x80;

DDRB.2=0;   // VCC jako wejscie
PORTB.2=1;   

DDRD.6=0;   // SW jako wejscie
PORTD.6=1;   


DDRB.0=0;   // JMP jako wejscie
PORTB.0=1;   

CLK=0;
RST=0;
LED=0;
li_kart=licz_kart;

#asm("sei")

while (1)
     {  
int i;             
   delay_ms(3);  
   if(VCC==1)
   {LED=1; 
      	bin=get_code();
      	if(check_card() && bin!=0 && bin!=65535)
      	{
      		if(JMP==1)	   
      		{
      	    dzwiek();
      		PRZ=!PRZ;
      		} 
      		else 
      		{   
      		PRZ=1;
      		dzwiek();
      		}
       }
        else
       {
        wrong_card+=1;
        int_licz1=0;
	    } 
	    LED=0;
	   while(VCC==1)
	   ; 
    }
     };
}

i ciągle wywala mi takie błędy:

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: zamek.c
avr-gcc -c -mmcu=attiny2313 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./zamek.lst  -std=gnu99 -MMD -MP -MF .dep/zamek.o.d zamek.c -o zamek.o 
zamek.c:1:25: warning: tiny2313.h: No such file or directory
zamek.c:2:19: warning: delay.h: No such file or directory
zamek.c:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ok'
zamek.c:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'unsigned'
zamek.c:23: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
zamek.c: In function 'reset':
zamek.c:31: error: 'PORTB' undeclared (first use in this function)
zamek.c:31: error: (Each undeclared identifier is reported only once
zamek.c:31: error: for each function it appears in.)
zamek.c:31: error: expected ';' before numeric constant
zamek.c:32: warning: implicit declaration of function 'delay_us'
zamek.c:33: error: expected ';' before numeric constant
zamek.c:35: error: expected ';' before numeric constant
zamek.c:37: error: expected ';' before numeric constant
zamek.c: In function 'inc_adss':
zamek.c:43: error: 'PORTB' undeclared (first use in this function)
zamek.c:43: error: expected ';' before numeric constant
zamek.c:45: error: expected ';' before numeric constant
zamek.c:47: error: expected ';' before numeric constant
zamek.c: In function 'wr_bit':
zamek.c:53: error: 'PORTB' undeclared (first use in this function)
zamek.c:53: error: expected ';' before numeric constant
zamek.c:55: error: expected ';' before numeric constant
zamek.c:57: error: expected ';' before numeric constant
zamek.c:59: error: expected ';' before numeric constant
zamek.c: In function 'wr_carry':
zamek.c:65: error: 'PORTB' undeclared (first use in this function)
zamek.c:65: error: expected ';' before numeric constant
zamek.c:67: error: expected ';' before numeric constant
zamek.c:69: error: expected ';' before numeric constant
zamek.c:71: error: expected ';' before numeric constant
zamek.c:73: error: expected ';' before numeric constant
zamek.c:75: error: expected ';' before numeric constant
zamek.c:77: error: expected ';' before numeric constant
zamek.c:79: error: expected ';' before numeric constant
zamek.c: In function 'get_code':
zamek.c:89: error: 'PORTB' undeclared (first use in this function)
zamek.c:89: error: expected ';' before numeric constant
zamek.c:90: error: 'DDRB' undeclared (first use in this function)
zamek.c:90: error: expected ';' before numeric constant
zamek.c:106: error: expected ';' before numeric constant
zamek.c:109: error: expected ';' before numeric constant
zamek.c:110: error: expected ';' before numeric constant
zamek.c:117: error: 'PINB' undeclared (first use in this function)
zamek.c:117: error: expected ')' before numeric constant
zamek.c:87: warning: unused variable 'bin'
zamek.c: In function 'dzwiek':
zamek.c:130: error: 'PORTD' undeclared (first use in this function)
zamek.c:130: error: expected ';' before numeric constant
zamek.c:131: warning: implicit declaration of function 'delay_ms'
zamek.c:132: error: expected ';' before numeric constant
zamek.c: In function 'check_card':
zamek.c:142: error: 'licz_kart' undeclared (first use in this function)
zamek.c:143: error: 'chip_code' undeclared (first use in this function)
zamek.c: At top level:
zamek.c:152: error: 'TIM0_OVF' undeclared here (not in a function)
zamek.c:152: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
zamek.c:155:2: error: invalid preprocessing directive #asm
zamek.c:212:2: error: invalid preprocessing directive #asm
zamek.c:216: warning: return type of 'main' is not 'int'
zamek.c: In function 'main':
zamek.c:219: error: 'PORTB' undeclared (first use in this function)
zamek.c:220: error: 'DDRB' undeclared (first use in this function)
zamek.c:221: error: 'PORTD' undeclared (first use in this function)
zamek.c:221: error: expected ';' before numeric constant
zamek.c:222: error: 'DDRD' undeclared (first use in this function)
zamek.c:222: error: expected ';' before numeric constant
zamek.c:223: error: expected ';' before numeric constant
zamek.c:224: error: expected ';' before numeric constant
zamek.c:225: error: 'TCCR0' undeclared (first use in this function)
zamek.c:226: error: 'TCNT0' undeclared (first use in this function)
zamek.c:227: error: 'TCCR1A' undeclared (first use in this function)
zamek.c:228: error: 'TCCR1B' undeclared (first use in this function)
zamek.c:229: error: 'TCNT1H' undeclared (first use in this function)
zamek.c:230: error: 'TCNT1L' undeclared (first use in this function)
zamek.c:231: error: 'OCR1AH' undeclared (first use in this function)
zamek.c:232: error: 'OCR1AL' undeclared (first use in this function)
zamek.c:233: error: 'GIMSK' undeclared (first use in this function)
zamek.c:234: error: 'MCUCR' undeclared (first use in this function)
zamek.c:235: error: 'TIMSK' undeclared (first use in this function)
zamek.c:236: error: 'ACSR' undeclared (first use in this function)
zamek.c:238: error: expected ';' before numeric constant
zamek.c:239: error: expected ';' before numeric constant
zamek.c:241: error: expected ';' before numeric constant
zamek.c:242: error: expected ';' before numeric constant
zamek.c:245: error: expected ';' before numeric constant
zamek.c:246: error: expected ';' before numeric constant
zamek.c:248: error: expected ';' before numeric constant
zamek.c:249: error: expected ';' before numeric constant
zamek.c:250: error: expected ';' before numeric constant
zamek.c:251: error: 'licz_kart' undeclared (first use in this function)
zamek.c:253:2: error: invalid preprocessing directive #asm
zamek.c:259: error: 'PINB' undeclared (first use in this function)
zamek.c:259: error: expected ')' before numeric constant
zamek.c:260: error: expected ';' before numeric constant
zamek.c:264: error: expected ')' before numeric constant
zamek.c:267: error: expected ';' before numeric constant
zamek.c:271: error: expected ';' before numeric constant
zamek.c:280: error: expected ';' before numeric constant
zamek.c:281: error: expected ')' before numeric constant
zamek.c:257: warning: unused variable 'i'
make.exe: *** [zamek.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:01

W c nie można odnosić się do poszczególnych bitów tak jak w bascomie, więc zapis w stylu "PORTB.0=1;" jest jak najbardziej nie poprawny, a że masz takich dużo(bardzo dużo) to też wyskoczyło mnóstwo błędów.

Dodtakowo, co tam zauważyłem, to zamiast:

#include <tiny2313.h>    
#include <delay.h> 

daj:

#include <avr/io.h>
#include <util/delay.h> 

Ten język wcale nie jest głupi, jest inny i trzeba się jego nauczyć jak się chce z niego korzystać. Fakt nie jest taki łatwy jak bascom, ale jest bardzo uniwersalny.

Od razu powiem że program nie jest mój, bo nie napisałbym aż tak złożonego programu. Dopiero poznaję podstawy tego języka a i tak mam kłopoty. Sory w ogóle za takie posty bo czuję że w niewłaściwym temacie to napisałem.

@matrix: jeśli całkowicie olewasz komunikaty o błędach, to nie nauczysz się żadnego języka programowania. co to ma być niby za typ "bit"? Typy eepromu deklaruje się zupełnie inaczej.

Bascom lepszy? Niby czemu? W żadnym języku pisząc niezgodnie z jego regułami nie napiszesz działającego programu.

@matrix: jeśli całkowicie olewasz komunikaty o błędach, to nie nauczysz się żadnego języka programowania.

Ale ja tych błędów nie olewam, ja ich najzwyczajniej nie rozumiem, a skoro nie rozumiem to nie wiem jak je poprawić?

Zobacz ,że połowa błędów to brak ; Kompilator dokładnie podaje w której lini powinien być. Jak klikniesz na błąd to nawet cie tam przeniesie. Bascom jest w wiele prostszy ale uczy złych nawyków takich jak brak ;

[ Dodano: 10-04-2011, 12:38 ]

Przed delay_us musi być _ czyli powinno być _delay_us(czas);

Zobacz ,że połowa błędów to brak ;

No właśnie nie rozumiem bo ten znak średnika jest. Kompilator wywala na przykład błąd:

amek.c:31: error: expected ';' before numeric constant

dla linii 31 gdzie napisane jest:

ST=1;

Kompilator informuje mnie że powinien być ten średnik a ja widzę że on jest i nie wiem o co chodzi?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...