RTV forum PL | NewsGroups PL

Jak skompilować przykłady z rklibavr z użyciem avr-gcc instrukcje krok po kroku?

avr-gcc + rklibavr - problemy przy kompilacji

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skompilować przykłady z rklibavr z użyciem avr-gcc instrukcje krok po kroku?

__rafal__
Guest

Fri Aug 24, 2007 10:05 am   



Witam!

Czy istnieje gdzieś w sieci jakaś strona gdzie opisane byłoby jak
skompilować przykłady z biblioteki rklibavr?
Ściągnąłem sobie paczkę z
http://avr.elektroda.eu/?q=system/files/rklibavr_20060316.tgz
Znajdują się w niej dwa katalogi: lib oraz przykład. W przykład jest
kilkanaście innych katalogów z programami demonstrującymi działanie. Są
to moje pierwsze kroki z kompilacją programów w języku C, tymbardziej
pierwsze przy wykorzystaniu kompilatora avr-gcc. Czy jest konieczne
przekopiowanie plików z katalogu lib do katalogu przykąłdu? jeśli tak to
których? wydaje mi się, że w plikach makefile czy innych *.h niby są
ścieżki do ../../lib ale mimo to kompilator wyrzuca błędy.


W pliku testlcd.c na początku:

Kod:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd.h"



ale lcd.h jest w katalogu ../../lib - czy należy ten wpis zmienić lub
lcd.h przekopiować do katalogu przykłądu?

przy próbie kompilacji avr-gcc -mmcu=atmega16 testlcd.c dostaję:


Cytat:
testlcd.c:7:17: error: lcd.h: No such file or directory
testlcd.c: In function progressbar:
testlcd.c:15: error: u08 undeclared (first use in this function)
testlcd.c:15: error: (Each undeclared identifier is reported only once
testlcd.c:15: error: for each function it appears in.)
testlcd.c:15: error: expected ; before i
testlcd.c:17: error: i undeclared (first use in this function)
testlcd.c: In function chartable:
testlcd.c:29: error: u08 undeclared (first use in this function)
testlcd.c:29: error: expected ; before x
testlcd.c:30: error: expected ; before ch
testlcd.c:32: error: z undeclared (first use in this function)
testlcd.c:32: error: LCD_X undeclared (first use in this function)
testlcd.c:32: error: LCD_Y undeclared (first use in this function)
testlcd.c:34: error: y undeclared (first use in this function)
testlcd.c:37: error: x undeclared (first use in this function)
testlcd.c:38: error: ch undeclared (first use in this function)
testlcd.c: In function main:
testlcd.c:82: error: expected ) before _z


Jak wpiszę make to dostaję:
-
Cytat:

------- begin --------
.../../lib/counter.sh: 9: Syntax error: end of file unexpected (expecting
"then")
make: *** [counter] Błąd 2


Jak skopiuję wszysttkie potrzebne pliki *.h do katalogu projektu to dostaję:

