PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : So wird die Asuro-LIB installiert und in Betrieb genommen /3



Sternthaler
14.08.2007, 01:04
Hallo zusammen,
da es hier im Forum doch immer wieder zu Fragen zur Installation und Inbetriebnahme der Asuro-LIB kommt, habe ich hier mal versucht alles 'am Stück' zu beschreiben.
Die Beschreibung bezieht sich vor allem auf Window-Rechner, ist aber auch grundsätzlich für Unix-Systeme gültig.

Ich werde bei der Beschreibung bei 'Adam und Eva' anfangen, damit vor allem das Verständnis was überhaupt beim Erzeugen und Nutzen einer Library passieren muss, einmal erklärt wird.

Für wenn dies meiner Meinung nach interessant ist:
- Anfänger, die bisher immer mit GUI's und kompletten Entwicklungsumgebungen arbeiten.
- Fortgeschrittene Asuro-LIB'erianer, die die LIB zwar nutzen, aber noch Fragen haben.
- Profis, damit sie mir bei Beschreibungsfehlern auf die Finger hauen.


Nun zur Lib und dem 'Durcheinander':


Viel Verwirrung entsteht dadurch, dass nicht bekannt ist, dass das Erzeugen und Nutzen einer Library aus verschiedenen Blickwinkeln zu betrachten ist.

Es gibt DREI Richtungen in die wir sehen müssen:
1: Die Umgebung zum übersetzen (WinAVR)
2: Die Asuro-LIB (im Forum erarbeitet, von m.a.r.v.i.n zusammengestellt/verwaltet)
3. Deine Asuro-Programme


----------------------
Richtung 1: ---> Hier ist das Kompilierungs-System untergebracht.
Dies wird von der Asuro-CD installiert.
Vor allem findest du hier den Compiler avr-gcc.exe
Dieses Verzeichnis müssen wir beide jetzt erst einmal finden. (du kennst es bestimmt schon.)
Ich habe auf meiner WinXP-Kiste ab 'Arbeitsplatz' nach avr-gcc.exe gesucht.
Ich habe als Antwort für avr-gcc.exe den Pfad:
C:\Programme\Meine\Prog\AVR-Win\bin
bekommen. Das \bin vergessen wir nun ganz schnell.
Der Rest --> C:\Programme\Meine\Prog\AVR-Win <-- ist erst einmal nur interessant.
(bei dir garantiert anders, und darf auch auf D oder E oder sonst wo sein)
----> Das Verzeichnis heißt nun GCC-HOME


----------------------
Richtung 2: ---> Hier gibt es 2 Möglichkeit zur Installation:
2a: Die Datei AsuroLib-v270rc3-Setup.exe (Kurz: Setup-Version)
2b: Die Datei AsuroLib-v270rc3.zip (Kurz: ZIP-Version)

Die Setup-Version schlägt C:\ASURO_SRC\AsuroLib als Installationsverzeichnis vor.
Bei der ZIP-Version kannst du einfach ein Verzeichnis auswählen. (Der Rest gilt für beide Versionen)
HOFFENTLICH hast du NICHT das Verzeichnis GCC-HOME zur Installation angegeben.
Dann wäre nun das Verzeichnis GCC-HOME\lib eine 'Müllkippe', da sowohl das WinAVR und auch die Asuro-LIB dann ihre Dateien da gespeichert haben.
Weitere betroffene Verzeichnisse wären:
GCC-HOME\examples
GCC-HOME\doc
Wenn du die Asuro-LIB also in GCC-HOME installiert hast, dann lass es so wie es ist.
KEINESFALLS die Lib deinstallieren, da mit Sicherheit diese Verzeichnisse komplett gelöscht werden und somit auch die Dateien aus unserem GCC-HOME weg wären.
Wenn du doch schon deinstallieren möchtest, musst du sicherheitshalber WinAVR und natürlich die Asuro-LIB neu installieren.
Wenn du die Lib nicht deinstallieren möchtest, reicht es sie noch mal neu zu installieren. (Aber bitte dann nicht GCC-HOME angeben)
Bei mir ist die Lib also unter C:\ASURO_SRC\AsuroLib und
----> dieses Verzeichnis heißt nun LIB-HOME


----------------
Richtung 3: ---> Alle deine Programme
Im Prinzip ist es egal wo diese Dateien liegen. Aber eben nur im Prinzip. (Böses Prinzip)
Da kommen wir noch drauf zurück und vergeben erst einmal
-----> den Namen PROG-HOME



Uff, jetzt haben wir erst einmal sortiert.

Nun ein bisschen davon, was wir wollen.
Eigentlich wollen wir nur die Asuro-LIB übersetzen können, um z.B. geänderte Werte aus LIB-HOME\lib\inc\myasuro.h zu 'aktivieren'.
Wo kommt dies Datei her? ---> Aus der Asuro-LIB. Also müssen wir die LIB übersetzen. <---
Was aber passiert da eigentlich?
FAST alle C-Dateien im Verzeichnis LIB-HOME\lib werden mit dem DORT vorhandenen Makefile übersetzt und zu der Datei libasuro.a zusammengebaut.
Einige diese C-Dateien holen nun über #include "myasuro.h" die Infos aus der Datei myasuro.h und holen sich auf DIESEM WEG die von dir eingetragenen Werte.
Genau an dieser Stelle werden diese Werte schon FEST in der LIB-Datei libasuro.a 'eingebaut'.
Es MUSS somit immer in diesem Verzeichnis LIB-HOME\lib und LIB-HOME\lib\inc editiert werden. NIE woanders, wenn du etwas an der Asuro-LIB ändern willst.
Du weißt nun auch, dass myasuro.h zur Asuro-LIB gehört und NICHT zu deinen Programmen.


Noch hast du aber damit kein eigenes Programm übersetzt.
Dafür gibt es nun das ZWEITE Makefile in deinen Programmverzeichnissen, die irgendwo unter PROG-HOME liegen.
Ein dort liegende Makefile sorgt nun dafür, dass vor allem deine C-Dateien übersetzt werden.
Es übersetzt aber (leider) auch noch die Datei asuro.c aus dem Verzeichnis LIB-HOME\lib und deshalb wirst du nach dem übersetzten in deinem PROG-HOME\dein-Unterverzeichnis immer Dateien finden die asuro.? heißen. (Lass sie einfach da liegen, das ist aktuell so OK)

Nach dem Übersetzen deiner Programme kommt der große Augenblick, dass die fehlerfrei übersetzten Dateien noch gelinkt werden müssen, damit alles zusammengebaut ist, um endlich dein Programm als ???.hex zu erhalten.
Genau hier beim Linken, wird nun auch die libasuro.a zu deinem Programm hinzugefügt.
Dies alles erledigt das Makefile im PROG-HOME\dein-Unterverzeichnis mit einem Aufruf von make.
Im Makefile sind Befehle vorhanden, die *.c-Dateien in *.o-Dateien übersetzen.
Und eben der Linkerbefehl, der dann alle *.o und alle benötigten *.a (Ja, auch die libasuro.a) zu einem *.hex zusammenbaut.



Jetzt also haben wir über DEN UMWEG der übersetzten Asuro-LIB auch die Information aus der myasuro.h in deinem Programm.
Ich hoffe, dass jetzt erst einmal das Prinzip klarer geworden ist.


Für Raucher nun eine Zigarettenpause. Die anderen arbeiten weiter ;-)





Wir haben die ganze Zeit nichts vom Verzeichnis GCC-HOME gehört. Das holen wir nun nach.

In deinen Programmen baust du ja immer ein #include <asuro.h> ein. (Es sollten wirklich die <> sein. So aus Prinzip, weil die Datei nun aus dem GCC-HOME geholt werden soll.)
Wo muss denn die Datei sein, damit sie auch vom Compiler gefunden wird?
Ist eigentlich einfach, da der Compiler ein 'Lieblingsverzeichnis' hat.
Dies ist das Verzeichnis: GCC-HOME\avr\include
-> Nicht verwechseln mit: GCC-HOME\include

Und auch der Linker muss wissen, wo er die LIB-Datei libasuro.a finden kann.
Dies weiß der Linker auch von ganz alleine, wenn man die libasuro.a an 'die richtige' Stelle kopiert hat. Ist eben ein weiteres 'Lieblingsverzeichnis'.
Dies ist das Verzeichnis: GCC-HOME\avr\lib
-> Nicht verwechseln mit: GCC-HOME\lib


----> Trommelwirbel <------
Jetzt ist erst einmal klar, was mit übersetzten der Lib gemeint ist, und wo denn alle Dateien hin müssen.



Nun kommen die Änderungen in den (JA Mehrzahl) Makefile’s:

--------------------
LIB-HOME\lib\Makefile
Oh Mist aber auch. Die Datei ist nicht vorhanden! Keine Panik.
Mit der Setup-Version von m.a.r.v.i.n es gibt nur die Datei Makefile.orig.
KOPIERE diese Datei einfach nach Makefile, und schon ist sie vorhanden.
m.a.r.v.i.n wusste ja, dass man in der Datei etwas 'fummeln' muss, und hat deshalb kein 'Original' mitgegeben.
Also: Erst einmal Makefile.orig KOPIEREN nach Makefile
P.S.: In der ZIP-Version ist schon eine Kopie vorhanden. (Warum? Keine Ahnung)


In diesem Makefile suchen und ändern wir nun folgendes:
-1-> Suche: DIRAVR = c:/winavr
---> Ändern: DIRAVR = GCC-HOME
Bei mir also C:/Programme/Meine/Prog/AVR-Win (Bitte den / tatsächlich benutzen.)

-2-> Suche: DIRINC = .
---> Ändern: DIRINC = $(DIRAVR)/avr/include
Achtung: Da ist tatsächlich ein Punkt hinter dem = Der muss weg.

-3-> Suche: HEADER = asuro.h
---> Ändern: HEADER = *.h

-4-> Suche: cp inc/$(HEADER) $(DIRINC)/$(HEADER)
---> Ändern: cp inc/$(HEADER) $(DIRINC)
ACHTUNG: vor dem 'cp' sind KEINE Leerzeichen. ES MUSS EIN TAB-ZEICHEN BLEIBEN! SONST GEHT NICHTS MEHR!


