Forum: Mikrocontroller und Digitale Elektronik Erstes Programm für Mikrocontroller


von Kai (Gast)


Lesenswert?

Hallo

Ich habe Heute mit Hilfe des AVR GCC Tutorials mein erstes Programm, ein 
Lauflicht für einen Mikrocontroller geschrieben. Dazu habe ich ein 
makefile erstellt und wollte mir damit nun eine .hex Datei erzeugen, 
welche ich in den Controller spielen kann.

Wenn ich nun in der Eingabeaufforderung in den Ordner gehe wo die 
Dateien main.c und makefile.bak sind und den Befehl "make all" ausführe, 
bekomme ich immer die Fehlermeldung: No rule to make target 'all' . Stop

Was mache ich falsch?

von Boxi B. (boxi)


Lesenswert?

all fehlt?

von Kai (Gast)


Lesenswert?

Ja was wäre denn "all"?

Im Tutorial steht halt nur:

D:\tmp\gcc_tut\quickstart>dir

 Verzeichnis von D:\tmp\gcc_tut\quickstart

28.11.2006  22:53    <DIR>          .
28.11.2006  22:53    <DIR>          ..
28.11.2006  20:06               118 main.c
28.11.2006  20:03            16.810 Makefile
               2 Datei(en)         16.928 Bytes

Nun gibt man make all ein. Falls das mit WinAVR installierte Programmers 
Notepad genutzt wird, gibt es dazu einen Menüpunkt im Tools Menü. Sind 
alle Einstellungen korrekt, entsteht eine Datei main.hex, in der der 
Code für den AVR enthalten ist.

D:\tmp\gcc_tut\quickstart>make all


Klappt nur bei mir nicht. Wahrscheinlich weil ich das unter WINXP 
versuche. Wie compiliert ihr den eure Files?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Hänge deine problematische Dateien bei solchen Fragen an. Dann geht es 
mit den Antworten fixer.

In der Artikelsammlung ist ein Beispiel Makefile
http://www.mikrocontroller.net/articles/Beispiel_Makefile

Im ersten Makefile ist die Regel für all wie folgt:

# Default target.
all: begin gccversion sizebefore build sizeafter end

Schau nach, ob das in deinem Makefile so ähnlich ist.

von Niels H. (monarch35)


Lesenswert?

Kai wrote:

> Wenn ich nun in der Eingabeaufforderung in den Ordner gehe wo die
> Dateien main.c und makefile.bak sind und den Befehl "make all" ausführe,
> bekomme ich immer die Fehlermeldung: No rule to make target 'all' . Stop

"makefile.bak" ?! Die sollte eigentlich "Makefile" heissen.

Jedenfalls deutet deine Fehlermeldung darauf hin, daß kein Makefile 
vorhanden ist.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Nein, das heisst dass das Target "all" im Makefile nicht vorhanden ist. 
Man kann ein anderes default-target waehlen, indem man:

nothing-specified: target

im Makefile angibt.

von Niels H. (monarch35)


Lesenswert?

Michael G. wrote:
> Nein, das heisst dass das Target "all" im Makefile nicht vorhanden ist.

Geh mal in irgendein Verzeichnis ohne Makefile und gib "make all" ein. 
Bei mir kommt
1
C:\Dokumente und Einstellungen\abcd>make all
2
make: *** No rule to make target `all'.  Stop.

sowohl unter Windows als auch unter Linux!

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

michael@quark:~> make all
make: *** No rule to make target `all'.  Stop.
michael@quark:~> make
make: *** No targets specified and no makefile found.  Stop.

von Jonas (Gast)


Lesenswert?

>>>> Wie compiliert ihr den eure Files?

damit:

http://www.myavr.de/download/myAVR_WorkpadPLUS_Demo.exe

gruß J.

von David M. (md2k7)


Lesenswert?

Hallo,

ich persönlich bevorzuge es auch, wenn mir das Makefile automatisch 
erzeugt wird. Das AVR-Studio von Atmel kann das ebenfalls.

Grüße

von Niels H. (monarch35)


Lesenswert?