Cytat:
/tmp/cc4sEFwG.o: In function `progressbar':
testlcd.cSad.text+0x14): undefined reference to `LCD_progressbar_init'
testlcd.cSad.text+0x20): undefined reference to `LCD_progressbar'
testlcd.cSad.text+0x28): undefined reference to `LCD_xy'
testlcd.cSad.text+0x32): undefined reference to `LCD_putint'
testlcd.cSad.text+0x38): undefined reference to `LCD_putchar'
testlcd.cSad.text+0x44): undefined reference to `delayloop32'
/tmp/cc4sEFwG.o: In function `chartable':
testlcd.cSad.text+0x7c): undefined reference to `LCD_PL_chars_init'
testlcd.cSad.text+0x8c): undefined reference to `LCD_xy'
testlcd.cSad.text+0x9e): undefined reference to `LCD_putchar
itd...



Ogólnie nie mam pojęcia jak skompilować te przykładowe programy i
prosiłbym o napisanie jakiegoś krótkiego przewodnika. Podejrzewam, że
mój problem to jakiś banał... z góry dziękuję za podpowiedzi - od czego
zacząć.

Tomasz Pyra
Guest

Fri Aug 24, 2007 11:33 am   



__rafal__ pisze:
Quote:
Witam!

Czy istnieje gdzieś w sieci jakaś strona gdzie opisane byłoby jak
skompilować przykłady z biblioteki rklibavr?
Ściągnąłem sobie paczkę z
http://avr.elektroda.eu/?q=system/files/rklibavr_20060316.tgz
Znajdują się w niej dwa katalogi: lib oraz przykład. W przykład jest
kilkanaście innych katalogów z programami demonstrującymi działanie. Są
to moje pierwsze kroki z kompilacją programów w języku C, tymbardziej
pierwsze przy wykorzystaniu kompilatora avr-gcc. Czy jest konieczne
przekopiowanie plików z katalogu lib do katalogu przykąłdu? jeśli tak to
których? wydaje mi się, że w plikach makefile czy innych *.h niby są
ścieżki do ../../lib ale mimo to kompilator wyrzuca błędy.


W pliku testlcd.c na początku:

Kod:
#include <avr/io.h
#include <avr/pgmspace.h
#include "lcd.h"



ale lcd.h jest w katalogu ../../lib - czy należy ten wpis zmienić lub
lcd.h przekopiować do katalogu przykłądu?

przy próbie kompilacji avr-gcc -mmcu=atmega16 testlcd.c dostaję:


Cytat:
testlcd.c:7:17: error: lcd.h: No such file or directory
testlcd.c: In function progressbar:
testlcd.c:15: error: u08 undeclared (first use in this function)
testlcd.c:15: error: (Each undeclared identifier is reported only once
testlcd.c:15: error: for each function it appears in.)
testlcd.c:15: error: expected ; before i
testlcd.c:17: error: i undeclared (first use in this function)
testlcd.c: In function chartable:
testlcd.c:29: error: u08 undeclared (first use in this function)
testlcd.c:29: error: expected ; before x
testlcd.c:30: error: expected ; before ch
testlcd.c:32: error: z undeclared (first use in this function)
testlcd.c:32: error: LCD_X undeclared (first use in this function)
testlcd.c:32: error: LCD_Y undeclared (first use in this function)
testlcd.c:34: error: y undeclared (first use in this function)
testlcd.c:37: error: x undeclared (first use in this function)
testlcd.c:38: error: ch undeclared (first use in this function)
testlcd.c: In function main:
testlcd.c:82: error: expected ) before _z


Jak wpiszę make to dostaję:
-
Cytat:

------- begin --------
../../lib/counter.sh: 9: Syntax error: end of file unexpected (expecting
"then")
make: *** [counter] Błąd 2


Jak skopiuję wszysttkie potrzebne pliki *.h do katalogu projektu to
dostaję:

Cytat:
/tmp/cc4sEFwG.o: In function `progressbar':
testlcd.cSad.text+0x14): undefined reference to `LCD_progressbar_init'
testlcd.cSad.text+0x20): undefined reference to `LCD_progressbar'
testlcd.cSad.text+0x28): undefined reference to `LCD_xy'
testlcd.cSad.text+0x32): undefined reference to `LCD_putint'
testlcd.cSad.text+0x38): undefined reference to `LCD_putchar'
testlcd.cSad.text+0x44): undefined reference to `delayloop32'
/tmp/cc4sEFwG.o: In function `chartable':
testlcd.cSad.text+0x7c): undefined reference to `LCD_PL_chars_init'
testlcd.cSad.text+0x8c): undefined reference to `LCD_xy'
testlcd.cSad.text+0x9e): undefined reference to `LCD_putchar
itd...



Ogólnie nie mam pojęcia jak skompilować te przykładowe programy i
prosiłbym o napisanie jakiegoś krótkiego przewodnika. Podejrzewam, że
mój problem to jakiś banał... z góry dziękuję za podpowiedzi - od czego
zacząć.