Erklärung zu:
-1- Aus diesem Grund hat m.a.r.v.i.n das Makefile als Makefile.orig
mitgegeben. Hier kann er ja nicht wissen, wo du dein winavr als
GCC-HOME installiert hast.

-2- Fehlerbehebung: Das Ziel für die asuro.h soll ja in dem
'Lieblingsverzeichnis' vom GCC-HOME liegen.

-3- Optimierung: Es sind mittlerweile ja schon einige Header-Dateien für
die Asuro-LIB unter LIB-HOME/inc abgelegt. Also macht es auch Sinn, dass
alle Header in das 'Lieblingsverzeichnis' kopiert werden. Dafür der *

-4- Jetzt müssen die unter -3- angegeben Dateien noch in das
Lieblingsverzeichnis kopiert werden.
Bei einer einzelnen Datei (asuro.h) ging der alte Befehl noch.
Bei mehreren Dateien (*.h) dürfen wir nur das Zielverzeichnis angeben.


-----------------
PROD-HOME\dein-Unterverzeichnis\Makefile
Hier nehmen wir erst einmal ein Makefile als Muster aus LIB-HOME\examples\EncoderTest und KOPIEREN es nun in unser Verzeichnis PROD-HOME\dein-Unterverzeichnis.
Auch in diesem Makefile müssen wir suchen und ändern.

Let's go:
-1-> Suche: TARGET = test
---> Ändern: TARGET = folgelinie
Dies ist NUR dann notwendig, wenn du deine Datei 'Haupt-C-Datei', die mit dem main() drin, geändert hast nach folgelinie.c (Ist nur der Vollständigkeit erklärt. Es kann ja mal vorkommen, dass man nicht immer test.hex-Dateien haben möchte. Ist für dich aber bestimmt nichts Neues.)

-2-> Suche: SRC += asuro.c
---> Ändern: SRC += asuro.c linienlesen.c linienauswerten.c
Auch dies ist NUR notwendig, wenn du deine Programme in verschiedenen Source-Dateien verteilt hast. (Wird später im Leben mal interessant. Aber seltenst beim Asuro.)
Hier ist auch der Grund, warum du nach dem übersetzten, in deinem Verzeichnis die oben angesprochenen Dateien asuro.? bekommst. Schließlich wird hiermit die Datei asuro.c übersetzt.
Und wie findet der Compiler die Datei asuro.c?
Mit dem gleich kommenden VPATH

-3-> Suche: CFLAGS = -g -O$(OPT) -I../../lib/inc\
---> Ändern: CFLAGS = -g -O$(OPT) \
ACHTUNG: der \ am Ende der Zeile ist auch wieder SEHR WICHTIG. Fehlt er: AUCH HIER GEHT DANN NICHTS MEHR!

-4-> Suche: VPATH=../../lib
---> Ändern: VPATH=LIB-HOME/lib

