PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neue Asurolib 2.70



bloodyDragon
06.03.2007, 02:09
Tja trotz umfangreichen suchen werde ich einfach nicht schlauer.

Ich möchte eigentlich nur die neue Lib verwenden aber ich mache zwei dinge immernoch falsch.

1. #include <libasuro.a> <- ist das die richtige include ?

( ich habe das neue Programmers Notepad und libasuro.a sowie asuro.c in die entsprechenden ordner kopiert )
aber ich finde kein make und clean .bat

das programmers notepad hat diese zwar von anfang an aber wenn ich die entsprechenden aus firstTry in den lib ordner kopiere

( in die entpackte lib wo ich auch mein test.c speichere )

dann bekomme ich folgendes


> "H:\Dokumente und Einstellungen\Administrator\Desktop\ASURO\SRC\lib\ Test-all.bat"

H:\Dokumente und Einstellungen\Administrator\Desktop\ASURO\SRC\lib>make all
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT globals.o -MF dep/globals.o.d -c globals.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT adc.o -MF dep/adc.o.d -c adc.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT encoder.o -MF dep/encoder.o.d -c encoder.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT leds.o -MF dep/leds.o.d -c leds.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT motor.o -MF dep/motor.o.d -c motor.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT print.o -MF dep/print.o.d -c print.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT sound.o -MF dep/sound.o.d -c sound.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT switches.o -MF dep/switches.o.d -c switches.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT time.o -MF dep/time.o.d -c time.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT uart.o -MF dep/uart.o.d -c uart.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -O2 -I./inc -MD -MP -MT version.o -MF dep/version.o.d -c version.c
cc1.exe: warning: `dwarf-2': unknown or unsupported -g option
avr-ar cru libasuro.a globals.o adc.o encoder.o leds.o motor.o print.o sound.o switches.o time.o uart.o version.o
rm -rf *.o *~

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

... vermutlich einfach nur igendetwas falsch gemacht .. bitte sagt mir was =)

m.a.r.v.i.n
06.03.2007, 09:55
Hi,

Drei Dinge sind mindestens falsch.
1. die asuro.c wird nirgendwo hinkopiert.
2. In seinen eigenen Quellen wird weiterhin nur die asuro.h included.

#include "asuro.h"
Man kann auch die eckigen Klammern verwenden.

#include <asuro.h>
Dazu muß sich dann aber die asuro.h im Verzeichnis
C:\WinAVR\avr\include befinden.
3. Die test.c kopiert man nicht in den Lib Ordner


um die neue Asuro Lib verwenden zu können,geht man folgendermaßen vor:

1. man entpackt das Zip File in ein beliebiges Verzeichnis, z.B. nach

C:\ASURO
Die Verzeichnisstruktur der Asuro Lib und der Beispiele ist dann:


C:\ASURO\lib
C:\ASURO\lib\inc
C:\ASURO\examples
C:\ASURO\examples\FirstTry
C:\ASURO\examples\SelfTest
...

Wenn man diese bestehende Verzeichnisstruktur nicht ändert, braucht man an den mitgelieferten Makefiles auch nichts zu ändern.
2. Um die Lib zu installieren kopiert man das File

C:\ASURO\lib\libasuro.a
in den WinAVR Lib Ordner, das ist normalerweise:

C:\WinAVR\avr\lib\
3. Zudem empfielt es sich das File

C:\ASURO\lib\inc\asuro.h
in den WinAVR include Ordner kopieren

C:\WinAVR\avr\include
4. Als nächstes sollte man versuchen, ob sich die mitgelieferten Beispiele übersetzen lassen.
5. Um ein eigenes Projekt zu erzeugen, kopiert man am besten den kompletten Ordner

C:\ASURO\examples\FirstTry
in ein anderes Unterverzeichnis. Wichtig ist dabei die Verzeichnistiefe beizubehalten, also entweder ein neuer Ordner im examples Verzeichnes zu erstellen oder einen Ordner

C:\ASURO\projects
anlegen, und dort die Files eines Projektes jeweils in einen eigenen Unterordner zu kopieren, z.B.

C:\ASURO\projects\SecondTry
Die Makefiles sind so angelegt das Include Files und asuro.c relativ eingebunden werden, und zwar genau 2 Verzeichnisebenen nach unten zum Wurzelverzeihnis, und dann wieder hoch in das lib Verzeichnis.

VPATH=..\..\lib
-I=..\..\lib\inc

bloodyDragon
06.03.2007, 21:45
... vermutlich einfach nur igendetwas falsch gemacht .. bitte sagt mir was =)

.... vermutlich einfach alles falsch gemacht *g*


vielen dank !

jetzt hab ichs richtig hinbekommen

Bääääär
11.06.2007, 17:00
ich komme mit dieser lib auch noch nicht so richtig klar.
die libasuro.a ist bei mir jetzt in C:\Programme\WinAVR\avr\lib und die myasuro.h ist in C:\Programme\WinAVR\avr\include.

Allerdings bekomme ich beim compillieren der Beispiele diesen Fehler:


C:\Programme\Asuro>make all
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
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 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
test.c: In function `main':
test.c:30: warning: implicit declaration of function `SerPrint'
test.c:31: warning: implicit declaration of function `PrintInt'
test.c:35: warning: statement with no effect
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o asuro.o
asuro.c: In function `Init':
asuro.c:172: error: `autoencode' undeclared (first use in this function)
asuro.c:172: error: (Each undeclared identifier is reported only once
asuro.c:172: error: for each function it appears in.)
asuro.c: In function `__vector_4':
asuro.c:208: error: `count36kHz' undeclared (first use in this function)
asuro.c:210: error: `timebase' undeclared (first use in this function)
asuro.c: In function `__vector_2':
asuro.c:247: error: `switched' undeclared (first use in this function)
asuro.c: In function `__vector_14':
asuro.c:282: error: `autoencode' undeclared (first use in this function)
asuro.c:300: error: `encoder' undeclared (first use in this function)
make: *** [asuro.o] Error 1

