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
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
################################################################### #######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
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
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
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 -------------------
siehe Thread bezüglich avrgcc und GUI ... Die Leerzeichen in den geposteten Ausschnitten müssen durch Tabs ersetzt werden, dann gehts.
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.
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.
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?
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
-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').
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
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.
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?
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
Mit der "avr-objcopy.exe". Die dazugehörige Kommandozeile hat Dirk ja schon gepostet.
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?
> 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.
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.
Hmm...muss ich da noch EInstellungen vornehmen oder nicht? Ihr verwirrt mich total!
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.