Die beiden Änderungen -3- und -4- sind der Grund, warum ich oben vom 'bösen Prinzip' sprach.
Durch diese, nun ausgetauschte, Konstruktion, hat m.a.r.v.i.n (oder es war schon immer so in den Makefile's drin.) FESTGELEGT, dass es leider nicht erlaubt ist, die eigenen Programme irgendwo auf deiner Festplatte zu speichern.
Mit -3- lösen wir jetzt das Problem der Header-Dateien (z.b. #include <asuro.h>), aber noch nicht das Problem mit der zu übersetzenden asuro.c.
Bei -3- lassen wir einfach das make-Kommando -I[Pfadangabe] weg. Von nun an sucht der Compiler nur noch in seinem Lieblingsverzeichnis für Header-Dateien. Da wir aber schon alle Header-Dateien aus LIB-HOME/lib/inc nach GCC-HOME/avr/include kopiert haben (oben mit dem Makefile aus LIB-HOME/lib), werden sie nun auch dort gefunden.
-4- löst das Problem, dass die Datei asuro.c nun auch gefunden werden kann, ohne dass du dein PROG-HOME an die 'richtige' Stelle auf deiner Festplatte legen musst.

Diese Makefile kann nun für alle deine selbst geschriebenen Projekte unter PROG-HOME benutzt werden. Du brauchst nun höchstens noch bei -1- oder -2- Anpassungen zu machen.



Und zu guter letzt: Wie ruft man am besten ein make auf?
Mit der guten alten DOS-Shell (so mache ich es)

START / Programme / Zubehör / Eingabeaufforderung (Sollte da wohl sein)

Aufs Laufwerk wechseln zum Laufwerksbuchstaben von LIB-HOME mit dem c:[Enter]
cd LIB-HOME\lib[Enter]
make-lib[Enter]

----> Jubel, Jubel.
Die Asuro-LIB ist übersetzt. Und alle notwendigen Dateien sind auch in die richtigen Lieblingsverzeichnisse unter GCC-HOME kopiert worden.. (hoffentlich)


Und nun noch die eigenen Programme:
Das hast du ja raus, denke ich.



Uff, das war’s.
Gruß Sternthaler


P.S.: Falls weitere Fragen auftauchen, Frag einfach.

Lest es euch in Ruhe durch. Es darf auch 2- oder 3-mal sein, da es ja möglicherweise nicht ganz einfach zu verstehen ist.
Ich bin sicher, dass danach einige (alle?) Fragen geklärt sind.
Viel Erfolg.

Zum downloaden habe ich diesen Text als eigene Datei angehängt.


Linkliste: [Ergänzt am 28.11.2007]
Hier geht es zur Asuro-LIB V2.70 (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=26594)
[NEU] Hier geht es zur Asuro-LIB V2.71 (https://www.roboternetz.de/phpBB2/viewtopic.php?p=328775)
Hier geht es zum Programm zur Ermittlung der myasuro.h-Werte (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=31073)
Folgendes beschreibt die <> und "" beim #include (https://www.roboternetz.de/wissen/index.php/Avr-gcc#Includes )
[NEU] M1.R konfiguriert im AVRStudio (https://www.roboternetz.de/phpBB2/viewtopic.php?p=331187#331187)
[NEU] m.a.r.v.i.n's Lösungsvorschlag für das AVRStudio (https://www.roboternetz.de/phpBB2/viewtopic.php?p=331345#331345)
[NEU] m.a.r.v.i.n's AsuroWiki-Seite mit dem Beitrag zum AVRStudio (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AVRStudio)

m.a.r.v.i.n
14.08.2007, 09:24
Hallo,

@sternthaler Hallo Christof, melde mich aus dem Urlaub zurück. Tolle Doku. :D

@all hier noch zur Ergänzung ob man Headerdateien mit <> oder "" einbinden sollte. Wem der Unterschied nicht klar ist, sollte sich erst mal diesen Abschnitt aus dem RN-Wissen durchlesen:
https://www.roboternetz.de/wissen/index.php/Avr-gcc#Includes

Im nach hinein muß ich feststellen, dass es keine sehr schlaue Idee von mir war, die Asuro Lib ins Compiler Verzeichnis zu kopieren. Das wird mit der nächsten Version wieder geändert. Die Lib bleibt besser lokal im AsuroLib Ordner, ebenso die Headerdatei asuro.h.

Die Compiler Option


-I../../lib/inc

im Makefile bewirkt, das der Compiler Anwendungsspezifische Headerdateien aber auch AVR und Standard Headerdateien zuerst in dem Verzeichnis ../../lib/inc suchen soll. Deshalb ist es auch egal, ob man
#include "asuro.h" oder

#include <asuro.h> schreibt. Das war mir vorher auch nicht so klar gewesen. :oops:

Sternthaler
14.08.2007, 22:19
Hallo m.a.r.v.i.n,
da also hast du gesteckt. Urlaub! Ich hoffe, du bist gut erholt und kannst mit ganzer Kraft wieder am Asuro werkeln ;-)

damaltor fragt an, ob du in deinem Thread zur Asuro-LIB einen Link hier hin legen kannst.
Ich nehmen jedenfalls deinen Link zur Asuro-Wissen#Includes mal mit in den ersten Beitrag. (Ist ein sehr guter Tip.)

Tolle doku? Na mal abwarten, was unter Unix und bei der Benutzung vom AVR-Studio noch so alles dazu kommen muss. Trotzdem: Dein Wort geht mir wie Honig runter :-({|=

Zu deiner Anmerkung, dass du die *.h und libasuro.a nicht mehr in's GCC-HOME kopieren möchtest, sollte man einfach eine Shell-Vaiablen neu im PROG-HOME/../Makefile 'erfinden':
ASURO_LIB = c:/schlag_mich_tot/asurolib/lib

und die beiden folgenden anpassen zu:
CFLAGS = -g -O$(OPT) -I$(ASURO_LIB)/inc -I. \
und
VPATH=$(ASURO_LIB)/lib

CFLAGS bekommt mit dem ersten -I den Weg zu asuro.h und das zweite -I zeigt in mein eigens Verzeichnis für lokale Header.
Aber wie war das nochmal mit dem Suchpfad für den Linker, um die libasuro.a zu finden? Wenn es VPATH wäre, dann müsste sie ja gar nicht nach GCC-HOME/... kopiert werden, weil die jetztigen Makefiles aus den PROG-HOME's mit VPATH ja schon genau in's LIB-HOME/lib zeigen.

m.a.r.v.i.n
15.08.2007, 10:12
Hallo sternthaler,

naja gut erholt kann man nicht gerade sagen. Leider.



Zu deiner Anmerkung, dass du die *.h und libasuro.a nicht mehr in's GCC-HOME kopieren möchtest, sollte man einfach eine Shell-Vaiablen neu im PROG-HOME/../Makefile 'erfinden':
ASURO_LIB = c:/schlag_mich_tot/asurolib/lib

und die beiden folgenden anpassen zu:
CFLAGS = -g -O$(OPT) -I$(ASURO_LIB)/inc -I. \
und
VPATH=$(ASURO_LIB)/lib


so etwa hatte ich mir das auch gedacht.
Den Pfad zur AsuroLib stellt man dann so ein:


LDFLAGS += -L$(ASURO_LIB)/lib

VPATH dient nur dazu, das der Compiler nach C-Files auch im Lib Ordner zu suchen (asuro.c wird ja weiterhin als C-File benötigt, und ist nicht in der AsuroLib drin).

damaltor
15.08.2007, 14:37
muss mich gerade korrigieren: hier gehört natürlich uch ein llink hin, ich meinte jedoch den thread "wichtige downloads und dateien" ganz oben im forum.

;)

was bedeutet eigentlich das /2 im titel?

Sternthaler
15.08.2007, 22:47
@damaltor
Jetzt kann ich nicht so ganz folgen. Wo soll welcher Link hin? Frage: Muss ich was tun?

Das /2 habe ich mal mal bewusst reingehackert, um zu zeigen, dass ich oben im Beitrag eine Änderung gemacht habe. Ist zwar 'nur' der Link von m.a.r.v.i.n zur include-Doku, aber wie sonst kann man zeigen, dass hier eine Änderung erfolgt ist, ohne einen neuen Beitrag á la 'Hey, schaut mal im ersten Beitrag nach, da gibts's was Neues' zu posten.
Ich glaube, dass du mal geschrieben hast, wenn ein bestehender Beitrag editiert wird, gibt es keine Mails an die Beteiligten. So kann man aber sehen das was passiert ist.
War nur so eine Idee von mir. Bei dir hat es ja geklappt ;-) Wenn was dagegen spricht, lasse ich das natürlich.

NATHAN
23.08.2007, 13:53
Hallo zusammen

Super das du dir die Arbeit machst Sternthaler. =D> Ich melde mich jetzt mal als ein Vertreter der Anfaenger Kategorie. Ich habe mir jetzt mal deine Doku durchgelesen und versucht so viel wie moeglich zu verstehen. Ich habe zwar bis jetzt die neue Asuro Lib verwendet (das dachte ich jedenfalls), aber viele deiner Schritte sind bei mir nicht vorgekommen.
Bitte alles was ich sage nicht als Kritrik verstehen, denn ich finde es super, dass du endlich Klarheit in die Sache bringen willst. Bloß manchmal waere es fuer uns Anfaenger leichter manche Sachen noch ein bischen ausfuehrlicher erklaert zu bekommen.
Ich habe wie ich die Asuro-Lib installiert habe nur die AsuroLib-v270rc3-setup.exe ausgefuehrt. Danach lief alles eigentlich wunderbar. Ich habe mein Programm mit den bei Programmers Notepad vorgefertigten Makes compiliert und es lief auch alles ganz wudnerbar. Der Asuro hat gemacht was er sollte.
Deshlab verwirren mich einige Sachen die du in deiner Doku geschrieben hast.
Du hast auf der ersten Seite unten geschrieben:


HOFFENTLICH hast du NICHT das Verzeichnis GCC-HOME zur Installation angegeben.
Dann wäre nun das Verzeichnis GCC-HOME\lib eine 'Müllkippe', da sowohl das WinAVR und auch die Asuro-LIB dann ihre Dateien da gespeichert haben.

Warum ist das so?? Ich dachte die .exe legt ein Verzeichniss mit dem Namen AsuroLib an und kopiert alles darein.

Auf der dritten Seite wendest du dich dem GCC-Home Verzeichniss zu. Wofuer brauche ich das ueberhaupt?? Wenn mein ProgrammersNotepad das makefilein in meinem Prog-Home Verzeichniss startet, dann wird doch mein Programm kompiliert. Wenn ich die Lib im LIB-HOME Verzeichniss vorher schon kompiliert habe, bin ich doch fertig. Oder??? :-k

Ebenfalls auf der dritten Seite sagst du das die Datei Makefile nicht vorhnaden ist:


LIB-HOME\lib\Makefile
Oh Mist aber auch. Die Datei ist nicht vorhanden! Keine Panik.
Mit der Setup-Version von m.a.r.v.i.n es gibt nur die Datei Makefile.orig.
KOPIERE diese Datei einfach nach Makefile, und schon ist sie vorhanden.

Aber bei mir ist die Datei Makefile im LIB-HOME\lib Ordner bereits vorhanden.
Desweiteren:
Wohin soll ich die Makefile.orig ueberhaupt kopieren?? Es gibt keinen Ordner Makefile im Verzeichniss LIB-HOME\lib. Oder soll ich den Inhalt der makefile.orig in den Inhalt der, bei mir vorhandenen, Datei Makefile kopieren???

Auf der vierten Seite oben hast du geschrieben:


Bei einer einzelnen Datei (asuro.h) ging der alte Befehl noch.
Bei mehreren Dateien (*.h) dürfen wir nur das Zielverzeichnis angeben.

Welchen alten Befehl meinst du???

Jetzt bin ich fast fertig, :roll: :roll:

Auf Seite 4/5 erklaerst du wie man ein makefile aufruft.

Geht dass nciht auch mit dem Programmers Notepad ???
Wofuer sind dann ueberhaupt die Stapelverarbeitungsdatein da???

Ich hoffe die Fragen sind nicht alzu daemlich.

Danke fuer deine Hilfe
NATHAN

Uebrigens: ich verwende die Win-AVR Version 20060421

Sternthaler
28.08.2007, 15:39
Hallo NATHAN,
tut mir leid, dass ich erst jetzt zu einer Antwort komme.
Es ist tatsächlich nicht so einfach alles 'supertruper' zu beschreiben, wenn man schon so lange mit so einem Zeug arbeitet, dass man sich nur noch wenige Gedanken dazu macht. Deshalb hier ein ernst gemeintes: Danke für die guten Fragen.


Du hast auf der ersten Seite unten geschrieben:

HOFFENTLICH hast du NICHT das Verzeichnis GCC-HOME zur Installation angegeben.
Dann wäre nun das Verzeichnis GCC-HOME\lib eine 'Müllkippe', da sowohl das WinAVR und auch die Asuro-LIB dann ihre Dateien da gespeichert haben.
Warum ist das so?? Ich dachte die .exe legt ein Verzeichniss mit dem Namen AsuroLib an und kopiert alles darein.
Mit dem "HOFFENTLICH ..." meine ich vor allem die ZIP-Version. Hier kannst du ja auf deine Platte entpacken wo du möchtest. ABER du kannst ja auch bei der Setup-Version das Ziel-Verzeichniss angeben.
Die "Müllkippe" ist somit nur dann vorhanden, das GCC-HOME als Ziel benutzt wurde.



Auf der dritten Seite wendest du dich dem GCC-Home Verzeichniss zu. Wofuer brauche ich das ueberhaupt?? Wenn mein ProgrammersNotepad das makefilein in meinem Prog-Home Verzeichniss startet, dann wird doch mein Programm kompiliert. Wenn ich die Lib im LIB-HOME Verzeichniss vorher schon kompiliert habe, bin ich doch fertig. Oder??? :-k
Hier ist der Unterschied zwischen GCC-Home und LIB-Home beim kompilieren deines Programms wichtig. In deinem Makefile (in PROG-HOME) zu deinem Programm muss hinterlegt sein, wo die Asuro-LIB zu finden ist, da sie beim kompilieren dazugelinkt wird. (Die Asuro-LIB wird nicht neu übersetzt, es wird nur die datei libasuro.a dazugenommen, halt gelinkt)
Ich habe in der Beschreibung für dein Programm-Makefile (PROG-HOME) keine Angabe gemacht, dass Librarys auch noch an anderen Stellen als im GCC-HOME gesucht werden. Aus diesem Grund sollte die Asuro-LIB eben dahin kopiert werden.
Warum das so ist?
--> Wenn die Asuro-LIB (und die *.h-Dateien) nach GCC-HOME kopiert werden, muss eben keine Anpassung in den PROG-HOME/Makefiles gemacht werden, um dem Compiler zu sagen wo die libasuro.a auf deiner Platte liegt.
Woher dein Makefile, das du über "Programmes-Notepad" erzeugt hast, weiss, dass es im LIB-HOME suchen muss, kann ich leider nicht sagen.



Ebenfalls auf der dritten Seite sagst du das die Datei Makefile nicht vorhnaden ist:
Ich habe gerade nochmal die Setup-Version neu installiert. Ich finde da kein Makefile. Nur das von mir angesprochene Makefile.orig. Bitte prüf nochmal, ob du die Makefiles im Verzeichniss examples meintest. Da sind nämlich welche.


Desweiteren:
Wohin soll ich die Makefile.orig ueberhaupt kopieren?? Es gibt keinen Ordner Makefile im Verzeichniss LIB-HOME\lib. Oder soll ich den Inhalt der makefile.orig in den Inhalt der, bei mir vorhandenen, Datei Makefile kopieren???
Ja genau. Die Datei Makefile.orig soll als Datei Makefile im LIB-HOME\lib-Verzeichniss kopiert werden. Ist schon richtig, dass es kein "Verzeichniss" gibt.



Auf der vierten Seite oben hast du geschrieben:

Bei einer einzelnen Datei (asuro.h) ging der alte Befehl noch.
Bei mehreren Dateien (*.h) dürfen wir nur das Zielverzeichnis angeben.
Welchen alten Befehl meinst du???
Du sollst nach der Beschreibung etwas suchen, und dann an der Stelle etwas ersetzen. Die gesuchte Stelle ist der "alte Befehl".



Geht dass nciht auch mit dem Programmers Notepad ???
Ja, aber da kenne ich mich nicht mit aus.


Wofuer sind dann ueberhaupt die Stapelverarbeitungsdatein da???
Wenn du mit Stapelverarbeitungsdatein die vorhandenen *.bat-Dateien meinst, dann sind dass 'nur' kleine Helferlein im Windows-Umfeld um einige Befehle zusammenzufassen. (Stapelverarbeitungsdatein sind nicht die Makefiles)


Ich hoffe die Fragen sind nicht alzu daemlich.
Nein, natürlich nicht, schliesslich fängt jeder erst einmal klein an.

Viel Glück und Spaß mit dem Asuro

NATHAN
03.09.2007, 21:03
Danke fuer die Antworten

Ich hab mir die ganze Sache nochmal durch den Kopf gehen lassen und hab noch ein paar Fragen, bzw. Wuensche.

Wie funktioniert das mit den Stapelverarbeitungsdatein genau? Greift Windows auf diese zu, wenn ich das makefile aufrufe? Was wird in denen den so besonderes gemacht? :-k

Ich habe jetzt auch die Lib noch mal neu installiert und finde allerdings trotzdem neben der Datei makefile.orig im Verzeichniss LIB-Home/lib noch die Datei Makefile. Allerdings hat sie keine Datei-Endung, was ich schon komisch finde. Oder ist bei Makefiles gar keine noetig (Warum nich?) :?:

Ausserdem habe ich die beiden Makefiles verglichen, in ihnen steht bei beiden dasselbe drin.... Komisch.

Sind die auf Seite 4 beschriebenen Verfahren zum erstellen eines eigenen Verzeichnisses mit zugehoerigem Makefile denn notwendig, wenn man den Ordner LIB-Home/examples/FirstTry verwendet?

Nun von den Fragen zu den Bitten: :-b

Es waere super, wenn du in deiner Docu noch die Vorteile der neuen Lib erwaehnen koenntest. Wenn ich das von den anderen Threads richtig verstanden habe, werden ja nur noch die Bibiotheks-Funktionen eingebunden, die auch wirklich im Programm verwendet werden, oder?? Koenntest du erklaeren, wie dieser Prozess funktioniert (Wenn es ihn denn gibt O:))?

Auch waere es toll, wenn du vielleicht die Modularitaet, des WinAVR Paketes am Anfang kurz beschreiben koenntest. Ich vermute jetzt naemlich aufgrund deiner Antworten, dass der Kompiler eine voellig vom Programmers Notepad eigenstaendige Einheit ist. Man kann einen beliebigen C-Editor nehmen, welcher dann den WinAVR Kompiler benutzt, oder?? Ich glaube das ist einigen Anfaengern (wie mir) am Anfang nicht klar. (Da gibt es halt das Programmers Notepad und fertig :-k)Wenn das stimmt: Welchen Editor verwendest du?

Koenntest du vielleicht noch einen Quellcode ergaenzen, bei dessen Ausfuehrung man fesstellen kann, dass alles in Ordnung ist? (Uebrpruefung der Anzahl der geflashten Pages, der neuen Funktionen etc.)

Das muss um Himmelswillen nicht alles sofort sein und ich weiss ja noch nicht mal ob die ganzen Vorschlaege ueberhaupt sinnvoll sind.

Brauchst dir wegen mir keinen Stress machen :wink: :wink:

Schon mal danke im Vorraus
NATHAN

damaltor
03.09.2007, 21:25
beispiel linux: dateiendungen sind ohnehin nicht nötig. das ist bloss eine unterscheidungsmöglichkeit für windoof =)

nicht das makefile wird aufgerufen, sondern die anwendung MAKE. im makefile steht eine beschreibung, wie das programm zu kompilieren ist.

Sternthaler
09.09.2007, 20:39
Hallo NATHAN, (und natürlich alle anderen)
jetzt habe ich wieder etwas Luft, und kann dir deine Fragen beantworten.

Deine Fragen interpretiere ich so, dass du noch nicht allzuviel mit Programmierung zu tun hattest. Deshalb hole ich hier etwas weiter aus. Die darin enthaltenen Antworten zu Deinen Fragen werden dann eventuell besser verständlich.

Hier mal kurz einige Begriffe:
---------------
- Stapelverarbeitung
Unter Windows nutzt man eher den Begriff Batchprogramm. Das sind dann die *.bat-Dateien.
Unter Unix sagt man eher Shell-Programm oder Shell-Script. Typische Dateiendung wäre dann *.sh. Aber wie damaltor schon schrieb, sind unter Unix die Dateiendungen nicht unbedingt üblich.
---> Was machen die?
Zusammenfassen von Programmaufrufen, damit man nicht so viel tippen muss. (Sowohl unter Window als auch extrem unter Unix sind Programmmiermöglichkeiten in den Dateien möglich. Aber eher so was wie if und loop. Profis schaffen hier eine ganze Menge!)
<--> Beispiel: make-lib.bat (Im lib-Verzeichniss der Asuro-LIB)
Enthält 3 Aufrufe vom make-Programm mit Angabe von Parametern für das make-Programm

---------------
- Makefile
Anweisungsdatei zur Steuerung von Anweisungen/auszuführenden Befehlen, die 'in der Regel' dazu benutzt wird, eigene Programme zu übersetzen.
Die Hauptaufgabe dabei ist es, nur die Dateien zu bearbeiten, die sich seit dem letzten 'maken' geändert haben. Da zum Übersetzten auch meistens ein Linken gehört, kümmert sich die Steuerdatei 'Makefile' dann sinnvollerweise auch darum.
Wie damaltor schon schrieb, wird das Makefile vom Programm 'make' benutzt/gelesen/interpretiert um die darin enthaltenen Aufgaben auszuführen.
---> Warum Makefile.orig?
m.a.r.v.i.n hat diese Datei mit in die Asuro-LIB gepackt, damit man auf alle Fälle eine Sicherung hat. Sie wird nicht benutzt, und sollte auch nicht geändert werden. Nur Makefile ändern, wie oben im Thread von mir beschrieben.

---------------
- Übersetzten
Umwandeln von Text-Dateien in sogenante Object-Dateien.
Die Text-Datei ist z.B. eine Datei die test.c heißt und Programmcode enthält, der in C geschrieben sein kann.
Die Object-Datei hat absolut nichts mit dem Begriff objectorientierte Programmierung zu tun. In so einer Datei steht entweder ein sogenannter Zwischencode, oder es ist schon Assemblercode, der nach einem weiteren Übersetzen/assemblieren, von der CPU ausgeführt werden könnte.
- Übersetzen die 2.te
Auch der Zwischencode bzw. Assemblercode muss in ewas übersetzt werden, was eine CPU eigendlich erst ausführen kann.
Hier spricht man dann eher vom Assemblieren, als vom Übersetzten.
Beim Asuro haben wir damit aber nichts zu tun. (Außer man möchte ihn in Assembler programmieren.)

---------------
- Linken
Zusammenpuzzeln von einer oder mehreren Object-Dateien und bei Bedarf hinzuziehen von Funktionen aus Library's um zum Schluß ein zusammenhängendes Programm zu erhalten. (Windows-Programme dann *.exe, unter Unix in der Regel keine Extention.)
---> Warum aber keine EXE-Datei beim Asuro, sondern HEX-Dateien?
Das Asuro-Programm soll ja nicht auf dem PC laufen. Hier wird ein Cross-System benutzt, welches aus dem C-Programmcode, über den Cross-Compiler und den Cross-Linker dann die HEX-Datei erstellt. Diese Datei enthält den ausführbaren Binärcode für den AVR-Prozessor im Asuro.
---> Was soll Cross heißen?
Es wird auf einem Rechner etwas für einen anderen Rechner übersetzt. Hierbei ist der Begriff Rechner aber als CPU-Typ zu sehen.
PC mit Intel-CPU; Asuro mit AVR-CPU



Sind die auf Seite 4 beschriebenen Verfahren zum erstellen eines eigenen Verzeichnisses mit zugehoerigem Makefile denn notwendig, wenn man den Ordner LIB-Home/examples/FirstTry verwendet?Ich kann leider nicht erkennen, was du genau meinst. Kannst du die Textpasage bitte genau angeben?


Nun von den Fragen zu den Bitten:

--- Vorteile der LIB:
(Nein, werde ich nicht in meiner Doku hinterlegen, da dort schon genügend Stoff zu technischen Abläufen ist. Die Vorteile müssen ja erst einmal durch die make-Orgien nutzbar werden. Nur dafür ist die Beschreibung von mir.)
- Neue/verbesserte Funktionen
- Doku der einzelnen Funktionen
- Beispielprogramme zu den Funktionen
- Platzersparnis durch LIB
---> Hier hat sich m.a.r.v.i.n viel Arbeit gemacht und die vorhandenen Funktionen aus der ursprünglichen Datei asuro.c verteilt auf viele einzelne Dateien. (adc.c asuro.c encoder.c encoder_low.c ...)
Das Geheimnis zum sparen von Platz ist nun, dass beim linken nur noch die Teile aus der LIB benutzt werden, die auch tatsächlich benötigt werden in deinem Programm. Allerdings werden dann immer alle Funktionen aus den einzelnen Dateien geholt, auch wenn nur eine Funktion aus der Datei benutzt wird.
Beispiel: Wird die Funktion SerWrite() benutzt, dann wird die Funktion aus der LIB geholt, da auch die Datei uart.c darin 'enthalten' ist. Da aber auch die Funktion SerRead() in der Datei uart.c geschrieben steht, wird auch diese Funktion in die HEX-Datei geschrieben, auch wenn diese nicht benutzt wird. (Auch die LIB selber kann also auch noch optimiert werden.)
Der Programmspeicherplatz für die Funktionen Go() und Turn() (Datei encoder.c) wird allerdings nicht benötigt, solange keine der beiden Funktionen in deinem Programm benutzt werden.


--- Modularitaet / WinAVR Pakete / Programmers Notepad / Editor
Ja, all diese Dinge sind getrennt zu sehen.
- Als erstes kommt das Betriebssystem (Windows / Unix / MAC / ...)
- Dann ein Editor (Notepad / Progr.Notepad / vi / Word / emacs / ...)
- Nun ein Compiler (Für Asuro: avr-gcc; Ist der Freeware Compiler gcc, mit Anpassungen für den AVR -> Cross)
- Dann noch eine Linker (Hier wird auch avr-gcc benutzt)
- Und für die LIB noch einen 'archiver' (gcc-ar)
- Und eine Eingabemöglichkeit, um diese Befehle aufzurufen. (Editor starten mit Doppelklick; maken in einer DOS-Shell; ...)

Für Anfänger geeignet und natürlich auch für Profis, gibt es dann noch die Entwicklungsumgebungen. Für den Asuro wird da das kostenlose AvrStudio mitgeliefert. Hier ist auch ein Editor vorhanden, ein Button/Menüpunkt zum übersetzten, ein Debuger zur (eingeschränkten) Fehlersuche. Leider sind aber gerade hier für Anfänger auch viele Menüpunkte vorhanden, die ohne grundlegenes Verständniss nur Verwirrung erzeugen. Doku lesen?

Beim Editor kannst du alles benutzen, was 'reinen' ASCII-Text in deiner Datei speichert. Das sind dann genau die lesbaren Zeichen, die du auch im Editor siehst. Keine Formatierungszeichen für fette, grüne Buchstaben sind dort vorhanden.
Ich persönlich bevorzuge den PL/SQL-Developer als Editor (kostenplichtig), da ich ihn in der Firma nutze und somit die Bedienung 'in- und auswendig' kenne.
Für mich ist es wichtig, dass ich mehrere Dateien gleichzeitig geöffnet haben kann, Merker an einzelnen Zeilen setzen kann um zu diesen Stellen springen zu können, die Ausgabe in gestochen scharfer Schrift erfolgt, Syntaxhighlighting AUSschaltbar ist, und vor allem: Alle Funktionen lassen sich über die Tastatur erreichen. (Warum immer zur Maus greifen, wenn man doch C-Programm schreiben will?)
Fazit: Editor nehmen, den man möglichst perfekt bedienen kann.

P.S.: Es gibt keinen C-Editor, oder HTML-Editor.
Manche Editoren können dir aber zu bestimmten Sprachen, in der man halt schreiben möchte, eine enorme Hilfestellung geben.



--- Quellcode zur Überprüfung
Ne, ne. Dies macht keinen Sinn, da diese Muster immer dann etwas anderes liefern werden, wenn z.B. die benutzt LIB anders ist als die im Muster, also von mir, benutzte LIB. Oder die Optimierung vom Compiler wurde geändert. Auch dann ergeben sich andere Zahlen für die Flash-Zeilen.



Das muss um Himmelswillen nicht alles sofort sein ...Das war ganz einfach.


Brauchst dir wegen mir keinen Stress machen :wink: :wink: Zu spät. ;-)