> Process Exit Code: 2


zum proggen nehme ich Programmers Notepad und übersetzen tue ich wie in der Asuro Anleitung beschrieben. Was mache ich falsch?

ehenkes
11.06.2007, 17:19
Ich halte garnichts davon, manuell irgendwelche Dateien durch die Gegend zu kopieren, denn sobald man an einer Stelle etwas ändert, muss man dies per Kopie der Datei auch an der zweiten machen. Das ist absoluter Murks!
Bei mir kopiert sich die libasuro.a aus dem Verzeichnis C:\ASURO_SRC\AsuroLib\lib automatisch in das Verzeichnis C:\WinAVR\avr\lib
Das ist dann o.k. Die Datei asuro.h wird leider auch automatisch kopiert, aber nicht nach C:\WinAVR\avr\include, denn dort hat sie überhaupt nichts zu suchen.

Bääääär
11.06.2007, 17:38
ich weiß nicht mehr, was ich noch falsch mache. kann mir jemand genau erklären, WAS ich da jetzt machen muss (das kopieren hab ich ja schon) damit ich meine Programme aus dem Programmers Notepad übersetzen kann?

ehenkes
11.06.2007, 17:54
asuro.c:172: error: 'autoencode' undeclared
Er kennt also in asuro.c die Variable 'autoencode' nicht. Diese Variable wird in asuro.h deklariert: "extern volatile int autoencode;"
Fazit: Er findet asuro.h nicht.

