PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuling benötigt Hilfe bei AVR Studio



Kucky
23.02.2010, 20:26
Hallo zusammen,
ich weis nicht warum, aber ich hatte plötzlich das Bedürfnis, mich mit kleinen Robotern zu beschäftigen. Wahrscheinlich durch den Kontakt zu einem Kollegen. Also habe ich mir einen Asuro gekauft, und zusammengebaut. Ging auch ziemlich gut, im zweiten Versuch leuchtete die Status LED endlich grün. Soweit so gut. Nun kommt die Software, und hier liegt das Problem. Ich bekomme es einfach nicht geregelt, ein kleines Programm in ein *.hex – File zu überführen. Da ich die make-Files überhaupt nicht verstehe, bin ich schließlich zu AVR-Studio gekommen. Diese werden hier automatisch erstellt. Ich vermute, dass es mit Pfaden zu *.h und include-Dateien zusammenhängt. Folgende Fehlermeldung erscheint:
G:\......\EigeneProjekte\Lernen\ZweiterVersuch\def ault/../ZweiterVersuch.c:4: undefined reference to `Init'
Oder die „asuro.h“ wird nicht gefunden.
Ich habe in verschiedenen Beiträgen Antworten gefunden, die auch mit viel Geduld formuliert wurden. Ich bin aber nicht weiter gekommen.
Könnte mir bitte jemand der Einstein´s, Genie´s , Experten etc. weiterhelfen?
Wo kommen welche Dateien hin, und was muss ich mit denen machen, bevor sie das tuen, was sie tuen sollen?
Ich habe im Anhang einige Screenshots angehängt. Vielleicht hätte ich noch erwähnen sollen, dass ich mit 54 mit diesem Blödsinnhttps://www.roboternetz.de/phpBB2/images/smiles/eusa_angel.gif angefangen habe.
Dank im Voraus Kucky

uwegw
23.02.2010, 21:13
Mit #include "asuro.h" wird die Datei im aktuellen Projektverzeichnis gesucht, mit #include <asuro.h> im Pfad, den du in den Optionen eingestellt hast. Versuch das mal.

Ansonsten häng mal das komplette Projekt als zip an.

Kucky
23.02.2010, 21:23
Vielen Dank,
das hatte ich bereits in einem Beitrag gelesen, und auch versucht. Leider keinen Erfolg. Ich hatte auchmal versucht. Habe mir gerade auch die Anleitung von Sterntaler angesehen.
Hier mein Projekt.
VG Kucky

uwegw
23.02.2010, 21:41
Am einfachsten ist es, die asuro.c und asuro.h direkt ins Projektverzeichnis zu kopieren, und zum Projekt hinzuzufügen. Die Include-Pfade in den Einstellungen können dann weg.

Außerdem hast du als µC den Mega168 und nicht den Mega8 eingestellt.

Kucky
23.02.2010, 22:09
Habe ich direkt versucht, und auch die "" gesetzt.

#include "asuro.h"
int main () {
do {
Init ();
MotorDir (FWD,FWD);
MotorSpeed (255, 255);
} while (1);
return 0;
}

Dann kam die Fehlermeldung:
c:/program files/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: cannot find -lasuro

VGK

Kucky
23.02.2010, 22:15
Habe gerade die "ld.exe" gesucht aber nicht gefunden. Kann es daran liegen? Und wenn ja, wo ist die geblieben? :-$

uwegw
23.02.2010, 22:45
ld.exe ist der linker. Der müsste aber irgendwo sein.

Hast du in den Project Options auch unter Libraries -> Link with these objects alle Einträge entfernt?

Kucky
23.02.2010, 22:57
Habe ich sofort gemacht. Ergebnis hier:
G:\...\default/../ZweiterVersuch.c:4: undefined reference to `Init'
G:\...\default/../ZweiterVersuch.c:5: undefined reference to `MotorDir'
G:\...\default/../ZweiterVersuch.c:6: undefined reference to `MotorSpeed'

Die ld.exe muss ich nochmal suchen. Ich installiere WinAVR einfach nochmal. Würde mich aber wundern.
VGK

Kucky
23.02.2010, 23:13
auch nach erneuter Installation habe ich die ld.exe nicht gefunden. Oder heißt die Linker anders?

