www.mikrocontroller.net

Forum: Compiler & IDEs NEHMT AVR-GCC


Autor: Divison (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: eugen D (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Jansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ division:
wie hast du ponyprog eingebunden?

Autor: Divison (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Jansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Divison (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dario Carluccio (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 -------------------

Autor: Alexander (Gast)
Datum:

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

Autor: Martin Jansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ alexander:
danke für den tipp!

Autor: Sebastian Schabbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian Schabbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Beispiel, ja.

Autor: Sebastian Schabbach (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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').

Autor: Sebastian Schabbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dirk B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr-objcopy -O ihex output.elf output.hex

macht aus output.elf -> output.hex

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der "avr-objcopy.exe".

Die dazugehörige Kommandozeile hat Dirk ja schon gepostet.

Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wie muss ich da die Einstellungen vornehmen?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dennis (Gast)
Datum:

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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meint Ihr mit MAKE File?

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo....

Autor: Dario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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_con...

Noch Fragen?

Autor: Sebastian Schabbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.