Skocz do zawartości

[Programowanie] Szybki start z WinAVR


abxyz

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

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.

Link do komentarza
Share on other sites

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ć).

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

@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.

Link do komentarza
Share on other sites

@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ć?

Link do komentarza
Share on other sites

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);

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.