michl78
24.02.2010, 06:59
Dann kam die Fehlermeldung:
c:/program files/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: cannot find -lasuro

Also die ld.exe gibt es definitiv, schliesslich ist es ja sie, die sich über eine nicht gefundene asuro-lib beschwert.

Kucky
24.02.2010, 10:48
Hallo michl78,
hast ja Recht, wer suchen kann ich echt im Vorteil. Aber mein Problem besteht weiterhin.

Kucky
24.02.2010, 19:09
Was mir noch aufgefallen ist folgendes:
Das Verzeichnis, so wie es die setup vorgesehen hat;
G:\...\Asuro\ASURO_src\lib\ enthält Dateien wie *.c, *.a etc

Das Verzeichnis
G:\...\Asuro\ASURO_src\lib\inc\ enthält *.h Dateien, also Header bzw. Libraries

Ist das so richtig? Oder verdrehe ich etwas?

Asuro.c und asuro.h habe ich „vorsichtshalber“ im asuro-Verzeichnis als auch im Projektverzeichnis.

Im Anhang noch 2 verschiedene Optionseinstellungen

VG Willi

uwegw
24.02.2010, 19:22
Mach mal nen neues Projekt auf, und kopiere asuro.h und asuro.c ins Projektverzeichnis (wo auch die Haupt-C-Datei liegt. Die Project Settings erst mal nicht verändern.

Kucky
24.02.2010, 19:31
Guten Abend uwege.
hab ich, welchen Quellcode soll ich eingeben?

Kucky
24.02.2010, 20:52
Blöde Frage, warum kann ich plötzlich eure Antworten im Forum nicht mehr sehen?

uwegw
24.02.2010, 21:03
Hast du aus Versehen auf ignorieren geklickt? (Ups... wenn, dann kannst du das hier auch nicht sehen...)

Als Quellcode in die erzeugte C-Datei kommt dein kleines Testprogramm.

Kucky
24.02.2010, 21:22
Hallo uwege,
keine Ahnung wieso ich das gemacht habe. Son Blödsinn, einfach Leute zu ignorieren [-X
Ich habe Deinen Vorschlag aber schon geahnt. Gleiche Fehlermeldung.
Willi

uwegw
24.02.2010, 21:32
So, ich hab mal selbst nen neues Projekt angelegt. Probier das mal aus....

Kucky
24.02.2010, 21:45
Schade, aber ich hoffe Du bleibst dran
G:\...\AsuroTest\default/../main.c:8: undefined reference to `MotorDir'
G:\...\AsuroTest\default/../main.c:9: undefined reference to `MotorSpeed'

Das hatte ich auch schon mal ausprobiert.
#include <avr/io.h>

uwegw
24.02.2010, 22:23
So langsam habe ich den Verdacht, dass mit deine WinAVR-Installation was nicht stimmt. Installier mal neu.

Kucky
24.02.2010, 22:29
Das versuche ich sofort. Ich hatte beim installieren den Ordner "WinAVR" genannt, ohne die Versionsnummer, die vorgeschalgen wurde. War das falsch? Doch wohl eher nicht. AVR Studio auch neu installieren?

Kucky
24.02.2010, 22:50
Habe alles neu installiert und neu gebootet. Leider die gleichen Fehlermeldungen.

XBert
24.02.2010, 23:06
hi,
könntest du vielleicht mal das makefile posten, denn in deiner .zip-Datei von oben ist keines drinnen (außer dem Standardmäßigen)

LG

Kucky
24.02.2010, 23:15
Hier das Make-File
################################################## #############################
# Makefile for the project AsuroTest
################################################## #############################

## General Flags
PROJECT = AsuroTest
MCU = atmega8
TARGET = AsuroTest.elf
CC = avr-gcc

CPP = avr-g++

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=AsuroTest.map


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings

XBert
24.02.2010, 23:22
Ich denke nicht dass das alles ist... ;)
PS: falls du sie noch nicht kennst gibt es code-Tags ([ code] und [/code])

LG

Kucky
24.02.2010, 23:34
sorry, hast ja recht.
################################################## #############################
# Makefile for the project AsuroTest
################################################## #############################

## General Flags
PROJECT = AsuroTest
MCU = atmega8
TARGET = AsuroTest.elf
CC = avr-gcc

CPP = avr-g++

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=AsuroTest.map


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings


## Objects that must be built in order to link
OBJECTS = main.o asuro.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) AsuroTest.hex AsuroTest.eep AsuroTest.lss size

