PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR-Studio-Problem mit NiboBee



Rabenauge
26.03.2010, 23:38
Szenario:
ich bin gerade am Display basteln und habe das Testprogramm für den NiboBee von m.a.r.v.i.n etwas modifiziert.
Das klappte so lange bestens, bis ich anfing, die Liniensensoren mittels der line.h- Bibliothek einzubinden.

Dann war nichts mehr wie vorher:


avr-gcc -mmcu=atmega16 -Wl,-Map=NiboBee_Intelligence.map NiboBee_Intelligence.o -L"C:\Programme\NIBObeeLib\lib" -lnibobee_line -lnibobee_base -lnibobee_utils -lnibobee_usart -lnibobee_i2c -lnibobee_line -o NiboBee_Intelligence.elf
C:\Programme\NIBObeeLib\lib\libnibobee_line.a(line .o): In function `line_readPersistent':
line.c:(.text.line_readPersistent+0x10): undefined reference to `__eerd_block'
C:\Programme\NIBObeeLib\lib\libnibobee_line.a(line .o): In function `line_writePersistent':
line.c:(.text.line_writePersistent+0x10): undefined reference to `__eewr_block'
make: *** [NiboBee_Intelligence.elf] Error 1
Build failed with 2 errors and 0 warnings...


Irgendetwas klappt mit den Bibliotheken nicht.
Ich probiere da nun schon einige Stunden herum, erfolglos.
Erkenntnis: das Problem tritt genauso auf, wenn ich das Liniensensor-Programm aus dem Tutorial benutze- und _das_ funktioniert eigentlich problemlos.
Es muss also in den Einstellungen des AVR-Studios irgendwo ein Fehler sein. Leider ist _dort_ das Tutorial überhaupt keine Hilfe, da mit keinem Wort erklärt wird, wozu die ganzen Projekteinstellungen überhaupt gut sind, sondern nur, welche zu tätigen sind.
Kurz gesagt: Hilfe. [-(

Hubert.G
27.03.2010, 09:55
Nach der Fehlermeldung sieht es so aus, als würden da Libs fehlen.
Alles mit #include eingebunden? Alle *.h und *.c Dateien eingebunden?
Hilfreich wäre das ganze Programm, damit ich es selbst im AVR-Studio testen kann.

Rabenauge
27.03.2010, 10:15
Wie gesagt: selbst das lausige Liniensensor-Programm aus dem Tutorial wird- mit den selben Fehlermeldungen- _nicht_ compiliert.
Falls du das nicht hast:


#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/line.h>
int main() {
led_init();
line_init();
while(1==1) {
enable_interrupts();
led_set(LED_L_YE, line_get(LINE_L)>160);
led_set(LED_L_RD, line_get(LINE_L)>240);
led_set(LED_R_YE, line_get(LINE_R)>160);
led_set(LED_R_RD, line_get(LINE_R)>240);
}
return 0;
}


Ich vermute ebenfalls, dass da irgendeine Bibliothek fehlt, aber inzwischen habe ich die im Tut genannten (erklärt wirds ja nicht) Projekteinstellungen mehrmals überprüft, finde aber nichts dran auszusetzen.

Das Problem tritt _immer_ auf, wenn ich, wie hier, die line.h benutzen will- Programme, die die nicht brauchen laufen bestens.

Hubert.G
27.03.2010, 13:27
Ich habe mal alle Dateien in mein Standard Verzeichnis kopiert.
Und es lässt sich einwandfrei kompilieren.
Also muss es ein Fehler im Dateiverzeichnis sein, Bibliothek fehlt keine.

Rabenauge
27.03.2010, 13:36
Ich vermute irgendeine fehlerhafte Projekteinstellung, denn auch neu installieren (ich benutze sowieso die Standardpfade) der Bibliothek hat nicht geholfen. :(
Wie gesagt, andere Programme, die nicht line.h benötigen, laufen problemlos durch den Compiler.

Nur leider erklärt weder das NiboBee-Tut noch die Hilfe vom AVR-Studio, _was_ man da eigentlich tut.

sternst
27.03.2010, 14:11
Deine AVR-Libc Version ist sehr wahrscheinlich neuer als die, mit der die NiboBee-Libs erstellt wurden. Das AVR-Libc interne EEPROM-Interface hat sich kürzlich etwas verändert.
Versuche folgendes:

#include <avr/eeprom.h>


void __eewr_block (const void *src, void *dst, size_t n) {

eeprom_write_block(src,dst,n);
}


void __eerd_block (void *dst, const void *src, size_t n) {

eeprom_read_block(dst,src,n);
}

Rabenauge
28.03.2010, 14:03
Danke, Stefan: it works!!

Und das mit dem neu ist sehr wohl möglich: ich hab diesen Rechner erst am Dienstag eingerichtet und nun natürlich von allem die aktuellsten Versionen hier.
Naja, in zwei, drei Tagen hab ich meinen wieder. ;)