Forum: Mikrocontroller und Digitale Elektronik Makefile ändern


von Carlito S. (carlito_s)


Angehängte Dateien:

Lesenswert?

Hi
Habe hier ein Makefile,aber nicht den passenden Programmer dazu
Ich hab zwar etliche programmer,aber jetzt keine Lust mehr weitere zu 
bauen.
Was muss ich denn am file ändern,damit nur ein .Hexfile erstellt 
wird,welches ich dann mit einem Programmer meiner Wahl übertragen kann?
Habe  hex: $(TARGET).hex eingetragen,das funktionierte aber nicht.Auch 
die ganze Zeile mit usbtiny usw entfernt,ging aber auch nicht

Aus dem Makefiletutorial hier auf der Seite,werde ich leider auch nicht 
schlau.
Habe das M.file mal angehängt

von tom (Gast)


Lesenswert?

avr-objcopy macht dir aus einem elf file ein hex.

cmd line optionen bitte selbst nachlesen mit avr-objcopy -? .

von carlito_s (Gast)


Lesenswert?

Vielen Dank tom,für den Tip.
Der brachte mir aber leider nix ein,außer
2Stunden sitzen am PC bei dem schönen Wetter
Kriege es nicht hin.

Da kommt immer ne Fehlermeldung:interleave must positiv.
Außerdem wurde beim Kompilierversuch zum mclock.o,ja auch noch das file 
mclock.map erzeugt,da weis ich ja grad mal garnicht was ich da mit 
machen soll.Da liest man sich auch nicht nmal eben schnell ein,im 
Gegenteil
das bedeutet wieder tagelanges Experimentieren mit unbekanntem Ausgang
Das ist scheinbar das Ziel jeden Programmierers: Unbedarfte in den 
Wahnsinn zu treiben lol
Denke mal,daß ich mir den usbtiny doch bauen sollte,ist in 2-3St 
gemacht,damit wird es dann ja hoffentlich gehen.


LG

von Tip (Gast)


Lesenswert?

Carlito Schnipp schrieb:
> Habe hier ein Makefile,aber nicht den passenden Programmer dazu
> Ich hab zwar etliche programmer,aber jetzt keine Lust mehr weitere zu
> bauen.

Das hat mit deinem Programmer gar nichts zu tun. Der ist nur dafür 
zuständig, anhand der Daten im Hexfile deinen Prozessor zu 
programmieren.

Du hast ein Compiler/Linker Problem.

von SF (Gast)


Lesenswert?

Da du ja sowieso compilieren möchtest, hast du bestimmt den WinAVR 
Compiler bei dir installiert. Lösche am besten das makefile und kopiere 
dir aus <laufwerk>:\WinAVR\sample das Beispiel makefile.

Das öffnest du in einem Texteditor und änderst jetzt die Zeile mit MCU= 
auf
1
# MCU name
2
MCU = attiny2313

danach änderst du noch die Zeile mit TARGET= auf
1
# Target file name (without extension).
2
TARGET = mclock

du kanst auch noch die Zeile mit FCPU= auf
1
F_CPU = 1000000

ändern.

Jetzt hast du ein makefile, das dir eine *.hex und eine *.eep erzeugt. 
Damit müsstest du jetzt deinen Programmer (welchen du auch immer hast) 
füttern können.

von carlito_s (Gast)


Lesenswert?

Tip schrieb:
> Das hat mit deinem Programmer gar nichts zu tun. Der ist nur dafür
> zuständig, anhand der Daten im Hexfile deinen Prozessor zu
> programmieren.
>
> Du hast ein Compiler/Linker Problem.

Aha!
Ich hab das jetzt so verstanden,daß beim Kompilieren,das kompilat 
aufgrund der Avrdudezeile direkt auf den Zielprozessor geschrieben wird

Wenn es sich aber so verhält wie Du sagst,dann wäre das Sourcefile 
fehlerhaft Bzw unvollständig.
Also ne ganz andere Ausgangssituation.

von carlito_s (Gast)


Lesenswert?

Öh quatsch,ich meine natürlich das Makefile

von Hermann-Josef M. (hermann-josef)


Angehängte Dateien:

Lesenswert?

Hallo carlito_s,

ich habe Dir mal das makefile geändert und angehägt.

Aber wenn Du nicht in diese Untiefen steigen möchtest, das rate ich Dir, 
den Vorschlag von SF zu folgen. Auch mfile (v. Jörg Wunsch) ist ein 
empfehlenswerter Makefile-Generator für den AVR.

Viel Erfolg
Hermann-Josef

von carlito_s (Gast)


Lesenswert?

Hermann-Josef Vielen Dank,für Deine Bemühungen.
Ja diese Untiefen,werde ich wohl früher oder später ausloten müssen,es 
ist nur so,daß ich momentan schon soviel Neues 
habe(Elektronik,eagle,soweiter)
Und dann noch µC ,und Programmieren,damit bin ich ehrlich gesagt etwas 
überfordert zu viel input wie man so schön sagt.
Denn es soll ja auch Spass machen und nicht nur Frust,ist quasi ne 
Freizeitbeschäftigung.

Zum Makefile:
Danke dafür,aber leider läufts immernoch nicht
(make.exe: *** [mclock.elf] Error 1)
Was mich auch wundert,ist:
Ich habe an mehreren Stellen gelesen,daß wenn das quellfile nicht main 
heist,es immerwieder Probleme geben soll.
Ich frage mich eh,wieso im Netzt meist sourcecode upgeloadet wird,statt 
ausführbarer files.
Es hat ja nicht jeder ein toolchain(so heist´s glaube) zur Verfügung.In 
meinem Fall z.B. könnte ich ein Bascomfile garnicht kompilieren wenns 
größer als 4kb ist,da ich nur die Demoversion besitze und als 
Ottormalmensch auch nie die Vollversion kaufen würde.