Michael G. wrote:
> michael@quark:~> make all
> make: *** No rule to make target `all'.  Stop.
> michael@quark:~> make
> make: *** No targets specified and no makefile found.  Stop.

und ich Quote nochmal das erste Posting des OP:

> [..] und den Befehl "make all" ausführe,
> bekomme ich immer die Fehlermeldung: No rule to make target 'all' . Stop

Folglich: Makefile fehlt! Nix anderes!

von Simon K. (simon) Benutzerseite


Lesenswert?

Niels Hüsken wrote:
> Michael G. wrote:
>> michael@quark:~> make all
>> make: *** No rule to make target `all'.  Stop.
>> michael@quark:~> make
>> make: *** No targets specified and no makefile found.  Stop.
>
> und ich Quote nochmal das erste Posting des OP:
>
>> [..] und den Befehl "make all" ausführe,
>> bekomme ich immer die Fehlermeldung: No rule to make target 'all' . Stop
>
> Folglich: Makefile fehlt! Nix anderes!

Also wenn ich das richtig verstehe, heißt die Meldung
1
No rule to make target 'all' . Stop
dass bei dem aktuellen Aufruf von Make kein Target "all" gefunden werden 
kann. Unabhängig davon, ob das Makefile existiert oder nicht. Sprich: 
Selbst wenn ein Makefile ohne das Target "all" existieren würde, käme 
exakt die Gleiche Fehlermeldung.

von Niels H. (monarch35)


Lesenswert?

Simon K. wrote:

> kann. Unabhängig davon, ob das Makefile existiert oder nicht. Sprich:
> Selbst wenn ein Makefile ohne das Target "all" existieren würde, käme
> exakt die Gleiche Fehlermeldung.

Nach der Beschreibung des OP ist das aber eher unwahrscheinlich. 
Wahrscheinlicher ist, das das Makefile ganz fehlt.

von Falk B. (falk)


Lesenswert?

@ Kai (Gast)

>Wenn ich nun in der Eingabeaufforderung in den Ordner gehe wo die
>Dateien main.c und makefile.bak sind und den Befehl "make all" ausführe,

Was soll diese Steinzeitmethode als Anfänger ? Nimm AVR Studio und 
compiliere damit.

MFG
Falk

von Kai (Gast)


Lesenswert?

So, nun funktioniert es. Danke sehr!

Das Problem wahr tatsächlich die Endung .mak. Diese entfernt und schon 
ging es.


Nun hab ich eine Frage zu der Größe des erzeugten .hex Files. Wenn ich 
nun mein einfaches Blinkprogramm für den ATMega16 compiliere, ist dies 
ca. 14kB groß.

Wenn ich nun im Makefile den Controllertyp ändere, ist das .hex File nur 
noch 6kB groß. Kann mir einer sagen warum das so ist?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Grösse der HEX-Datei ist nicht ausschlaggebend, ob die Datei in den 
µC passt.

Die HEX-Datei enthält den binären Inhalt für den µC in codierter Form 
und ist deshalb immer wesentlich fetter als das binäre Speicherabbild.

Und weil fast immer der komplette Inhalt des µC in der HEX-Datei 
abgelegt wird, hängt die Grösse auch grundsätzlich von der FLASH-Grösse 
des jeweiligen µCs ab.

von Kai (Gast)


Lesenswert?

Vielen Dank!

von Niels H. (monarch35)


Lesenswert?

Simon K. wrote:

> Also wenn ich das richtig verstehe, heißt die Meldung
>
1
No rule to make target 'all' . Stop
> dass bei dem aktuellen Aufruf von Make kein Target "all" gefunden werden
> kann.

Mir fällt gerade noch etwas dazu ein:
Als Programmierer lernt man irgendwann die Bedeutung einer Fehlermeldung 
zu ignorieren, weil man selber aus eigener Erfahrung weiss, daß man 
nicht für jede Eventualität eine eigene Fehlermeldung mit eigenem 
Fehlertext einbauen kann.

Die Fehlermeldung "No rule to make target 'all' . Stop" sagt mir: Hier 
ist irgendwas ganz am Anfang des Prozesses etwas falsch gelaufen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.