Forum: Compiler & IDEs NEHMT AVR-GCC


von Divison (Gast)


Lesenswert?

Ich habe vor der Entscheidung gestanden, welchen Compiler ich nun nehmen
soll. Den teuren CodeVision oder den freien avr-gcc.
Ich hab hier ewig viele Diskusionen gelesen. Der eine sagt dies, der
andere sagt das.... usw.
Und nun kann ich sagen, das es am Anfag mit dem avr-gcc etwas SCHWIERIG
ist, um nicht zu sagen ULTRA BESCHI****.
Hab mich durch makefiles gekämpft und beinahe alles an Elektronik hier
in meinem Zimmer aus dem Fenster geworfen. Nun funktioniert es aber,
und das NUR GEIL. Und ich bin FREI!!!! Kein Lizenzen, keine
Beschränkungen..... einfach die GANZE WELT von C in einem Controller.

Also Hardware benutze ich die AVR-CTRL von www.mikrocontroller.com

dazu benutze die neuste Version von AVR-GCC, UltraEdit (mal sehen ob
ich das Kaufe) und PonyProg2000, welches sogar aus dem makefile
startet.

Also programmieren, F9 drücken und dann am Controller testen.

Einfach GEIL.

Viele von euch wissen das schon alles, aber vieleicht kommt ja mal
jemand vorbei, der einen erfahrungsbericht sucht und dieser ihm
vieleicht helfen kann.

Man braucht nur Gedult und NICHT VERGESSEN ---->RTFM.

Liebe Grüsse

Division

von eugen D (Gast)


Lesenswert?

so in etwa erging es mir auch, zuerst absolut keinplan davon aber
mittlerweile einfach nur geil. ich benutze das winavr packet, mit dem
dazu beiliegendem programmers notepad, und dem fertigen mega makefile.
dises iss wirklich gut es iss total einfach assemblerfiles damit
einzubinden ( was ja manchmal von nöten iss) und preisleistung
vrhältniss iss unschlagbar
mfg eugen d

von Martin Jansen (Gast)


Lesenswert?

@ division:
wie hast du ponyprog eingebunden?

von Divison (Gast)


Lesenswert?

###################################################################
#######ISP WITH .eep AND VERIFY##########
####
ISPEXE = E:\Programme\PonyProg2000\PONYPROG2000.EXE
  TRG = main
isp: $(TRG).hex $(TRG).eep
  echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TRG).hex\nLOAD-DATA
$(TRG).eep\nWRITE&VERIFY-ALL" >isp.e2s
  $(ISPEXE) isp.e2s

von Martin Jansen (Gast)


Lesenswert?

danke erstmal!
ich hab das ins makefile eingebaut, und die pfadangabe für ponyprog und
auch die zieldatei angepasst, jedoch wirft mir das programm fehler um
die ohren, es sagt nämlich, dass in den letzten 3 zeilen separatoren
fehlen...
woran könnte das liegen, ich habe die nur so übernommen

von Divison (Gast)


Angehängte Dateien:

Lesenswert?

Ja den fehler hatte ich auch! Ich nummeriere das hier mal. Die nummer
entsprechen das jeweils einer Zeile!!!! Also die Nummer 7 ist eine
Zeile. Glaube da darf kein Zeilenumbruch sein. Ich lade dir auch mal
mein makefile mit rauf. Da stehts dann im ganzen drin.


1 ###################################################################
2 #######ISP WITH .eep AND VERIFY##########
3 ####
4 ISPEXE = E:\Programme\PonyProg2000\PONYPROG2000.EXE
5   TRG = main
6 isp: $(TRG).hex $(TRG).eep
7   echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG $(TRG).hex\nLOAD-DATA
7 $(TRG).eep\nWRITE&VERIFY-ALL" >isp.e2s
8   $(ISPEXE) isp.e2s

von Dario Carluccio (Gast)


Lesenswert?