Powinny tam być pliki "Makefile" zawierające reguły kompilacji -
kompilujesz poleceniem "make".

Jeżeli chcesz kompilować ręcznie za pomocą gcc to powyższe błędy oznaczają:
testlcd.c:7:17: error: lcd.h: No such file or directory

Nie może znaleźć pliku lcd.h - powinieneś podczas kompilacji podać gcc
do niego ścieżkę za parametrem -I (np. -I/jakis/katalog/)
Ewentualnie inną metodą, ale mniej elegancką jest skopiowanie plików .h
do bieżącego katalogu (co zrobiłeś).

Dostajesz teraz:
testlcd.cSad.text+0x14): undefined reference to `LCD_progressbar_init'

Czyli linker nie może znaleźć deklaracji funkcji której definicję
znalazł w tym pliku .h który skopiowałeś.
Musisz wcześniej skompilować plik z tą funkcją (pewnie lcd.c albo
podobnie) i dołączyć wynikowe binaria do swojego programu podczas
procesu linkowania.
Jednak "Makefile" (który pewnie tam jest) powinien robić to wszystko sam.

Jeżeli lubisz się uczyć na przykładach poszukaj w internecie artykułów o
pierwszych krokach w c/c++ które pokazują w jaki sposób tworzyć pliki
"Makefile" (na początek takie nieskomplikowane), oraz kompilować za
pomocą narzędzi GNU (gcc, make itd...).

MoonWolf
Guest

Fri Aug 24, 2007 11:38 am   



Tomasz Pyra denied rebel lies:

Quote:
Jeżeli lubisz się uczyć na przykładach poszukaj w internecie
artykułów o pierwszych krokach w c/c++ które pokazują w jaki sposób
tworzyć pliki "Makefile" (na początek takie nieskomplikowane), oraz
kompilować za pomocą narzędzi GNU (gcc, make itd...).

E - to mordęga IMO. Generowanie plików Makefile lepiej powierzyć
autotoolsom (w przypadku Linuksa) ewentualnie (lepiej) jakiemuś IDE
(zarówno Win* jak i Linuks - w tym przypadku pewnie jako 'nakładka' na
autotools). Tworzenie tego z palca ograniczyłbym do jakichś naprawdę
banalnych przypadków...

--
<:> Roger, MoonWolf Out <:>|Chained and shadowed to be left behind
(:Smile (:Smile|
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

__rafal__
Guest

Fri Aug 24, 2007 12:06 pm   



Quote:
Powinny tam być pliki "Makefile" zawierające reguły kompilacji -
kompilujesz poleceniem "make".

Tak, każdy przykład ma w swoim katalogu plik makefile który zawiera
także taką linijkę:

include $(USRLIB)/avr_make

i w tym pliku są dalsze jak się domyślam reguły kompilacji.

Ogólnie nie zmieniając nic - po rozpakowaniu archiwum i wejściu do
jakiegokolwiek projektu wpisując make otrzymuję zawsze ten sam błąd:

-------- begin --------
.../../lib/counter.sh: 9: Syntax error: end of file unexpected (expecting
"then")
make: *** [counter] Błąd 2



plik counter.sh ma treść:

if [ -f counter.txt ] ;
then
echo $((`cat counter.txt`+1)) > counter.txt ;
else
echo "1" > counter.txt ;
fi
echo "unsigned int version PROGMEM = `cat counter.txt`;" > version.h ;

MoonWolf
Guest

Fri Aug 24, 2007 12:37 pm   



__rafal__ denied rebel lies:


Quote:
-------- begin --------
../../lib/counter.sh: 9: Syntax error: end of file unexpected
(expecting "then")
make: *** [counter] Błąd 2
plik counter.sh ma treść:
if [ -f counter.txt ] ;
then
echo $((`cat counter.txt`+1)) > counter.txt ;
else
echo "1" > counter.txt ;
fi
echo "unsigned int version PROGMEM = `cat counter.txt`;" > version.h
;

To na pewno cały plik? Bo ja tu błędu nie widzę (u mnie ten skrypt
działa).

--
<:> Roger, MoonWolf Out <:>|Shouting gun, on they run
(:Smile (:Smile|through the endless grey
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

__rafal__
Guest

Fri Aug 24, 2007 12:44 pm   



MoonWolf napisał(a):

Quote:
To na pewno cały plik? Bo ja tu błędu nie widzę (u mnie ten skrypt
działa).


tak, jest to pełna treść pliku i pełna treść komunikatu błędu.

--
Pozdrawiam!
Rafał

MoonWolf
Guest

Fri Aug 24, 2007 12:50 pm   



__rafal__ denied rebel lies:

Quote:
To na pewno cały plik? Bo ja tu błędu nie widzę (u mnie ten skrypt
działa).
tak, jest to pełna treść pliku i pełna treść komunikatu błędu.

Przyczyna znaleziona. Zapuść dos2unix na tym pliku, albo ręcznie usuń
windowsowskie znaki końca linii.

--
<:> Roger, MoonWolf Out <:>|What do you mean `energy
(:Smile (:Smile|weapons are illegal' ?
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

__rafal__
Guest

Fri Aug 24, 2007 1:21 pm   



MoonWolf napisał(a):

Quote:
Przyczyna znaleziona. Zapuść dos2unix na tym pliku, albo ręcznie usuń
windowsowskie znaki końca linii.


super, ruszyło...

co prawda w konsoli pod sam koniec wywala chyba jakiś błąd:

make: *** [testlcd.cof] Błąd 1

ale tworzy się plik hex :)

Mam się czym przejmować?

MoonWolf
Guest

Fri Aug 24, 2007 1:39 pm   



__rafal__ denied rebel lies:

Quote:
co prawda w konsoli pod sam koniec wywala chyba jakiś błąd:
make: *** [testlcd.cof] Błąd 1

U mnie pojawia się make: *** [testlcd.eep] Błąd 1 bo nie ma zmiennych w
eepromie - tym się nie ma co przejmować. Natomiast ten błąd co u
Ciebie nie wyskakuje. To jest chyba plik do emulacji w AVR Studio -
jeśli tak to ja by się nie przejmował. Tworzy się w ogóle ten plik?

--
<:> Roger, MoonWolf Out <:>|These are the looks that
(:Smile (:Smile|chill to the bone
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

__rafal__
Guest

Fri Aug 24, 2007 2:13 pm   



Pogubiłem się. Po wydaniu polecenia make dzieją się następujące rzeczy:

http://83.15.126.146/~rafal/make.txt

MoonWolf
Guest

Fri Aug 24, 2007 2:25 pm   



__rafal__ denied rebel lies:

Quote:
Pogubiłem się. Po wydaniu polecenia make dzieją się następujące
rzeczy:

Binarka generuje się poprawnie, hex powstaje. Ten komunikat:
testlcd.cof: Invalid bfd target
oznacza, że jest problem przy generowaniu pliku. Ale - jak wyczytałem w
avr_make (w tym pakiecie):
# Konwersja ELF na COFF dla symulacji w AVR Studio
więc, jeśli nie używasz AVR studio i nie chcesz w nim symulować, to
możesz to spokojnie olać.

Swoją drogą to dziwne. Ten sam projekt u mnie generuje błąd dotyczący
eeproma (nie generuje się, ale też można olać), a plik .cof w ogóle
nie jest (nie próbuje być) generowany. No, ale to tak na marginesie.

--
<:> Roger, MoonWolf Out <:>|Who's in charge of my head today
(:Smile (:Smile|
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

__rafal__
Guest

Fri Aug 24, 2007 11:25 pm   



Bardzo Ci dziękuję za pomoc. Pliki hex są generowane i działają ;)

Jeszcze raz dzięki,

--
Pozdrawiam
Rafał

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skompilować przykłady z rklibavr z użyciem avr-gcc instrukcje krok po kroku?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map