## Compile
main.o: ../main.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

asuro.o: ../asuro.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<

##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@

%.eep: $(TARGET)
-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

%.lss: $(TARGET)
avr-objdump -h -S $< > $@

size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}

## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) AsuroTest.elf dep/* AsuroTest.hex AsuroTest.eep AsuroTest.lss AsuroTest.map


## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)

Das mit den code-Tags habe ich nicht verstanden.
VGW

XBert
25.02.2010, 00:16
So, ich hab das ganze jetzt mal probiert.
Im Anhang ist mein Test, probier das mal.
Mit deiner WinAVR-Installation sollte ein Programm namens Programmers-Notepad mitgekommen sein.
Öffne in diesem mal nach dem entpacken der zip-Datei die test.c im Ordner testprog.
Dann klick oben in der Leiste auf "Tools->make" (so heißt es glaube ich). So müsste es funktionieren.
Wenn nicht, dann bin ich mit meinem Latein leider auch am Ende

LG

Kucky
25.02.2010, 08:27
Hallo Nachtschwärmer :D
bin gerade im Büro. Werde es heute abend ausprobieren. Vorerst vielen Dank und einen schönen Tag.
Willi

Kucky
25.02.2010, 12:57
Hatte keine Geduld bis heute Abend zu warten,
Dein Orginal, ohne asuro.h, ergab den Fehler "asuro.h nicht gefunden."
Asuro.h ins Projekt kopiert, alles roger.
Es wurde in beiden Fällen kein test.hex erstellt.
Bringt Dich das weiter?
VG Willi

XBert
25.02.2010, 16:54
Oh, tut mir leid das war mein Fehler (war vielleicht gestern doch schon zu spät O:))

Du musst im makefile "LIBPATH = ../../lib" durch "LIBPATH = ../lib" ersetzen. Dann sollte es ohne hinzufügen von irgendwas funktionieren.

LG

Kucky
25.02.2010, 17:59
Sorry ist nicht nötig, bin froh über Deine Hilfe. Dies ist alles sehr lehrreich und spannend. Ich gehe davon aus, das "../lib" bedeutet, die lib wird irgendwo, außerhalb des Projektverzeichnises gesucht. Aber muß dann nicht so <asuro.h> inkludet werden? Das mach doch auch Sinn, dass diese lib nur an einer Stelle zu finden ist.
Nun hat es auch gefunzt. Alles da, inkl. test.hex.

Warum klappt das denn mit AVR-Studio nicht? Wie gesagt, das MakeFile ist für mich ein Buch mit 7 Siegeln. Soll ich alles nochmal installieren? WinAvr, AvrStudio, Asuro.lib mit Examples. Irgendwo hab ich was gelesen, ich glaub das war osser, da ging ein um ein Plugin. Der Thread was aber aus 2006.
VG Willi

XBert
25.02.2010, 18:33
Das mit den Anführungszeichen ist so ne Sache. Normalerweise verwendet man < und > wenn es sich in der Header in den Standardbibliotheken befindet.
Bei asuro.h ist es Ansichtssache ob man es als Standard-Header sieht oder nicht.

Mit Avr-Studio hab ich fast keine Erfahrung, da ich Linux benutze, aber ich kann mir vorstellen, dass die header-Datei sich nicht im include-pfad befindet.
Auf deinen Screenshots sehe ich das die richtige datei gelinkt wird, allerdings finde ich in deinem Makefile nicht wo "$(INCLUDES) " definiert wird, was darauf hindeutet das eben die asuro.h nicht eingebunden wird.

EDIT: Ich vermute, dass das AVR-studio die direkt über die kommandozeile hinzufügt.
hast du schon mal versucht die Asuro-Bibliotheken auf die gleiche Partition zu kopieren wie die WinAvr Installation?

LG

Kucky
25.02.2010, 18:54
Nö, hab´ ich nicht. Aber Versuch macht klug. Ich verschiebe. Bis gleich.