So, ich habe es mal wieder nicht geschafft, mich kurz zu fassen.
Ich hoffe, dass es trotzdem weiterhilft.

Gruß Sternthaler

m1ch15inner
09.09.2007, 22:35
ich hab alles gemacht wie in der docu beschrieben und es geht garnix... keine hex.. ich weis nicht was ich falsch gemacht hab.. geht das denn nicht einfacher? :oops:

Sternthaler
12.09.2007, 00:10
@m1ch15inner
Input. Ohne eine 'etwas' bessere Beschreibung deines Problems wird dir hier nicht weiterzuhelfen sein. Möglicherweise hast du die hex-Datei ja selber gelöscht, da du sie nicht mochtest.

Hey, mal ne kurze Antwort! :mrgreen:

m1ch15inner
12.09.2007, 08:46
also... ich hab auf meinem neuen pc winAVR installiert... dann die asuro lib.. dann das umgeändert was oben beschrieben ist und dann ein programm versucht zu übersetzen... wenn ich dann im pn auf make all drück kommen nicht die ganzen dateien.. die bat-datei läuft durch und nix is passiert



> Failed to create process: Das System kann den angegebenen Pfad nicht finden.

> Process Exit Code: 0

kommt bei mir

welchen pfad muss ich dann ändern?

liggi
12.09.2007, 14:31
Hallo Leute