Also ich habe WinAVR und als Editor mit Programmers Notepad gearbeitet
und bin jetzt auf das kostenlose Eclipse (http://www.eclipse.org)
umgestiegen. Solltet Ihr Euch mal anschauen.

Ponyprog habe ich als zusätzliches target ins Makefile wie folgt
eingebunden:

> ------------------- Schnippeldischnipp -------------------


# make pony = Download the hex file to the device, using Ponyprog.
#                Please set Path to Ponyprog below first!
#                customize the Ponyprog settings using Ponyprog.

# Programming support using PonyProg

PONYEXE =  C:\Programme\PonyProg2000\PONYPROG2000.EXE

pony: $(TARGET).hex $(TARGET).eep
        echo -e "SELECTDEVICE $(MCU)\nLOAD-PROG
$(TARGET).hex\nLOAD-DATA $(TARGET).eep\nWRITE&VERIFY-ALL" >isp.e2s
        $(PONYEXE) isp.e2s

> ------------------- Schnippeldischnapp -------------------

von Alexander (Gast)


Lesenswert?

siehe Thread bezüglich avrgcc und GUI ...
Die Leerzeichen in den geposteten Ausschnitten müssen durch Tabs
ersetzt werden, dann gehts.

von Martin Jansen (Gast)


Lesenswert?

@ alexander:
danke für den tipp!

von Sebastian Schabbach (Gast)


Lesenswert?

Hallo,

mit dem Makefile habe ich so meine 5 Problemchen. Wahrscheinlich ist
das Problem, dass ich mit dem Erstellungsprozess noch nicht so vertraut
bin. Könnt ihr mir mal verraten wie ich jetzt die Targets alle mache?
Was sind das denn alles für Zwischendateien? Gibts da auch ne
Objektdatei? Muss ja oder? Eventuell kann mal jemand ein "einfaches"
Makefile reinbringen, nur mit einem Haupttarget und den notwendigsten
Operationen.

von Jörg Wunsch (Gast)


Lesenswert?

Hast Du mal Mfile probiert?  Das ist eigentlich genau für den Fall da,
daß jemand gern mit der Arbeit anfangen möchte, ohne gleich am Anfang
noch `make' kennenlernen zu müssen.  (Meiner Überzeugung nach wirst
Du
auf lange Sicht natürlich nicht um diesen Schritt herumkommen. ;-)

Eine (verschiebliche [*]) Objektdatei gibt es zwischendrin, Suffix ist
per Konvention .o.  Der Compiler kann auch scheinbar direkt von der
Quelle zur Zieldatei compilieren (die Objektdatei löscht er danach
selbst).

[*] Im Unix-Jargon ist auch das fertige Compilat eine Objektdatei,
aber sie ist eben nicht mehr verschieblich und hat alle externen
Symbolreferenzen aufgelöst.  Alle Objektdateien dieser Toolchain
benutzen dabei das ELF-Format.

von Sebastian Schabbach (Gast)


Lesenswert?

Naja, das Makefile ist net so das Problem. Ich habe für meine
Windows/Linux Projekte auch schon Makefiles geschrieben und habe damit
auf der Arbeit jeden Tag zu tun. Allerdings komm ich durch das avr
zeugs da nicht durch.

Ich habe mir das mfile mal ausprobiert, allerdings ist das glaub ich
nicht das richtige für mich, weil das Makefile dort viel zu komplex
ist. Ich suche halt nur so ne kleine Demo, die das ganze so simpel wie
möglich hällt.

Wie ist denn der Erstellungsvorgang?

*.o => *.elf => *.hex oder wie?

von Jörg Wunsch (Gast)


Lesenswert?

Zum Beispiel, ja.

von Sebastian Schabbach (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

mit dem Makefile das klappt jetzt so einigermaßen. Ich schick es euch
mal mit dann könnt ihr euch es nochmal anschaun und mir Tipps geben.

Ich habe allerdings noch das Problem das ich nicht weiss, wie ich da
z.B. für das Ansteuern des Displays eine Lib einbinden kann. Gibt es da
irgendeinen Flag? Oder wisst ihr eine Seite wo die Flags vom avr-gcc
beschrieben sind? Ich habe unter der Hilfe (avr-gcc --help) mal
geschaut, allerdings habe ich auf das Problem keine Lösung gefunden.

Gruß Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

-llibname, wobei die Bibliothek dann liblibname.a heißen muß.

Ansonsten einfach den Bibliotheksnamen auf der Kommandozeile angeben.
(Bibliotheken enden auf .a und werden vom avr-ar erzeugt -- .a,
Mnemonik: `archive').

von Sebastian Schabbach (Gast)


Lesenswert?

ja das mit dem avr-ar habe ich schon herausgefunden. Es geht halt nur um
das dazulinken. Kannst du nochmal eben klarstellen wie Du das mit der
Konsole meinst? Einfach hinter das o-file schreiben oder wie?! Und in
welchem Schritt muss ich die lib dazulinken? Beim OUT-File, beim
MAP-File oder bei Hex?


Gruß Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

Konsole?  Wo schrob ich sowas?

Du kannst ein .a genauso auf der Linker-Kommandozeile angeben wie
jedes beliebige .o.  Der Unterschied ist nur, daß man in einer
Bibliothek mehrere .o-Dateien zusammenfassen kann, aus denen sich der
Linker die .o-Dateien (!nicht!  Funktionen!)  herauszieht, die er
benötigt.

Das Ganze passiert beim Linken, gelinkt wird exakt einmal pro Job.
Beim Linken werden alle verschieblichen Objektmoduln zusammengekettet
und ihre Symbolbezüge aufgelöst.  Was herauskommt, nennt man streng
genommen ebenfalls eine Objektdatei, aber sie ist nicht mehr
verschieblich und hat keine ungelösten Symbolbezüge mehr.  In AVR-GCC
Konvention bekommt sie die Endung .elf (unter Unix ist sie
typischerweise endungslos).  Ist dahingehend ein wenig irreführend,
daß ja alle .o-Dateien ebenfalls bereits ELF-Dateien sind.

Der Linker (avr-ld) selbst wird typischerweise vom C-Compilertreiber
(avr-gcc) gerufen, so dass sich dieser Compilertreiber darum kümmert,
die für C notwendigen Startdateien und Bibliotheken noch zusätzlich
mit zu übergeben.  Wenn Du in die avr-gcc Kommandozeile ein -v mit
einbaust siehst Du, was er da genau treibt.

Die Mapdatei erstellt der Linker auf Anforderung ebenfalls beim
Linken.  (Aber ehrlich: ich lasse sie mir nicht erstellen, außer zum
Debuggen des Linkers kann man die meiner Meinung nach zu nichts
gebrauchen, weil viel zu viel drinsteht.)

Andere Ausgabeformate (z. B. ihex) werden hernach mittels avr-objcopy
aus der gelinkten Datei transformiert.

von Dennis (Gast)


Lesenswert?

Hallo!

Ich mhabe jetzt auch den WINAVR Programmers Notpad in Benutzung.
Leider habe ich noch keinen Plan wie ich das HEX-File damit generieren
kann.
Ich habe schon manchen Bericht gelesen. Ich habs einfach noch nicht
geschaft.
Kann mir jemand sagen wie ich das HEX-File mit WINAVR generieen kann?

von Dirk B (Gast)


Lesenswert?

avr-objcopy -O ihex output.elf output.hex

macht aus output.elf -> output.hex

von Dennis (Gast)


Lesenswert?

Mit was für einer EXE Datei erzeuge ich das HEX-File?
Ich verstehe das hier nicht  --> avr-objcopy -O ihex output.elf
output.hex

von OldBug (Gast)


Lesenswert?

Mit der "avr-objcopy.exe".

Die dazugehörige Kommandozeile hat Dirk ja schon gepostet.

von Dennis (Gast)


Angehängte Dateien:

Lesenswert?

Vieln Dank für die schnelle Hilfe.
Ok jetzt weiss ich was Sache ist.
Nur noch ein Problem habe ich.
Wie und wo muss ich die Einstellungen im WINAVR vornehmen?

von Dennis (Gast)


Angehängte Dateien:

Lesenswert?

Wie muss ich da die Einstellungen vornehmen?

von Jörg Wunsch (Gast)


Lesenswert?

> avr-objcopy -O ihex output.elf output.hex

Genauer:

avr-objcopy -O ihex -j .text -j .data output.elf output.hex

Ist aber alles in den Standardmakefiles schon enthalten.

von Alex (Gast)


Lesenswert?

Nervig bist du nicht?

Im aktuellen WinAVR ist unter Tools bereits der Eintrag make vorhanden.
Wenn im selben Ordner wie deine *.c-Datei auch ein makefile liegt (ist
auch im WinAVR Package enthalten), dann funktioniert die Sache auch
prima.

von Dennis (Gast)


Lesenswert?

Hmm...muss ich da noch EInstellungen vornehmen oder nicht?
Ihr verwirrt mich total!

von Dennis (Gast)


Lesenswert?

Was meint Ihr mit MAKE File?

von Dennis (Gast)


Lesenswert?

Hallo....

von Dario (Gast)


Lesenswert?

Hallo Dennis,

1. Du hast WINAVR installiert.

2. Du schreibst dein erstes Programm text.c

3. Du suchst Dir ein Makefile und kopierst das in das
selbe Verzeichnis, wie Dein C Program, und änderst das
entsprechend ab. Das wurde hier auch schon oft diskutiert.
Es befindet sich ein Sample Makefile im WINAVR zudem gibt
es sogar einen Makefile-Editor, der heisst mfile

4. Du öffnest eine cmd.exe, gehst in das Verscheichnis mit
den C-Datei und tipps 'make all' ein. Jetzt sollte das
test.hex erzeugt werden.

5. jetzt kannst Du 'make all' in das Programmers Notepad
anpassen.

Das alles steht auch hier:

http://winavr.sourceforge.net/download/install_config_WinAVR.pdf

Noch Fragen?

von Sebastian Schabbach (Gast)


Lesenswert?

Dennis,

mit Makefile meint man ein Programm, mit welchem du dein Programm
erstellen kannst. Naja, dieser Satz ist ein wenig irreführend, denn für
das Erstellen ist, wie du ja sicherlich weisst, der Kompiler, in dem
Fall avr-gcc zuständig. Soweit ich weiss ist der avr-gcc eine
Abwandlung vom gcc (einen GNU Standardkompiler). Wenn du einfache
Projekte hast (zum Beispiel hello world), kommst du ohne Makefile aus
und kannst den Befehl einfach auf der Konsole eingeben. Allerdings gibt
es auch größere Projekte, die meistens mehrere Objectfiles haben und
eventuell sogar eigenen oder fremde Bibliotheken einbinden. Erstens
wird das Kommando an den Kompiler in dem Fall sehr unübersichtlich und
schwierig, vor allem aber lang. Und genau hier kommt das Makefile ins
Spiel. Hier kannst du in einem bestimmten Format beschreiben, was der
Kompiler tun soll (welche Dateien er erstellen soll, von was es
Abhängen soll und was der Compiler tun soll, um es zu erstellen. Guck
dir am besten ein Makefile mal an, oder mach mal nen Makefile Projekt
mit dem mormalen gcc. Das Makefile kannste dann mit Make aufrufen und
promt wird alles gemacht was unter all steht, falls du sowas definiert
hast.


Gruß Sebastian

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.