Kucky
25.02.2010, 19:12
Fehler:.c:5: undefined reference to `Init'

Auszug aus MakeFile:
## Library Directories
LIBDIRS = -L"C:\ASURO_src\lib"

## Libraries
LIBS = -lasuro

VGW

XBert
25.02.2010, 20:04
Ich hab das ganze jetzt auch mit Avr-studio probiert und es auf die schnelle mit dem Standard-Makefile nicht geschafft...

Wenn du aber bei den Projektoptionen das makefile das ich dir gegeben habe verwendest dann funktionierts ohne Probleme. du musst halt mit dem makefile entweder den lib ordner in jedes Asuro-Projekt kopieren oder im makefile das Verzeichnis anpassen.

LG

Kucky
25.02.2010, 21:13
jetzt funktioniert es tatsächlich :D Vielen vielen Dank.
Heißt das aber im Klartext, dass ich jedes Projekt "test" nennen muß? Ich habe versucht das Projekt (Versuchx) anders zu benennen, im MakeFile das Target Versuchx eingetragen. Da wurde dann "not rule Target Versuchx" angemeckert.

XBert
25.02.2010, 21:40
Es ist egal wie du das Projekt nennst.
Es muss nur die Hauptdatei (das ist die wo "main()" drinnensteht ) gleich heißen wie TARGET im makefile.
Falls du bei größeren Projekten mehrere Dateien hast die benötigt werden dann mußt du das mit "SRC +=dateiname.c" im makefile tun (#include "dateiname.h" natürlich nicht vergessen ;)).

LG

Kucky
25.02.2010, 23:12
das hat mir jetzt aber keine Ruhe gelassen. Nach allen was Du mir gepostet hast, habe ich mich gefragt, wieso gibt jemand eine Software heraus, die nur mit etlichen Tricks zu nutzen ist. Aber das ist wohl so. Nun habe ich mir mal die Makefiles angeschaut die von AVRStudio erstellt werden. Diese habe ich mit anderen verglichen. Dabei fiel mir plötzlich auf, dass in den Makefiles von AVRStudio der LIBPATH fehlt(oder ich erkenn ihn nicht) . Also habe ich Deinen Vorschlag:
## Library Directories
LIBDIRS = -L"C:\ASURO_src\lib"
## Libraries
LIBS = -lasuro
genommen, meinen Pfad eingetragen, das Makefile gesichert, bei Configurations Options eingesetzt, und es gab keine Fehler. Klingt wie von hinten durch die Brust ins Auge. Werde ich morgen mal genauer unter die Lupe nehmen.
VGW

Hubert.G
26.02.2010, 12:27
Kann ich mir nicht ganz vorstellen.
Die Datei von uwegw entpacken, dann auf AsuroTest.aps ein Doppelklick.
Das AVR-Studio geht auf mit allen Dateien.
Dann F7 oder das Icon Build Active Configuration und es müsst sich fehlerfrei kompilieren lassen.

Ceos
26.02.2010, 13:31
Nach allen was Du mir gepostet hast, habe ich mich gefragt, wieso gibt jemand eine Software heraus, die nur mit etlichen Tricks zu nutzen ist. Aber das ist wohl so nööö ... es ist nur fakt dass AVRStudio für AVRs gemacht wurde und nicht für den Asuro!

die Asurolib einzupflegen ist im AVRStudio nicht schwerer als in JEDER anderen C Entwicklungsumgebung .. zumal du das mitgelieferte makefile von der CD ja ins AVRStudio reinladen kannst.

oberallgeier
26.02.2010, 13:59
... wieso gibt jemand eine Software heraus, die nur mit etlichen Tricks zu nutzen ist. Aber das ist wohl so ...Wolln mal so sagen: Software läuft mit know how und know where - sonst läufts nowhere.

Kucky
26.02.2010, 19:54
Hallo zusammen,
jetzt habe ich einiges verstanden. Mir war nicht klar, dass AVRs und Asruo hier den Unterschied machen. Hab´ halt noch kein know how :wink: . Danke an Ceos für den Hinweis. Mir wird hier nun einiges klar. Bin eben ein Anfänger. Werde mich nun beschämt :D zurück ziehen, und meinen Asuro testen.
Vielen Dank an alle für eure Geduld
Grüße aus Leverkusen
Willi