ich hab ein Problem mit der Asuro Lib. Ich hab alles so gemacht wie oben und dann bekomme ich diese Ausgabe:


D:\Asuro\Programme\Erstes Programm>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=asuro.lst asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
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:8: warning: implicit declaration of function `Msleep'
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
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -lm -lasuro
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\lib\libasuro.a(time. o)(.text+0x38): In function `Sleep':
: multiple definition of `Sleep'
asuro.o(.text+0x2e0):D:\Asuro\Programme\Erstes Programm/asuro.c:235: first defined here
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\bin\ld.exe: Warning: size of symbol `Sleep' changed from 16 in asuro.o to 18 in C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\lib\libasuro.a(time. o)
make: *** [test.elf] Error 1

> Process Exit Code: 2



Kann mir einer helfen?

Vielen Dank im vorraus

Sternthaler
12.09.2007, 18:08
@m1ch15inner
Da muss ich selber erst mal suchen, was man im pn alles falsch einstellen kann. Bitte Geduld.

@liggi
Die beiden Ausgabezeilen von dir
--> test.c:8: warning: implicit declaration of function `Msleep'
--> : multiple definition of `Sleep'

deuten darauf hin, dass du in deinem test.c-Source nicht die asuro.h, sondern die asuro.c includest. Würdest du das bitte prüfen. Hilfreich wäre es, wenn du dein test.c mal postest.

liggi
13.09.2007, 08:35
Danke für den Tipp.

so funktieunierte es:


#include "asuro.h"

int main(void)
{
Init();
MotorDir(FWD, FWD);
MotorSpeed(100, 100);
Sleep(216);
MotorSpeed(0, 0);
MotorDir(FREE, FREE);
while(1);
return 0;
}


so aber nicht:


#include "asuro.h"

int main(void)
{
Init();
MotorDir(FWD, FWD);
MotorSpeed(100, 100);
Msleep(3000);
MotorSpeed(0, 0);
MotorDir(FREE, FREE);
while(1);
return 0;
}

:-s

m.a.r.v.i.n
13.09.2007, 11:38
Hallo liggi,

in deinem Projektordner befindet sich wahrscheinlich noch eine alte asuro.h und asuro.c. Die müssen da natürlich weg. Es wird nur noch die asuro.h aus dem lib/inc Ordner und die asuro.c aus dem lib Ordner verwendet.

liggi
13.09.2007, 12:05
Danke :cheesy:
jetzt geht alles

damaltor
14.09.2007, 12:31
ih muss hier mal ein großes lob an sternthaler aussprechen, der sich oftdie zeit nimmt solche themen exzessiv und unendlich ausführlich sowie sehr verständlich zu beschreiben.das ist wirklich toll!

filth
14.09.2007, 13:20
Hi,

ich habe ein Problem mit der neuen Lib.
Das Makefile habe ich angepasst.

Fehlermeldung nach starten von make-lib:


C:\Programme\Atmel\AVR Tools\AsuroLib\lib>make install
cp libasuro.a C:/Programme/Atmel/AVR Tools/WinAVR/avr/lib/libasuro.a
cp: copying multiple files, but last argument `Tools/WinAVR/avr/lib/libasuro.a'
is not a directory
Try `cp --help' for more information.
make: *** [install] Error 1

Woran liegt es?

gruss
Alex

Sternthaler
14.09.2007, 18:07
@damaltor
Danke

Aber wer versteht das Problem von filth ?
Da steht doch "cp libasuro.a ...", also wird doch nur genau eine Datei angesprochen um sie zu kopieren!
Oder ist Windoof tatsächlich so doof und kann das BLANK in:
"C:/Programme/Atmel/AVR Tools...." wieder nicht als Pfadnamen interpretieren?

@filth
Als 'workaround' müsste aber folgendes helfen:
In dem Makefile der LIB, bei dir also unter "C:\Programme\Atmel\AVR Tools\AsuroLib\lib", die Stelle suchen, an der der cp-Befehl für die LIB steht.
Dann genau so wie beim kopieren der *.h-Dateien hinten beim Ziel das libasuro.a weglassen.
Das ganze steht direkt bei dem cp-Befehl für die *.h-Dateien.
Also in der Nähe von der Stelle, an der du
-4-> Suche: cp inc/$(HEADER) $(DIRINC)/$(HEADER)
---> Ändern: cp inc/$(HEADER) $(DIRINC)
machen solltest.

[Edit] Wenn Windoof den Pfad mit BLANK nicht interpretieren kann, wird es doch nichts nutzen auch beim cp der libasuro.a den Ziel-Namen wegzulassen.
Kennt hier einer ne Lösung? So mit "- oder '-Zeichen?

Viel Erfolg

filth
15.09.2007, 12:29
Hi,

ich habe das blank durch ein "-" ersetzt und nun funktioniert alles.
Windows halt ;)

Grüße
Alex

filth
15.09.2007, 13:46
Hi,

ich bin´s nochmal - das Kompilieren aht ja geklappt. Nun wollte ich die Lib mal testen, aber es scheint nicht zu gehen. Das folgende Programm:


#include "asuro.h"
#include <stdlib.h>


int main(void)
{
unsigned int data[2];
char buffer[8];
unsigned int Zahl1;


Init();
MotorDir(FWD, FWD);
MotorSpeed(120,120);
StatusLED(GREEN);



do {
OdometrieData(data);
PrintInt(data[0]);
}
while(1);

while(1);
return 0;
}

Kennt das PrintInt nicht.

Das Makefile im Entwicklungsverzeichniss:

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

Was ist da los?

Sternthaler
15.09.2007, 23:11
Hallo filth,
da bin ich aber froh, dass es wirklich win-Doof heißt.

m.a.r.v.i.n hatte am 13.09 schon an liggi folgendes geschrieben:

in deinem Projektordner befindet sich wahrscheinlich noch eine alte asuro.h und asuro.c. Die müssen da natürlich weg. Es wird nur noch die asuro.h aus dem lib/inc Ordner und die asuro.c aus dem lib Ordner verwendet.
Ich vermute auch bei dir noch die Dateien asuro.h und asur.c in deinem Projektordner.
Zur Erklärung:
Das in deinem Makefile im Entwicklungsordner angegeben "DIRINC = . " wäre hier dafür verantwortlich, dass dort zuerst nach den *.h-Dateien gesucht wird, und erst danach in den AVR-Verzeichnissen.
Dies ist deshalb aber sinnvoll, da du ja eventuell auch noch eigene *.h-Dateien schreiben möchtest, die dann natürlich in deinem Projektverzeichniss liegen.

filth
17.09.2007, 06:51
Hi,