Bei dem programm,handelt es sich übrigens um eine Uhr,mit deren hilfe 
ich meine zammgelötete 8x8Matrix ausprobieren wollte

LG
Carlito

von SF (Gast)


Lesenswert?

>>Ich habe an mehreren Stellen gelesen,daß wenn das quellfile nicht main
>>heist,es immerwieder Probleme geben soll.
Das stimmt so nicht. Aber das makefile sollte natürlich zum Quellcode 
passen. Wenn man seine C-Datei mclock.c nennt aber dann im makefile 
versucht eine main.c Datei zu kompilieren, dann klappt das natürlich 
nicht.

Aber das ist hier nicht der Fall. Das makefile Hermann-Josef 
funktioniert.

Du hast ein anderes Problem. Eventuell ist WinAVR bei dir nicht richtig 
installiert, oder du hast mehrere make.exe am Start oder du rufst make 
nicht richtig auf...

Möglichkeiten was falsch zu machen gibt es leider viele.

So sieht es aus wenn alles funktioniert:
1
make -f makefiletest
2
avr-gcc -Os -Wall -g -mmcu=attiny2313 -ffunction-sections -fdata-sections -fno-i
3
nline-small-functions -c mclock.c
4
mclock.c:218: warning: return type of 'main' is not 'int'
5
avr-gcc -Os -Wall -g -mmcu=attiny2313 -ffunction-sections -fdata-sections -fno-i
6
nline-small-functions -DF_CPU=1000000UL -o mclock.elf mclock.o -Wl,-Map=mclock.m
7
ap,--cref -Wl,--relax -Wl,--gc-sections
8
avr-strip mclock.elf
9
avr-size --format=sysv mclock.elf
10
mclock.elf  :
11
section   size      addr
12
.text     2124         0
13
.data       16   8388704
14
.bss        20   8388720
15
.eeprom     86   8454144
16
Total     2246

PS: Hier scheint dein Quellcode ja herzukommen: 
http://www.simpleavr.com/avr/multimode-clock
und da kann man auch eine *.hex und eine *.eep runterladen ...

von Hermann-Josef M. (hermann-josef)


Lesenswert?

Hallo Carlito_s,

das ist merkwürdig, ich hatte das makefile mit einem anderen Source-Code 
ausprobiert. Welche Toolchain hast Du denn?

Nee, der Namen des Programms sollte i.A. keine Rolle spielen.

Bei Makefiles musst Du aufpassen, dass an der richtigen Stelle 
Tabulatoren anstelle von Leerzeichen verwendet werden, in Deinem 
Original war es der Fall und in dem geänderten zumindest noch vor dem 
Upload.

Also etwa so:
target:  source(s)
-------> command

Möglicherweise fehlt auch ein Kommando, welches aufgerufen werden soll, 
beispielsweise könnten die Tools (avr-gcc etc.) nicht im PATH sein.

Gruß
Hermann-Josef

von SF (Gast)


Lesenswert?

Ich sehe gerade das bei makefile von Herman-Josef leider doch keine 
*.hex und *.eep erstellt wurden. Wenn man im makefile
1
all: $(TARGET).elf
zu
1
all: $(TARGET).elf $(TARGET).hex $(TARGET).eep
ändert, dann werden die Dateien auch wirklich erstellt. (Deshalb ist es 
besser man nimmt das Beispiel makefile von WinAVR... als Basis von 
Änderungen.)

Aber wie auf der Webseite http://www.simpleavr.com/avr/multimode-clock 
beschrieben, produziert die neuste Version des WinAVRs etwas größeren 
Code, so das es nicht mehr in den Mikrokontroller passt (.text 2124 ist 
leider größer als 2048)!

Also am besten einen älteren Compiler verwenden oder den Quellcode 
abspecken.

von Hermann-Josef M. (hermann-josef)


Lesenswert?

@SF: Ja, Du hast recht, hatte make -f makefile avrledtest.hex getippt.

Das makefile auf der von Dir zitierten Seite enthielt übrigens noch das 
avr-objcopy.

Hermann-Josef

Nachtrag: Wurde aber erst heute dort geändert...
1
[April 26th, 2011] replace makefile, the old one does not make hex output, just elf, now it makes both.

von carlito_s (Gast)


Lesenswert?

@SF
Das ist zwar nicht die Seite,von der ich es habe,aber in der Tat,ist es 
genau das Projekt.Von dort werd ich das hex mal runterladen

@Hermann-Josef
Also ich habe das Atmelstudio und das winavr.Über die Installation,kann 
ich nix sagen,hat ein Bekannter hier aufgespielt.
Normalerweise,erstelle ich in Winavr ein neues Projekt,in dem Ordner,wo 
ich das Main.c und das Makefile drinn habe,adde die beiden teile und 
schaue im Makefile rein und ändere da evntl den µc,den Takt und den 
programmer,stell ich auf stk500
Dann drück ich auf make clean,make all,make programm und fertig.Auch 
wenns manchmal nicht progtrammiert,ist meistens ein hexfile erzeugt 
worden,das ich dann mit dem avrstudio brennen kann

von carlito_s (Gast)


Lesenswert?

Hätte noch ne Frage
Könnte ich den einen anderen µc nehmen z.B.atmega48 oder Atmega8,bei 
entsprechender pinbelegung? und reicht es,wenn man z.B.das Makefile 
entsprchend ändert und die fuses?
Oder läuft das dann nur auf dem attiny?
Weil die Ports,hat der ja auch

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.