__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
(:

(:

|
(

JID:moonwolf@jabberpl.org(

|
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
(:

(:

|through the endless grey
(

JID:moonwolf@jabberpl.org(

|
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
(:

(:

|weapons are illegal' ?
(

JID:moonwolf@jabberpl.org(

|
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
(:

(:

|chill to the bone
(

JID:moonwolf@jabberpl.org(

|
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
(:

(:

|
(

JID:moonwolf@jabberpl.org(

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