Du hattest Recht, es waren noch Projektdateien im Ordner. Die habe ich entfernt, aber es funktioniert immer noch nicht :(

Hier die Ausgabe:


> "make.exe" all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os \ test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
test.c:1:19: asuro.h: No such file or directory
avr-gcc.exe: : No such file or directory
-------- 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 \ test.c -o test.o
avr-gcc: cannot specify -o with -c or -S and multiple compilations
make.exe: *** [test.o] Error 1

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

Gruss
filth

Sternthaler
17.09.2007, 18:02
@filth
Na, jetzt stehen wir erst einmal im Regen, da die Fehlerausgabe:
"test.c:1:19: asuro.h: No such file or directory"
nun aussagt, dass die asuro.h auch nicht im GCC-HOME\avr\include-Verzeichniss gefunden wird. Wahrscheinlich wird dann auch die libasuro.a nicht unter GCC-HOME\avr\lib gefunden beim späteren linken.

Nun also folgende Fragen an dich:
- Wo hast du das WinAVR installiert? (Blickrichtung 1: GCC-HOME)
Bitte vollen Pfad angeben.
- Was genau steht in deinem Projekt-Makefile? (Blickrichtung 3: PROG-HOME\dein-Unterverzeichnis)
Dieses solltest du hier mal posten.
(Ist das Makefile automatisch erstellt, oder hast du ein Muster aus der LIB benutzt?)

Und wenn du schon Makefiles postets, dann bitte auch gleich einmal das Makefile aus Blickrichting 2 (LIB-HOME), da dieses dafür verantwortlich ist alles notwendige aus der Asuro-LIB in die GCC-HOME/avr/...-Verzeichnisse zu kopieren. (Hier könnte ja schon ein Fehler stecken.)

mattsarz
18.09.2007, 10:57
Hi Leute,

auch ich habe die beschriebenen Änderungen vorgenommen, doch bei mir geht gar nix mehr! folgender fehlercode erscheint bei mir:


U:\desktop\Eigene Dateien\Asuro\FirstTry>make all
make: *** No rule to make target `asuro.h', needed by `schleichen.d'. Stop.

> Process Exit Code: 2


Der Fehler liegt also darin, dass asuro.h nicht im gleichen Ordner wie schleichen.c liegt... Aber ich dachte, dass der Anleitung entsprechend, dass neue asuro.h und asuro.c aus dem asurolib ordner automatisch verwendet werden müsste...

Doch auch wenn ich asuro.h und asuro.c im Verzeichnis belasse erscheint eine Fehlermeldung:


U:\desktop\Eigene Dateien\Asuro\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os VPATH=U:\desktop\Eigene Dateien\Asuro\AsuroLib/lib asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
avr-gcc.exe: VPATH=U:desktopEigene: No such file or directory
avr-gcc.exe: DateienAsuroAsuroLib/lib: No such file or directory
-------- 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 VPATH=U:\desktop\Eigene Dateien\Asuro\AsuroLib/lib schleichen.c -o schleichen.o
avr-gcc: cannot specify -o with -c or -S and multiple compilations
make: *** [schleichen.o] Error 1

> Process Exit Code: 2


Hier noch einige Angaben:

Pfad meiner C-Programme (Hab sie gerade im Verzeichnis gespeichert, welches ich von der CD kopiert habe):
U:\desktop\Eigene Dateien\Asuro\FirstTry

Pfad der lib:
U:\desktop\Eigene Dateien\Asuro\AsuroLib\lib


Vielen Dank im voraus!

m.a.r.v.i.n
18.09.2007, 14:10
Hallo,

Verzeichnisnamen mit Leerzeichen (wie z.B. "C:\Eigene Dateien")funktionieren mit den Makefiles derzeit nicht. Kopiere deine Projekte in ein Verzeichnis ohne Leerzeichen.

filth
18.09.2007, 18:11
@filth
Na, jetzt stehen wir erst einmal im Regen, da die Fehlerausgabe:
"test.c:1:19: asuro.h: No such file or directory"
nun aussagt, dass die asuro.h auch nicht im GCC-HOME\avr\include-Verzeichniss gefunden wird. Wahrscheinlich wird dann auch die libasuro.a nicht unter GCC-HOME\avr\lib gefunden beim späteren linken.

Nun also folgende Fragen an dich:
- Wo hast du das WinAVR installiert? (Blickrichtung 1: GCC-HOME)
Bitte vollen Pfad angeben.
- Was genau steht in deinem Projekt-Makefile? (Blickrichtung 3: PROG-HOME\dein-Unterverzeichnis)
Dieses solltest du hier mal posten.
(Ist das Makefile automatisch erstellt, oder hast du ein Muster aus der LIB benutzt?)

Und wenn du schon Makefiles postets, dann bitte auch gleich einmal das Makefile aus Blickrichting 2 (LIB-HOME), da dieses dafür verantwortlich ist alles notwendige aus der Asuro-LIB in die GCC-HOME/avr/...-Verzeichnisse zu kopieren. (Hier könnte ja schon ein Fehler stecken.)

Hi,

zu Deinen Fragen:

WinAVR Pfad: C:\Programme\Atmel\AVR-Tools\WinAVR
Mein Makefile (C:\Programme\Atmel\AVR-Tools\WinAVR\Entwicklung\):

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega8

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = test

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =




# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

VPATH=LIB-HOME/lib

# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs



# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref



# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm
LDFLAGS += -lasuro



# ---------------------------------------------------------------------------

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


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size

REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf

FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo -------- end --------




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@$(BEGIN)

finished:
@$(FINISH)

end:
@$(END)


# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi

sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi



# Display compiler version information.
gccversion :
$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000


coff: $(TARGET).elf
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
$(OBJDUMP) -h -S $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program

Welche Makefile sollte ich noch posten?

Grüße
Alex

Sternthaler
18.09.2007, 22:56
@filth,
mir fällt aktuell 1 Fehler auf:

Mache aus dem ==> VPATH=LIB-HOME/lib
dies hier --> C:/ASURO_SRC/AsuroLib/lib
Ich habe auf meiner Festplatte unter C:/ASURO_SRC/AsuroLib/ die Asuro-LIB gespeichert. Wenn sie bei dir an einer anderen Stelle liegt, dann muss natürlich dein Pfad eingesetzt werden.


Die Begriffe GCC-HOME, LIB-HOME und PROG-HOME aus meiner Beschreibung, sind nur Namen für Pfade auf deiner Festplatte. Zum Pfad gehört natürlich unter Windows auch der Laufwerksbuchstabe dazu. Hier ist nur ungewohnt, dass / anstatt \ benutzt werden sollte.
Vielleicht solltest du die Anleitung nochmal mit dem Bewustsein auf diesen Umstand lesen, dass ich Namen für Pfade vergeben habe. Zu Anfang rede ich in der Anleitung von drei Richtungen, in die du schauen sollst. Das ist nämlich das Hauptproblem an der ganzen Sache mit der LIB. Möglicherweise wird dann noch einiges klarer verständlich.

Posten solltest du das Makefile aus dem LIB-HOME-Verzeichnis. (Immer dran denken, das ist nur ein Name für einen Pfad auf deiner Festplatte.)
Möglicherweise hast du auch dort nicht den Pfad, sondern den Namen für den Pfad benutzt. Prüfe dies bitte schon einmal selber.


@mattsarz
herzlich willkommen im Forum.
So wie m.a.r.v.i.n schon schrieb, solltest du alle beteiligten Pfade erst einmal darauf untersuchen, ob Leerzeichen vorhanden sind.
Wie oben für filth schon angesprochen, sind das die Pfade zu GCC-HOME, LIB-HOME und PROG-HOME.
Zur Not solltest du diese neu installieren und dann auf alle Fälle Pfade ohne Leerzeichen nutzen.

filth
21.09.2007, 08:13
Hallo,

ich habe das makefile angepasst. Es geht immernoch nicht :(
Fehlermeldung:

> "make.exe" all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os \ C:/Programme/Atmel/AVR-Tools/AsuroLib/lib/asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
avr-gcc.exe: : No such file or directory
-------- 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 \ test.c -o test.o
avr-gcc: cannot specify -o with -c or -S and multiple compilations
make.exe: *** [test.o] Error 1

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

Makefile aus dem AsuroLib:


################################################## #############################
# 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/Atmel/AVR-Tools/WinAVR
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = $(DIRAVR)/avr/include
DIRLIB = $(DIRAVR)/avr/lib

LIB = asuro
LIBFILE = lib$(LIB).a
HEADER = *.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)

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


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

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



Makefile aus dem Entwicklungsverzeichniss:

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega8

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = test

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =




# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

VPATH=C:/Programme/Atmel/AVR-Tools/AsuroLib/lib

# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs



# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref



# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm
LDFLAGS += -lasuro



# ---------------------------------------------------------------------------

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


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size

REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf

FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo -------- end --------




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@$(BEGIN)

finished:
@$(FINISH)

end:
@$(END)


# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi

sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi



# Display compiler version information.
gccversion :
$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000


coff: $(TARGET).elf
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
$(OBJDUMP) -h -S $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program




Langsam verzweifle ich dran :(

damaltor
21.09.2007, 09:52
folgendes: im makefile steht der befehl um den compiler aufzurufen. suche folgende zeile:
avr-gcc -c -mmcu=atmega8 -I. -g -Os \ test.c -o test.o
entferne "-o test.o"
probiere es nochmal.
eine sicherheitskopie des makefiles wäre angebracht...

Sternthaler
28.11.2007, 22:58
Hallo zusammen, dies ist nur Spam.

Es gibt neue Link's im ersten Beitrag (https://www.roboternetz.de/phpBB2/viewtopic.php?t=33149), die eine Konfiguration im AVR-Studio aufzeigen.

Gruß Sternthaler

FredericStep
21.01.2008, 17:46
ich habe die beschriebenen änderungen auch vorgenommen doch wenn ich jetzt clean klicke steht da ...kann den pfad nicht finden... muss ich clean und make ändern?
is das ne dumme frage?
d.i.v. freddy

damaltor
21.01.2008, 23:18
wenn sich was geändert hat - ja...

FredericStep
22.01.2008, 05:54
ja und wie muss ich die ändern?

RobotNeu
25.09.2008, 16:58
Hello,

ich habe zuerst die vorgefertigten *.hex (unter examples) files benutzt um den Asuro zu flashen. Jetzt will auch eigene Programme schreiben und auch ein paar Werte in dem Header File myasuro.h ändern. Wie muss ich jetzt vorgehen, wenn ich die *.hex datei erstellen will? Ich habe libasuro.a und asuro.h in den entsprechenden Verzeichnisse kopiert. Ich nehme an, dass ich libasuro.a erstmal neuerstellen muss und dann erst nach .../WinAVR/avr/lib kopieren sollte. Wie erstelle ich das neu? Dann, wie kann ich ein Programm, das von mir selber geschrieben wurde auch maken (also *.hex datei erstellen). Welche Änderungen muss ich im makefile vornehmen?

hoffentlich habe ich mich klar ausgedrückt. danke im voraus.

damaltor
26.09.2008, 02:05
lies einfach den thread...

Sternthaler
26.09.2008, 18:08
und zwar vorne anfangen...

malediction
09.01.2009, 17:32
nabend allerseits...

nach langem lesen und try-and-error wollte ich jetzt auch mal ein paar fragen los werden.

ich habe den asuro noch nicht sehr lang. das zusammenbauen war kein problem, auch die ersten programme (mit der UR-version von WinAVR geschrieben) funktionierten ganz gut.

viellicht hätte ich nicht sofort dann hiermit starten sollen, aber jetzt isses eh zu spät ;)

also ich habe mir die aktuellste lib geladen (v.2.8rc1), dazu die aktuellste winAVR version (20081205), den neuesten flasher (1.51) und usb-treiber.

nun habe ich hier den gesamten thread gelesen und auch die hilfe, die direkt bei der lib dabei ist.
ich habe alle makefiles schritt für schritt angepasst, habe mir ein neues verzeichnis (das so genannte PROG-HOME) angelegt, dort einen unterordner erstellt und ein makefile reinkopiert und angpasst (wie beschrieben).
das aufrufen der mak-lib ging auch problemlos.

nun weiß ich jedoch ehrlich gesagt nicht, wie ich meine eigenen programme (test.c) compilieren und linken lassen kann.

ganz früher ging das halt mit den selbst angelegten tools im programmers notepad.
diese sind aber jetzt sinnlos geworden (jedenfalls für die neue lib, oder nicht?!).
ansich muss ich ja iwie das makefile in meinem unterordner aufrufen. aber wie?! ich bräcuhte dazu ja ansich eine batch. muss ich die erst noch erstellen oder wie kann ich die programme übersetzen?!

bisher war es so, dass wenn ich noch versucht habe die alte vorgehensweise zu nutzen, dass asuro dann nur alle leds aufleuchten ließ, was ich aber nicht programmiert hab. und das obwohl beim flashen alles problemlos lief... ich nehme aber mal an, dass das an dem drucheinander von neuer und alter lib liegt.

wenn ich jetzt meine eigenen programme übersetzen könnte, sollte es (wohl hoffentlich) wieder gehen...
nur wie gesagt: ich weiß nicht wie ich das anstellen soll...

kann mir bitte wer helfen?! auch wenn die frage iwie ziwmlich doof ist, aber hey... ;)