asuro.c:208: error: `count36kHz' undeclared
asuro.h: "extern volatile unsigned char count36kHz;"

Also gib dem Compiler asuro.h, dann wird er den Rest für dich erledigen. ;-)

Ich würde asuro.h hier deponieren:
C:\ASURO_SRC\AsuroLib\lib\inc
und von mir aus auch noch hier (das kopiert er bei mir automatisch dahin):
C:\ASURO_SRC\AsuroLib\lib

Bääääär
11.06.2007, 18:12
mmh. ich habe sie in C:\Programme\Asuro\AsuroLib\lib und in C:\Programme\WinAVR\avr\include und in C:\Programme\WinAVR\avr\lib.

Wo ist denn festeglegt, wo welche Datei sein muss? doch in der Makefile, oder? Ich kapier das alles nicht...

ehenkes
11.06.2007, 18:26
Bei mir:
C:\ASURO_SRC\AsuroLib\lib

Bei Dir:
C:\Programme\Asuro\AsuroLib\lib\

schau mal in die make-Datei, bei mir steht da:
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib

Bei Dir müsste da C:/Programme/WinAVR stehen.
asuro.h sollte dort im Verzeichnis stehen, wo asuro.c ist., denn es heisst:
#include "asuro.h" in asuro.c

ehenkes
11.06.2007, 18:30
Kopiere asuro.h auch noch nach:
C:\Programme\Asuro\AsuroLib\lib\inc

Bei mir wird das automatisch von ...\lib\inc nach ...\lib kopiert, wenn ich die libasuro.a compiliere und linke.

Bääääär
11.06.2007, 18:38
Die WINAVR Directory habe ich im Makefile geändert (also in dem Makefile in dem Verzeichnis, das ich bei den Tools des Programmers Notepads eingegeben habe). Das gesammt Makefile sieht nun so aus:


################################################## #############################
# Makefile for the project AsuroLib
################################################## #############################

## General Flags
PROJECT = AsuroLib
MCU = atmega8
TARGET = AsuroLib.elf
CC = avr-gcc.exe
AR = avr-ar
OBJDUMP = avr-objdump

## 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 -I./inc
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

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

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=


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

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


## Objects that must be built in order to link
OBJECTS = globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o\
motor.o motor_low.o print.o rc5.o sound.o switches.o\
time.o uart.o version.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

# Define directories, if needed.
DIRAVR = C:/Programme/WinAVR
#DIRAVR = /usr/local/avr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib

LIB = asuro
LIBFILE = lib$(LIB).a
HEADER = asuro.h

## Build
all: $(LIBFILE)
rm -rf *.o *~

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

$(LIBFILE): $(OBJECTS)
$(AR) cru $(LIBFILE) $(OBJECTS)

## Clean target
clean:
rm -rf *.o *~ $(LIBFILE)
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
rm -rf dep/*.d

install:
cp $(LIBFILE) $(DIRLIB)/$(LIBFILE)
cp inc/$(HEADER) $(DIRINC)/$(HEADER)

lst: $(OBJECTS:%.o=%.lst)


%.lst: %.o
$(OBJDUMP) -h -S $< > $@

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



und die asuro.h ist auch in C:\Programme\Asuro\AsuroLib\lib\inc.

Ich blick einfach nicht durch. Also: im Makefile (bei mir in C:\Programme\Asuro) steht, wo das WinAVR-Verzeichnis ist. Darin sucht er dann nach der libasuro.a - wie es im Makefile zu erkennen ist. und in dieser libasuro.a sind alle anderen dinge, die er zum compillieren braucht. Aber was macht jetzt die asuro.h? Sorry, dass ich so doof frage, aber ich verstehe das system noch nicht so ganz und bin deswegen auch nicht in der Lage den Fehler zu finden.

Bääääär
11.06.2007, 18:41
asuro.h sollte dort im Verzeichnis stehen, wo asuro.c ist., denn es heisst:
#include "asuro.h" in asuro.c
Moment mal: ich denke, die Asuro.c ist in der libasuro.a drin. dann muss die asuro.h also nach C:\Programme\WinAVR\avr\lib. Hm. das geht auch noch nicht...

ehenkes
11.06.2007, 20:23
Mach mal Folgendes:
1) Alles löschen
2) WinAVR installieren in Standardverzeichnis C:\WinAVR
3) ASURO-Bibliothek installieren

ehenkes
11.06.2007, 20:25
dann muss die asuro.h also nach C:\Programme\WinAVR\avr\lib
Nein.

Bääääär
11.06.2007, 20:47
Hm. OK. Ich hatte schonmal die Libs komplett entfernt und neu gemacht, aber ohne Erfolg. also deinstalliere ich erstmal WinAVR.

- So. WINAVR (das von der Asuro-CD) ist neu installiert.
- Jetzt die Libs... Zip-file runtergeladen und nach C:\ASURO_SRC\AsuroLib entpackt.
- Batch-datei erstellt mit dem Inhalt: "make install" => asurolib.a kopiert.
- asuro.h nach C:\WinAVR\avr\include kopiert.

Ich hoffe, das stimmt jetzt soweit. Nun stehzt für mich noch die Frage, wie müssen die Tool Einstellungen im PN nun sein und wo müssen meine Projekte rein?

Vielen Dank für eure Hilfe, für mich ist das alles ein Dsungel, den ich noch nicht durchblicken kann... Kommt hoffentlich auch noch...

Bääääär

ehenkes
11.06.2007, 21:20
Das soll gehen? Kann ich nicht glauben. Ich würde Folgendes empfehlen:
0) Du benötigst nichts von der CD, alles im Internet
1) WinAVR: http://sourceforge.net/project/showfiles.php?group_id=68108 WinAVR-20070525-install.exe (auf CD: 4 Jahre älter!)
2) Lib: http://sourceforge.net/project/showfiles.php?group_id=155217 AsuroLib 2.7.0 (April 10, 2007) (Wir nehmen nur das Beste!)
3) Wieso musst Du eine Batch-Datei erstellen?
Das steht bei mir in C:\ASURO_SRC\AsuroLib\lib\make-lib.bat:
make clean
make all
make install
4) Du musst asuro.h nicht nach WinAVR kopieren
5) Verwende Programmer's Notepad (C:\WinAVR\pn\pn.exe)
6) Siehe ASURO Anleitung (deutsch) ab S. 39 http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/191164-an-01-de-Asuro_BS_Programmierbarer_Roboter.pdf
7) In C:\ASURO_SRC\AsuroLib\examples\FirstTry\Test-all.bat steht:
make all
8 ) Als "Projekt" nimmst Du immer test.c in FirstTry (am einfachsten für den Anfang)

Bääääär
11.06.2007, 21:47
Sorry, dass ich hier nur Mist baue, ich habe aber das System jetzt glaube ich verstanden. Ich lege im examples ordner in C:\ASURO_SRC\AsuroLib für jedes Projekt einen neuen Ordner an. Darein kommt dann das makefile und die make all und clean Batch dateien. Zum compillieren starte ich diese Batch dateien, da jedes projekt eh einen anderen Ordner hat, lohnt sich das Erstellen von diesen Tools nicht. Jetzt geht es endlich...

Ich habe die make-lib.bat nicht genommen, weil die libasuro.a doch schon fertig ist. ich muss sie doch nur noch ins winavr verzeichniss bringen. Zugegeben, es ist etwas aufwändig...

Ich habe jetzt so viel gelesen und in meinem Hirn war ein gewaltiger Knoten aus diesen gelesenen Dingen. Da ich sowas noch nie in der Art gemacht habe (bin borland Delphi gewohnt), ist das alles etwas schwierig zu kapieren. Ich hab diesen Knoten jetzt einigermaßen entfizt und compillieren geht jetzt ohne probleme.

Danke für deine Geduld, ehenkes.

ehenkes
11.06.2007, 21:53
Stark! Jetzt geht's erst richtig los ... ;-)


Ich habe die make-lib.bat nicht genommen, weil die libasuro.a doch schon fertig ist. ich muss sie doch nur noch ins winavr verzeichniss bringen. Zugegeben, es ist etwas aufwändig...
lösche mal die libasuro.a in WinAVR und lasse mal make-lib.bat neu ablaufen. Wird das bei dir dann nach WinAVR zu den Libs kopiert und der Header von inc nach lib (ein Verzeichnis zurück)?

Schau mal in das Makefile. Da sind die entsprechenden Kopieranweisungen:

install:
cp $(LIBFILE) $(DIRLIB)/$(LIBFILE)
cp inc/$(HEADER) $(DIRINC)/$(HEADER)

Zur Orientierung:


LIB = asuro
LIBFILE = lib$(LIB).a
HEADER = asuro.h
DIRAVR = C:/WinAVR
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib

Also nix manuell machen! Lass das Makefile schaufeln.
make install führt nur diese beiden Kopieranweisungen durch.
Zum Verständnis siehe z.B.: http://www.linux-web.de/thread.php?threadid=11065
http://www.informatik.uni-leipzig.de/~meiler/Propaed.dir/PropaedWS06.dir/Vorlesung.dir/V08.pdf

m.a.r.v.i.n
12.06.2007, 10:35
Hi,

für die nächste AsuroLib Release dibt es jetzt auch Programmers Notepad Projekte. Damit dürfte für diejenigen, die diesen Editor verwenden, einiges leichter werden. Vorab sind hier schon mal die PN Projektdateien beigefügt. Das ZipFile einfach in das Verzeichnis AsuroLib kopieren, und dort entpacken.
Es gibt auch eine Programgruppe im Ordner Examples, die alle Beispielprojekte enthält. Die Projekte lassen sich dann einfach mit PN2 öffnen. Wie man eigene Projekte mit PN2 erzeugt, wird im AsuroWiki (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/ProgrammersNotepad) erklärt.

@ehenkes: Das kopieren der asuro.h ist in der AsuroLib V2.70RC3 fehlerhaft. Eigentlich sollte die asuro.h ins C:\WinAVR\avr\include Verzeichnis kopiert werden. Im Makefile wird aber ins AsuroLib\lib Verzeichnis kopiert. Der eigentliche Grund für das Kopieren war folgende Überlegung:
wenn man eine Lib ins AVR/Lib Verzeichnis kopiert, sollte auch die zugehörige Header-Datei dort stehen. Statt

#include "asuro.h"
kann man dann auch schreiben

#include <asuro.h>
dieselbe Syntax wie beim verwenden anderer Bibliotheksfunktionen.
Wie man es macht, ist aber eher eine Geschmacksache.
Wenn man die Zeile DIRINC im Makefile so ändert, wird auch richtig kopiert.


DIRINC = $(DIRAVR)/avr/include

Bääääär
12.06.2007, 16:23
Also nix manuell machen! Lass das Makefile schaufeln.
make install führt nur diese beiden Kopieranweisungen durch.


Naja, aber ich brauche doch nicht nochmal make clean und make all durchführen. Die libasuro.a muss doch nur noch kopiert werden. Und da reicht es, wenn ich nur Make install durchführe. Und das habe ich doch gemacht, oder? Ich habe nur nochmal eine neue batchdatei angelegt, in der nur make install steht.

ehenkes
12.06.2007, 18:54
Hauptsache, man kopiert nicht manuell. Die Ursprungsdatei, an der gearbeitet wird, darf nur an einer Stelle stehen.

Im Makefile steht:

OBJECTS = globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o\
motor.o motor_low.o print.o rc5.o sound.o switches.o\
time.o uart.o version.o
Da sehe ich nichts von asuro.c. Man kann asuro.c testweise umbenennen. Es fehlt nix! Daher bleibe ich bei:

DIRINC = .