PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler beim kompilieren des Beispielprogramms



Cookie90
16.03.2016, 11:40
Servus miteinander,

ich habe vor ein paar Tagen meinen Asuro zusammengebaut und wollte ihn nun mit Hilfe der mitgelieferten Software kompilieren.

Das Programm lautet:

#include "asuro.h"

int main(void)
{
Init();
StatusLED(RED);

while(1);
return 0;
}


Nun bekam ich bei Programmers Notepad die Fehlermeldung:



> "make.exe" all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
0 [main] sh 8176 sync_with_child: child 4508(0x16C) died before initialization with status code 0xC0000142
47426 [main] sh 8176 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
0 [main] sh 3616 sync_with_child: child 8012(0x178) died before initialization with status code 0xC0000142
10780 [main] sh 3616 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable
-------- begin --------
avr-gcc --version
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.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
In file included from asuro.h:34,
from test.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test.c: In function 'main':
test.c:8: error: too few arguments to function 'BackLED'
make.exe: *** [test.o] Error 1

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




Im Internet habe ich gelesen, dass diese Version bei Windows 10 Probleme macht. Deswegen habe ich mir AVR Studio5.1 herunter geladen.
Dort wähle ich als neues Projekt AVRGCC Executable Projekt aus und Wähle den ATmega8. Hier erhalte ich bei dem oben genannten Programm folgende Fehlermeldung:

Error 1 asuro.h: No such file or Directory


Ich denke, ich muss die asuro.h bib irgendwie einbinden??? Allerding konnte ich nicht heraus finden wie.

ich hoffe ihr könnt mir Helfen.

Gruß

markusj
16.03.2016, 22:22
Hallo,

die WinAVR-Toolchain die mit dem ASURO kommt ist ein Fall fürs Museum. Mit dem neuen AVR Studio (oder der von Atmel auch separat erhältlichen AVR Toolchain) bist du schon Mal auf dem richtigen weg. Aber auch die ASURO-Bibliothek ist in die Jahre gekommen. Es gibt modernere Alternativen (https://www.roboternetz.de/community/threads/26974-Die-wichtigsten-Dateien-Quellcodes-Downloads?p=252982&viewfull=1#post252982) die auch zusätzliche Funktionalität bieten.

mfG,
Markus

Cookie90
19.03.2016, 20:43
Hi,

ich komme irgendwie nicht so ganz klar.
Ist das AVR Studio 5.1 das richtige Programm? ich verstehe nicht, wie und ob ich die ASURO-BIBs einfügen muss.

Nun habe ich mir noch das Asuro Flash runtergeladen. Leider funktioniert es damit auch nicht.

was muss ich nur tun?

markusj
23.03.2016, 23:01
Mit AVR Studio kannst du arbeiten. Du kannst aber auch die AVR Toolchain alleine herunterladen (als Ersatz für das steinalte WinAVR) und weiter Programmers Notepad (oder was auch immer du sonst bevorzugst) nutzen.

Wie du die ASURO-Bibliotheken verwendest, steht in deren Dokumentation. Nimm dir die Zeit diese durchzulesen und dann Fragen zu stellen wenn etwas unklar ist. Es läuft in jedem Fall darauf hinaus, dass du mit Makefiles arbeitest, auch deren Verwendung wird erklärt. Das AVR Studio mit seinen Automatismen wird dir nicht viel weiterhelfen können. (Das ist streng genommen nicht ganz war, du kannst eine, wenn nicht sogar beide der verlinkten Bibliotheken auch als Quelltext direkt in dein Projekt einbinden, dann kümmert sich AVR Studio um das compilieren). Von der Auto-Vervollständigung und ähnlichen Hilfsmitteln kannst du aber trotzdem profitieren

ASURO Flash hat damit erst einmal nichts zu tun. Das benötigst du um das fertige Programm auf den ASURO hochzuladen.

Eine sehr wichtige Lektion ist übrigens auch zu lernen, Fehler und Probleme richtig zu beschreiben. "Leider funktioniert es damit auch nicht" ist keine Fehlerbeschreibung ;)

mfG
Markus

Cookie90
25.03.2016, 22:21
Servus,

nun habe ich mit dem AVR Studio 5.1 die asuro.h und die asuro.c bib eingefügt.

Allerdings erscheint nun bei folgendem Programm:

#include "asuro.h"

int main(void)
{
Init();

StatusLED(GREEN);

while(1);
return 0;
}

folgender Fehlertext:

Error 1 undefined reference to `StatusLED'

Könnt ihr mir hier weiterhelfen?
Die StatusLED wird doch in den zwei bibs definiert?

Gruß

- - - Aktualisiert - - -

...nun habe ich den benötigten Teil aus der ausro.c bib herausgezogen und direkt in asuro.c eingefügt:

#include "asuro.h"

int main(void)
{

StatusLED(RED);

while(1)
{
//TODO:: Please write your application code
}



}

inline void StatusLED(unsigned char color)
{
if (color == OFF) {GREEN_LED_OFF; RED_LED_OFF;}
if (color == GREEN) {GREEN_LED_ON; RED_LED_OFF;}
if (color == YELLOW) {GREEN_LED_ON; RED_LED_ON;}
if (color == RED) {GREEN_LED_OFF; RED_LED_ON;}
}

nun konnte ich es kompilieren. Ich verstehe nur nicht, wieso es nun funktioniert? Die asuro.h wird doch aufgerufen??

Gruß

markusj
26.03.2016, 15:13
nun habe ich mit dem AVR Studio 5.1 die asuro.h und die asuro.c bib eingefügt.
Zuerst zur Bezeichnung: asuro.h und asuro.c sind keine Bibliotheken, das Gesamtsystem bildet eine Bibliothek.
Dann: Welche asuro.h, welche asuro.c verwendest du? Du musst uns mehr Informationen geben wenn du Hilfe möchtest.


Allerdings erscheint nun bei folgendem Programm:

[..]

folgender Fehlertext:

Error 1 undefined reference to `StatusLED'

Könnt ihr mir hier weiterhelfen?

Ich weiß nicht was du genau gemacht hast, der Code selbst sieht vernünftig aus. Vermutlich liegt es an der Art und Weise, wie du die beiden Dateien "eingefügt" hast. Gab es vorher keine anderen Fehlermeldungen? Wenn in asuro.h StatusLED deklariert wird, muss vorher bereits etwas anderes (wie das include) fehlgeschlagen sein.


Ich verstehe nur nicht, wieso es nun funktioniert? Die asuro.h wird doch aufgerufen??
Nochmal Sprachregelung: asuro.h wird nicht aufgerufen sondern eingebunden.

mfG,
Markus