beste grüße,

malediction.

hai1991
10.01.2009, 11:51
hallo

wenn ich mit der neuen lib ein eigenes programm schreibe kopiere ich einfach einen ordner, zb. motortest und schreibe meinen code hinein

dann braucht man bei der neueren version von WinAVR nur unter Tools den befehl [WinAVR]Make All anklicken und der code wird in eine .hex datei umgewandelt. um ein makefile brauchst du dich da nicht mehr kümmern. und auch den make-befehl brauchst du nicht mehr

wichtig ist natürlich wieder, dass du vorm compilieren speicherst!!


ich hoffe, dir damit geholfen zu haben

malediction
10.01.2009, 14:27
danke, hai...

so hab ichs jetzt auch gemacht und so hats auch funktioniert.

leider kriege ich die datei jetzt nicht mehr geflasht... (MAN MAN MAN), aber das hab ich schon ein einem anderen thread angesprochen.

James C.
10.01.2009, 19:51
[@hai]
Danke! Genau das Problem hatte ich auch.


Ich habe mir nun die neuste WinAVR-Version heruntergeladen und installiert, doch auf dem Dekstop wurde keine Verknüpfung zum Programmers Notepad erstellt, und jetzt suche ich mich dumm und dämlich. (AAAHHHH!!! WARUM MUSS ES IMMER AN DEN BEKLOPPTESTEN SACHEN SCHEITERN!?!? ](*,) :cry: ) Man, das ist echt zum heulen... und das alles nur, weil mein Asuro nen Rechtsdrall hat und ich den GoTurn-Befehl brauche :( .
Falls mir jemand den Pfad zur Programmers-Notepad.exe verraten würde, wäre ich sehr dankbar.


[@malediction]
Keine Sorge, irgendwann schaffen wir das xD

James C.
10.01.2009, 21:35
Habs gefunden!
Dann mache ich mich jetzt mal an die Arbeit :)

€dit: Damn it! Es war so klar... es klappt nicht xD
Bei meinem programm soll der Asuro jetzt mithilfe der GoTurn-Funktion einfach nur geradeaus fahren, doch stattdessen blinkt die Status-LED bloß abwechselnd Rot und GRÜN.
Mein Asuro treibt mich noch zum Wahnsinn. :Haue \:D/

Hier ist das Programm:

#include "asuro.h"

int main(void)
{
Init();
StatusLED(YELLOW);
FrontLED(ON);
BackLED(ON,ON);
MotorDir(FWD,FWD);
GoTurn(230,230);
while(1);
return 0;
}




€dit 2: Verdammt! Jetzt klappt nichtmal mehr das compilieren! Wenn ich versuche, das oben genannte Programm in eine .hex umzuwandeln kommt folgende Fehlermeldung:

make.exe: ***No rule to make target `test.hex', needed by `all'. Stop.

Boah ey ich hab echt kein Bock mehr auf diesen f*pieps* Asuro -.-
*Asuro aus dem Fenster wirft*

malediction
11.01.2009, 18:39
hast du die makefiles wie beschrieben angepasst?

James C.
12.01.2009, 16:17
Ja habe ich gemacht. Hast du es denn nun hingekriegt? Wenn ja, könntest du mir vllt. nochmal kurz erklären, was nun zutun ist, wenn man die lib installiert und die makefiles angepasst hat? das wäre echt super. :oops:

malediction
12.01.2009, 16:40
ja also bei mir läuft jetzt alles.

ich habs so gemacht:
zuerst die lib runtergeladen (v2.8rc1), entpackt (an einen ort, wo NICHT winAVR ist).
dann die neueste WinAVR geladen und installiert.

dann hab ich die makefiles so wie von sternthaler beschrieben angepasst (das makefile im lib-ordner und dann das file im examples/firsttry ordner).

dann hab ich die lib noch mal neu übersetzt (auch von sternthaler beschrieben mit der eingabeaufforderung).

jetzt bist du ansich soweit, dass es gehen müsste.

ich mach das mit dem programmieren jetzt immer so:
ich ändere die test.c-datei im firsttry ordner. dazu kannst du ganz einfach im programmers notepad das projekt firsttry aufrufen.

in der test.c-datei steht eh noch nix außer dem skelett.
dann hier fleißig programmieren, die datei speichern und dann auf tools->[WinAVR]MakeAll klicken.

er übersetzt dir deine datei im firsttry-ordner und du erhälst in diesem ordner dann eine test.hex-datei. diese dann auf asuro flashen und es sollte gehen.

allerdings musst du wirklich BEIDE makefiles (im lib- und im firsttry-ordner) angepasst haben. wenn du das richtig gemacht hast und die lib noch mal neu compiliert hast, müsste alles gehen.

viel erfolg! du schaffst das!

[-o<

fog.sliver
22.12.2009, 11:11
EDIT:
ich habe winavr auf C:/WinAVR
die asuro lib auf C:/asuro-lib/lib
und die programme auf D:\2_asuro\ASURO_src\FirstTry

ich habe die pfade in den beiden makefiles angepasst und backslashes \ durch / ersetzt.
danach habe ich make-lib.bat im lib ordner zum maken ausgefüht. hat auch geklappt.

Doch wenn ich dann mit PorgrammersNotepad mein test.c im D:\2_asuro\ASURO_src\FirstTry maken möchte komtm folgendes:

> "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=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
test.c:1:19: error: asuro.h: No such file or directory
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090313) 4.3.2
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.

make.exe: *** No rule to make target `test.hex', needed by `all'. Stop.

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


er findet die asuro.h ja nciht (test.c:1:19: error: asuro.h: No such file or directory), wahrscheinlich, weil ich die aus PROG-HOME mit asuro.c gelöscht habe, da er die beiden asuro dateien, ja jetzt aus der lib nehmen soll.

EDIT: ich stelle hier einfach mal die makefiles rein. cih hoffe ihr könnt mri dann helfen:

makefile von asuro-lib

################################################## #############################
# 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 printf.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:/WinAVR
#DIRAVR = /usr/local/avr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = C:/asuro_lib/lib/inc
DIRLIB = C:/asuro_lib/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/*)



makefile von firsttry (PROG-HOME):

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega8

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = test

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =




# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)



# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs



# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref



# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm



# ---------------------------------------------------------------------------

# Define directories, if needed.
DIRAVR = c:/WinAVR
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = C:/asuro_lib/lib/inc
DIRLIB = C:/asuro_lib/lib


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size

REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf

FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo -------- end --------




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@$(BEGIN)

finished:
@$(FINISH)

end:
@$(END)


# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi

sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi



# Display compiler version information.
gccversion :
$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000


coff: $(TARGET).elf
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
$(OBJDUMP) -h -S $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program




Die Directories habe ich ja angepasst, aber es scheint trotzdem nicht zu funktionieren.

EDIT:
Ist schon okay. Habe nochmal alels deintsalliert und diesmal die neuste lib genommen also 280rc1. Da lag zum glück auch eine install.txt bei. Die at alle fragen gelöst ;)

Sternthaler
23.12.2009, 00:20
Hallo fog.sliver,

auch du meine Güte. So schnell wie du eine Lösung gefunden hast, kann ich mich ja gar nicht hier anmelden ;-).

Um noch kurz eine kleine Info zu geben:
- Die asuro.c wird nicht in der LIB mit eingebunden.
Nur die unter OBJECTS im LIB-Makefile aufgeführten Dateien sind da enthalten.
- Die asuro.h sollte schon im LIB/inc-Verzeichnis vorhanden sein, da sie auch von deinen Programmen gefunden werden muss. Sie wird da immer mit einem "#include <asuro.h>" gesucht.
- In meinem ersten Beitrag, habe ich auch einige Links zu Hilfen bei der Konfiguration im AVRStudio angegeben. Eventuell musst du so etwas auch im "ProgrammersNotepad" einstellen. Den kenne ich aber nicht wirklich.

Ansonsten ist ja nun alles bestens.
Weiterhin viel Erfolg und vor allem Spaß mit dem Asuro.

Gruß Sternthaler

fog.sliver
23.12.2009, 09:33
Das einzige was ich nun am makefile ändern musste, war der Pfadzu winavr. Danach hat alles funktioniert.

Dankeschön Sternthaler, Spaß werde ich viel ahben, da robotik michs chon imemr interessiert hatte und ich nächstes Jahr auch ElektroTechnik mit Informationstechnik studiere :)

Gruß, fog.sliver

the_muck
08.02.2010, 18:39
Ich hänge mich hier mal ran da ich meinen Asuro nach einigen Jahren gerade wieder belebe :D.

Ich habe mir die AsuroLib V2.8.0 geladen und entpackt, soweit funktioniert es auch. Neuen Atmega8 ins STK500 mit AVR Studio eine Beispiel (LineTest) geöffnet überspielt und TAAAADAAAA er lübt...

Ji ha denkt sich der muck und Programmiert eine Switch Funktion mit ein, TAAAADAAAA es geht...

Jetzt wollte ich mit EncoderInit (); arbeiten und habe sie mit eingebunden und zack geht nix mehr, auch das Beispiel EncoderTest kann ich nicht Compilieren :(. alles andere scheint zu gehen.

Das ist der Fehler


C:\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr \bin\ld.exe: BFD 2.16.1 + coff-avr-patch (20050630) internal error, aborting at ../../binutils-2.16.1/bfd/reloc.c line 444 in bfd_get_reloc_size

Ich blicke nicht was es ist :(

Danach ist gesamte Projekt defekt und man muss es komplett neu machen :(.

Valen
08.02.2010, 20:50
Welcher version von WinAVR benutzt du? Die version von der Asuro-cd (3.3 oder so )ist ganz alt. Heute zu tage gibts 4.3. Oder vielleicht schon höher.

the_muck
08.02.2010, 21:05
Hallo,
ich nutze AVR Studio 4.13, habe es jetzt hin bekommen in dem ich das Projekt FirstTry genommen habe, und vor dem ersten Compilieren EncoderInit (); eintrug. Beim ersten Compilieren wurden 2 neue Dateien von AVR Studio erstellt, wenn man dann noch nicht EncoderInit (); eingetragen hat will AVR Studio wieder eine neue Datei beim 2. Compilieren erstellen und die alte überschreiben, bei der Frage "JA/NEIN" konnte man ja anklicken aber das Fenster kommt sofort wieder, erst wenn man NEIN an klickte ging es weg aber das Projekt wurde nicht richtig Compiliert.

Na ja nun geht es auf jeden Fall :D

mize03
11.02.2010, 16:59
Hallo Leute,


ich habe heute Nacht bis um 3 Uhr am Rechner gesessen und versucht die neue Lib zum laufen zu bringen, bin aber immer gescheitert.
Habe das selbe Problem wie mattsarz und James C.

Bekomme folgende Fehlermeldung:

> "make.exe" all
-------- 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.

make.exe: *** No rule to make target `folgelinie.hex', needed by `all'. Stop.

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


Wäre echt super von euch wenn ihr euch meinem Problem anschauen könntet :)
Am besten beschreibe ich euch einmal was ich unternommen habe:

1. Ich habe die Datei F:\ASURO\ASURO_lib\lib\libasuro.a in den Ordner F:\ASURO\WinAVR\avr\lib kopiert

2. Dann habe ich die F:\ASURO\ASURO_lib\lib\Makefile Datei geändert

3. Habe ich die ganzen Headerdateien unter F:\ASURO\ASURO_lib\lib\inc in den Ordner F:\ASURO\WinAVR\avr\include kopiert

4. F:\ASURO\ASURO_lib\examples\EncoderTest\Makefile Kopiert nach F:\ASURO\Eigene_Programme und natürlich auch geändert

5. Habe ich noch mit der Eingabeaufforderung das die Datei F:\ASURO\ASURO_lib\lib\make-lib ausgeführt

So...ich glaub das war alles ;)


Noch zur Ergänung:

Ich benutze die neuste Version von WinAVR (WinAVR-20100110)

Und hier noch die Codes für die Makefile's

1.Makefile (F:\ASURO\ASURO_lib\lib\Makefile)

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

## General Flags
MCU = atmega8
F_CPU = 8000000UL
TARGET = libasuro
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 adc_low.o encoder.o encoder_low.o i2c.o leds.o lcd.o\
motor.o motor_low.o my_motor_low.o print.o printf.o rc5.o sound.o switches.o\
time.o uart.o ultrasonic.o version.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

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

LIB = asuro
LIBFILE = $(TARGET).a
HEADER = *.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)

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


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

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



2.Makefile(F:\ASURO\Eigene_Programme)

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega8

F_CPU = 8000000UL

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = folgelinie

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s

# additional Include path for libraries
#LIBPATH = C:/ASURO_SRC/AsuroLib/lib
LIBPATH = ../../lib
LIBFILE = asuro

# additional include path for header files
INCPATH = $(LIBPATH)/inc

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c linienlesen.c linienauswerten.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =




# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)

# Virtual path for Source Files
VPATH=F:/ASURO/ASURO_lib/lib

# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs



# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += -L$(LIBPATH)



# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm
LDFLAGS += -l$(LIBFILE)



# ---------------------------------------------------------------------------

# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size

REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf

FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo -------- end --------




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@$(BEGIN)

finished:
@$(FINISH)

end:
@$(END)


# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi

sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi



# Display compiler version information.
gccversion :
$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000


coff: $(TARGET).elf
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
$(OBJDUMP) -h -S $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program



soooo... ich hoffe ich habe jetzt alles und einer von euch kann mir helfen weil ich echt total am Verzweifeln bin ](*,)

Schonmal vielen Dank für eure Antworten :)


Güße mize03

the_muck
11.02.2010, 17:39
Ich bin da leider nicht so Fit, aber warum kopierst du so viel hin und her?

Mach es doch einfach so wie hier unter Neue Projekte beschrieben.

http://www.asurowiki.de/pmwiki/pub/html/main.html

Ging bei mir sofort bis auf den Fehler sieh oben ;).

mize03
11.02.2010, 18:12
Vielen Dank für deine schnelle Antwort,
bin aber aus dem Link nicht wirklich schlau geworden :(
habe alles de- und wieder installiert und dann habe ich in der Makefile die Änderung des LIBPATH vorgenommen.

Funktioniert aber leider immer noch nicht :(
Es ist schon das Makefile gemeint, welches bei dem Programmen im Ordner ist oder?

Grüße mize03

Valen
11.02.2010, 18:20
1. Ich habe die Datei F:\ASURO\ASURO_lib\lib\libasuro.a in den Ordner F:\ASURO\WinAVR\avr\lib kopiert

...

3. Habe ich die ganzen Headerdateien unter F:\ASURO\ASURO_lib\lib\inc in den Ordner F:\ASURO\WinAVR\avr\include kopiert Wo genau steht es das du das machen soll?

mize03
11.02.2010, 18:27
...
Und auch der Linker muss wissen, wo er die LIB-Datei libasuro.a finden kann.
Dies weiß der Linker auch von ganz alleine, wenn man die libasuro.a an 'die richtige' Stelle kopiert hat. Ist eben ein weiteres 'Lieblingsverzeichnis'.
Dies ist das Verzeichnis: GCC-HOME\avr\lib
-> Nicht verwechseln mit: GCC-HOME\lib
...
-3- Optimierung: Es sind mittlerweile ja schon einige Header-Dateien für
die Asuro-LIB unter LIB-HOME/inc abgelegt. Also macht es auch Sinn, dass
alle Header in das 'Lieblingsverzeichnis' kopiert werden. Dafür der *

-4- Jetzt müssen die unter -3- angegeben Dateien noch in das
Lieblingsverzeichnis kopiert werden.
Bei einer einzelnen Datei (asuro.h) ging der alte Befehl noch.
Bei mehreren Dateien (*.h) dürfen wir nur das Zielverzeichnis angeben.
...


Das müsste es sein ;)

Grüße mize03

Valen
11.02.2010, 18:36
Ok, aber du verwendest doch die lib 2.80? Diesen thread geht uber 2.7. Inzwischen sind einiger verbesserungen/vereinfachungen gemacht in das prozes. Bitte lies (immer) das install.txt in dem .zip datei von den 2.80 lib.

http://sourceforge.net/projects/asuro/files/AsuroLib/AsuroLib%20V2.8.0/AsuroLib-v280rc1.zip/download

mize03
11.02.2010, 18:43
WOHA Wahnsinn vielen Dank :):):):)

endlich;)

Tausendacht
11.08.2011, 12:45
Hallo,
ich bin noch relativ neu hier und hab nen (hoffentlich) kleines Problem mit der Installation der Library.

Ich habe mir die neuste WinAVR Version runtergeladen und installiert, selbiges mit der Library (v280).

Anschließend habe ich alles sorgfältig so abgeändert und durchgeführt wie es oben im Thread beschrieben ist.

Daraufhin habe ich mir in meinem "PROG-Home"-Verzeichnis einen neuen Ordner erstellt, habe dort eine neue .c-Datei mit einem kleinen Programm, sowie das Makefile und die alte "make_all"-batch datei abgelegt.

Im Programmers Notepad habe ich die batch-Datei mit neuem Verzeichnis unter Tools eingebunden.

Beim Compilieren kommt nun folgende Fehlermeldung:




> "C:\Users\Mein_Name\Documents\ASURO\Test1\make_all. cmd"

C:\Users\Mein_Name\Documents\ASURO\Test1>\utils\bin\make.exe all
Das System kann den angegebenen Pfad nicht finden.

> Process Exit Code: 1
> Time Taken: 00:00


Was habe ich falsch gemacht? Darf ich die batch-Datei nicht mehr verwenden? Wie rufe ich dann aber das Makefile auf?

Ich hoffe Ihr könnt mir helfen.
Vielen Dank

Tausendacht
12.08.2011, 08:09
der Fehler oben hat sich soweit erledigt, allerdings komt nun noch

make: *** No rule to make target `test.hex', needed by `all'. Stop.

Laut Doku kann es daran liegen dass er eine Header-Datei nicht finden kann? Wo sollte diese Datei fehlen? Ich hab außer den Pfad im Makefile nichts verändert.

EDIT:
Problem gelößt. Fehler lag im Pfad für die Library. Ein Unterordner des Pfads war .../Program Files/... mit dem auseinander geschriebenen hatte er (trotz Angabe in Hochkommas (") ) Probleme...
Habe die Library in einen Ordner ohne auseinander geschriebene Unterordner gepackt und es läuft.