Hallo, ich möchte mich in das Programmieren in C einarbeiten und habe direkt Anfängerschwierigkeiten. Um ein einfaches Beispielprogramm mit GCC aus dem Winavr-Paket zu Compilieren, habe ich mir folgende Befehle herausgesucht, in der Windows-DOS-Box an der Kommandozeile eingegeben und damit als erstes ein zufrieden stellendes Ergebnis erhalten: blinky.c ist der Quellcode von der nachfolgend angegebenen Seite, der Timer-Interrupts verwendet. (blinky-mit-interrupt-fuer-mega8.c) avr-gcc blinky.c -c -o blinky.o -Os -g -mmcu=atmega8 avr-gcc blinky.o -o blinky.elf -mmcu=atmega8 avr-objcopy -j .text -j .data -O ihex blinky.elf blinky.hex avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex blinky.elf blinky_eeprom.hex avr-objdump -h -S -j .text -j .data blinky.elf > blinky.lst Das Beispiel stammt von hier: http://www.rn-wissen.de/index.php/Hallo_Welt_f%C3%BCr_AVR_%28LED_blinken%29 __________ nächster Schritt: folgendes Blinkprogramm ohne Interrupts, nur mit Warteschleifen von hier: http://www.rn-wissen.de/index.php/LED-Blinken_ohne_Timer (blinky-fuer-mega8.c) avr-gcc blinky.c -c -o blinky.o -Os -g -mmcu=atmega8 nach diesem Befehl erscheint bereits folgende Fehlermeldung: #warning: "F_CPU not defined for <util/delay.h> avr-gcc blinky.o -o blinky.elf -mmcu=atmega8 OK, keine Fehlermeldung avr-objcopy -j .text -j .data -O ihex blinky.elf blinky.hex OK, keine Fehlermeldung ______________________ weiterer Schritt, da ich früher mit dem AT90S2313 viel gemacht habe in Assembler und deshalb sie alten Versuchsschaltungen verwenden möchte: anderer Prozessor, blinky-Programm mit Warteschleifen, da dieses sehr einfach ist und auf jedem Prozessor laufen müßte, wenn man oben die Ports von C nach A oder B ändert: ....//LED Defines #define LED_DDR DDRA #define LED_PORT PORTA #define LED_PORTPIN PA1...... (blinky-fuer-at90s2313.c) avr-gcc blinky.c -c -o blinky.o -Os -g -mmcu=at90s2313 ergibt eine ganze REihe Fehlermeldungen: #warning: "F_CPU not defined for <util/delay.h> in function 'main' 'DDRA' undeclared 'PA1' undeclared 'PortA' undeclared Offensichtlich werden diverse Vereinbarungen nicht gefunden. Woher kommen die Warnungen in Schritt2? Diese wirken sich in Schritt3 vollends aus. Wie schaffe ich Abhilfe, wenn ich den anderen Prozessor verwenden möchte? Kann mir bitte jemand mit Tipps helfen? Mit freundlichem Gruß
Christian S. schrieb: > weiterer Schritt, da ich früher mit dem AT90S2313 viel gemacht habe in > Assembler und deshalb sie alten Versuchsschaltungen verwenden möchte: > > anderer Prozessor, blinky-Programm mit Warteschleifen, da dieses sehr > einfach ist und auf jedem Prozessor laufen müßte, wenn man oben die > Ports von C nach A oder B ändert: > > ....//LED Defines > #define LED_DDR DDRA > #define LED_PORT PORTA > #define LED_PORTPIN PA1...... Also ich kann im Datenblatt vom AT90S2313 weit und breit nichts von einem Port A sehen. Christian S. schrieb: > Woher kommen die Warnungen in Schritt2? F_CPU muss vor dem Einbinden von <util/delay.h> definiert sein, damit der Code darin weiß, mit welcher Frequenz dein Controller getaktet ist. Also z.B.:
1 | #define F_CPU 1000000
|
2 | #include <util/delay.h> |
Im verlinkten Beispiel ist dieses #define im Source-Code nicht vorhanden, weil dort mit einem Makefile gearbeitet wird, welches das Symbol über die Compiler-Kommandozeile definiert: avr-gcc ... -DF_CPU=1000000 ...
Christian S. schrieb: > avr-gcc blinky.c -c -o blinky.o -Os -g -mmcu=atmega8 > nach diesem Befehl erscheint bereits folgende Fehlermeldung: > #warning: "F_CPU not defined for <util/delay.h> "Nur" eine Warnung. F_CPU wird vorbesetzt falls nicht angegeben. Du kannst es beim Compileraufruf mitgeben, siehe Quellkommentar im 1. Beispiel: $ avr-gcc blinky.c -c -o blinky.o -Os -g -mmcu=atmega8 -DF_CPU=1000000 oder welcher Wert auch immer der richtige ist für F_CPU. > mit dem AT90S2313 > ergibt eine ganze REihe Fehlermeldungen: > #warning: "F_CPU not defined for <util/delay.h> > in function 'main' > 'DDRA' undeclared > 'PA1' undeclared > 'PortA' undeclared > > Offensichtlich werden diverse Vereinbarungen nicht gefunden. Die Beispiele sind idR für einen einzigen µC geschrieben, hier wohl ATmega8. AVRs haben alle unterschiedliches SFR-Layout und damit auch unterschiedliche Bedürfnisse was Port-Layout, Timer-Konfiguration etc. angeht. > Woher kommen die Warnungen in Schritt2? > Diese wirken sich in Schritt3 vollends aus. Nein, die Warnung hat mit dem Fehler nichts zu tun. Es sind 2 unterschiedliche Baustellen. Wenn du einen anderen µC verwendest, musst du das Programm portieren, d.h. Datenblatt wälzen und schauen, wie die SFR-Settings anzupassen sind. Selbst wenn ein SFR gleich heisst kann es sein, daß es anders konfiguriert werden muss. Die Einstirgsbeispiele so allgemein zu schreiben daß sie auf jeden denkbaren der > 200 AVRs passen würden wäre der absolute Overkill und würde das Verständnis eher behindern anstatt ein kleines, überschaubares Minimalbeispiel zu liefern.
Hallo, erstmal vielen Dank für die fundierten Auskünfte! DAß am at90s2313 die beiden Ports B und D heißen, hätte mir auch selbst bei einem Blick auf das Anschlußbild auffallen können. OK, Fehler von mir, da "früher" vor 10 Jahren war. Durch folgende Änderung tauchte die Fehlermeldung nicht mehr auf: #define LED_DDR DDRA ----> DDRB #define LED_PORT PORTA ----> PORTB #define LED_PORTPIN PA1 ----> PB1 Beispiel "LED-blinken ohne Interrupt nur mit w2313.c" compiliert: avr-gcc w2313.c -c -o w2313.o -Os -g -mmcu=at90s2313 avr-gcc w2313.o -o w2313.elf -mmcu=at90s2313 avr-objcopy -j .text -j .data -O ihex w2313.elf w2313.hex avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex w2313.elf w2313_eeprom.hex avr-objdump -h -S -j .text -j .data w2313.elf > w2313.lst avr-gcc w2313.o -o w2313.elf ... -Wl,-Map,w2313.map der letzte Befehl geht nicht! Sonst alles perfekt. Fehlermeldung: C:/winavr-xxxxx/.../.../avr/bin/ld.exe: ...: no such file: permission denied Kann mich über diese Fehlermeldung bitte noch jemand aufklären? Mit freundlichem Gruß
Christian S. schrieb: > avr-gcc w2313.o -o w2313.elf ... -Wl,-Map,w2313.map > > der letzte Befehl geht nicht! Sonst alles perfekt. > Fehlermeldung: > C:/winavr-xxxxx/.../.../avr/bin/ld.exe: ...: no such file: permission > denied > > Kann mich über diese Fehlermeldung bitte noch jemand aufklären? ... ist kein wirklich toller Dateiname. Der Linker sucht eine Datei ... und die findet er nicht.
Hallo, ich möchte ein C-Programm für einen AT90s2313 per Befehl für die Kommandozeile im AVR-Studio als .cof-File laden und debuggen. OK ist veraltet, weiß ich aber und hat spezielle Gründe. Die einzige Angabe, welche Befehle man dafür braucht,habe ich in diesem Makefile gefunden. Hier ein Ausschnitt: http://todbot.com/projects/smart-leds/softpwm_t13/Makefile On command line: # # make all = Make software. # # make clean = Clean out built project files. # # make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). # # make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio # 4.07 or greater). # # make program = Download the hex file to the device, using avrdude. Please # customize the avrdude settings below first! # # make filename.s = Just compile filename.c into the assembler code only # # To rebuild project do "make clean" then "make all". # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. COFFCONVERT=$(OBJCOPY) --debugging \ --change-section-address .data-0x800000 \ --change-section-address .bss-0x800000 \ --change-section-address .noinit-0x800000 \ --change-section-address .eeprom-0x810000 coff: $(TARGET).elf @echo @echo $(MSG_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-avr $< $(TARGET).cof extcoff: $(TARGET).elf @echo @echo $(MSG_EXTENDED_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof Wie müßte nun meine Befehlszeile lauten? Ich habe schon mehrfach probiert, komme aber nicht hin. Mit freundlichem Gruß
Was ist denn das Problem / die Fehlermeldung? Wird COFF überhaupt unterstützt von deiner Toolchain? Zum Debuggen geht doch auch ELF, vorausgesetzt der Bock wurde nicht bei der ELF -> COFF Konvertierung geschossen. Und noch was: Mach für sowas nen neues Thema auf. Mit dem OT hat deine Frage grad garnix zu tun...
Hallo, also um es ausführlich und deutlich zu beschreiben: Was ich nicht habe, ist der Befehl mit all seinen Optionen, um an der Kommandozeile ein .cof - File zu erhalten. Also gibt es auch keine Fehlermeldung. Die Dokumentation zu AVR-GCC ist mir zu wenig hinreichend. Ein .elf - File läßt sich mit AVR-Studio nicht öffnen. So dachte ich mir, daß es einen Befehl für die Kommandozeile geben muß, wenn es doch direkt eine Vorgabe gibt, 'make coff' zu wählen, die das gewünschte liefert, falls man alles richtig vorher im Makefile eingestellt hat. Insofern gehört diese Frage aus meiner Sicht schon noch zum Thema, weil ich mir ja zum C-Programmieren auch noch das Debuggen in AVR-Studio gönnen möchte. Was ich sehen möchte ist die Ausführung eines C-Programms für den AVR in einzelnen SChritten, die ich mit der F11-Taste im Simulator ablaufen lasse. Ein .hex-File läßt sich öffnen und debuggen, enthält aber zu spärliche Angaben. Auszug aus der Hilfe des AVR-Studios, "file menu": When Open... is selected from the File menu, a file selection dialog appears on the screen. The user must then select the object file to execute. AVR Studio supports the following formats: IAR UBROF (.d90) AVR Object Files generated by the Atmel AVR Assembler (.obj) Intel-Hex, extended (.hex) COFF, Common Object File Format (.cof) AVR Studio automatically detects the format of the object file. mit freundlichem Gruß
Was Du bloß mit Deinen .cof hast, das brauchst Du nicht. Einfach im AVRStudio für Dein Projekt den Simulator auswählen und dann Build und Run drücken. Und es stimmt, Deine Frage hat mit dem OP (Compiler Warnungen und Errors) nun überhaupt nichts gemeinsam. Peter
Reohenvorheizer schrieb: > ich möchte ein C-Programm für einen AT90s2313 per Befehl für die > Kommandozeile im AVR-Studio als .cof-File laden und debuggen. OK ist > veraltet, weiß ich aber und hat spezielle Gründe. Und was sind die "speziellen Gründe"? Christian S. schrieb: > Ein .elf - File > läßt sich mit AVR-Studio nicht öffnen. Doch, außer natürlich du benutzt irgendein veraltetes AVR-Studio. Da stellt sich dann wieder die Frage: warum?
Stefan Ernst schrieb: >> Ein .elf - File >> läßt sich mit AVR-Studio nicht öffnen. > > Doch, außer natürlich du benutzt irgendein veraltetes AVR-Studio. Das müsste dann eine 3er Version sein. > Da stellt sich dann wieder die Frage: warum? Weil die 3er noch problemlos unter Wine lief. :-) Im Ernst: der einzige mir bekannte Konsument, der immer noch AVR-COFF benötigt, wäre VMlab.
Hallo, der spezielle Grund ist der veraltete PC, der nun auch noch ein C-Programm für den AVR schrittweise ausführen soll. Favorisiert habe ich AVR-Studio 3.56, weil es noch eine handliche Größe hat und ich mehr nicht brauche. Die Versionen >4 sind meiner Ansicht nach für den veralteten PC zu groß, 100 MB Installationsdatei plus 38 Mb Service-Pack. Und das NUR, um C-Programme von wenigen Textseiten Größe zu Lernzwecken auszuprobieren. Kommt mir nicht drauf. So ein veraltetes Dateiformat würde doch gut passen oder? Sonst ein Dateiformat zum Debuggen wäre mir auch recht, aber .elf können die alten Versionen des AVR-Studios eben nicht öffnen. Deshalb diese Verbiegung. Nachdem ich stundenlang mit Vorlagen aus Makefiles herumprobiert habe, die AVR-GCC-Hilfe bemüht habe, komme ich wieder zu dem SChluß, daß diese Tools nicht leicht gezielt zu bedienen sind, daß in vielen Fällen mir gar nicht klar ist, was die diversen Einstellungen bewirken und daß es nicht für Anfänger geeignet ist, außer wenn man auf vorgefertigte Wege zurückgreifen kann, mit denen man zumindest am Anfang brauchbare Ergebnisse erhält. Ich hätte nie gedacht, daß es so einen derartigen Umstand bedeutet, das passende Dateiformat zu erzeugen. mit freundlichem Gruß
> der spezielle Grund ist der veraltete PC, der nun auch > noch ein C-Programm für den AVR schrittweise ausführen > soll. Favorisiert habe ich AVR-Studio 3.56, ... Definiere 'veraltet'. Mein erstes AVR-Studio hab ich vor 10 Jahren eingesetzt, auf einer damals schon alten PC-Platform. Und das war ein 4-er AVR-Studio mit dem damals aktuellen WinAVR > Ich hätte nie gedacht Ich hätte nie gedacht das sagen zu müssen: Denkst du nicht, dass sich in der Zwischenzeit die Tools verbessert haben? Ich hab noch mit Lochkarten gerabeitet. Das war auf der einen Seite ziemlich einfach (solange alles geklappt hat) und auf der anderen Seite aber auch unglaublich kompliziert (wenn es Probleme mit dem Lochkartenstanzer/Leser gab oder dir ganz einfach dein Lochkartenstapel runtergefallen ist). Alles hat 2 Seiten. Die Tools von 'damals' haben ihren Job gemacht, aber man musste wissen, was man tut und wie man sie einsetzt. Und nicht selten bedeutete das: stundenlang alle möglichen (und unmöglichen) Variationen von X durchprobieren und englische Handbücher aquf Wortebene und unter Rückverfolgung aller Querverweise stundenlang studieren, bis man raushatte, wie die Logik dahinter funktioniert. Bis dann die Revolution ausbrach und das Buzzword "Benutzerfreundlichkeit" in aller Munde war.
Christian S. schrieb: > Die Versionen >4 sind meiner Ansicht > nach für den veralteten PC zu groß Ich kann ja verstehen, man hängt an alten Sachen. Aber einem 33MHz 486-er mit Windows3.11 sollte man endlich seinen verdienten Ruhestand gönnen. Auch sind ja diese alten Mühlen noch richtig laut gewesen (Festplatten, Lüfter). Alles vor Windows-XP würde ich nicht mal mehr mit der Kneifzange anfassen. Peter
Hallo, na, wer sagt's denn! Habe nun mein .cof - file! Sieht geöffnet mittels AVR-Studio 3.56 aus wie im Bild. Als veraltet würde ein normaler Gamer oder vielleicht auch Programmierer meinen "Dual-Core 3,6 GHZ PC mit 1GByte Ram und 40 Gig-Platte und Win-XP" ansehen. Habe den bei einer firmeninternen Verlosung gewonnen. Und ob das P2-333-MHz-Laptop mit Win-XP-SP3 damit klar kommt, probiere ich demnächst aus. Jedenfalls AVR-Studio und WINAVR sind schon drauf. Ja, OK, 8sec fürs compilieren und AVR-Studio läuft auch damit. Vor 10 Jahren machte das alles der Pentium2, allerdings nur Assemblerprogrammierung. MPLAB für den PIC war mit diesem ebenfalls kein Problem. "Ich hab noch mit Lochkarten gerabeitet." ich hab auf MFM-Platten DOS geübt... Da stehen neben mir noch drei PS/2-Rechner mit 10 Gig-Platten und TTL-Grafik. Was habe ich gemacht??? Folgende Vorlagen verwendet: http://www.rn-wissen.de/index.php/LED-Blinken_ohne_Timer http://royalclan.de/index.php?site=downloads&show=15 WINAVR 20100110 Im Makefile habe ich wie in Readme.txt verlangt, die Einträge "MCU" und "F_CPU" an den favorisierten Prozessor, hier den AT90S2313 angepaßt und 8 MHz als Takt eingetragen. Diese Passage des Makefiles hier, habe ich abgeändert, also anstatt dwarf-2 habe ich stabs eingetragen. Da ich so viel vorher gelesen habe über dieses Dateiformat, habe ich einfach mal das probiert. # Debugging format. # Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. # AVR Studio 4.10 requires dwarf-2. # AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. DEBUG = stabs Dann erst mal 'make' aufgerufen, bis keine Fehler mehr kamen, dann 'make coff' aufgerufen. Das Make-File setzt sehr umfangreiche Befehle ein, wie man an den beigefügten Bildschirmmmeldungen sehen kann. Sie befinden sich in der Datei Readme-chr.txt im ZIP-Archiv. AVR-Studio 3.56 öffnet die .cof-Datei und frägt nochmal nach Prozessortyp und Taktfrequenz. Dann ist schon die Datei geöffnet und man kann sich die Watches einrichten. Warum habe ich nicht gleich die Make-files ausprobiert? Werde mich nun auf meinen Lorbeeren vorläufig ausruhen und mich auf viele selbst geschriebne C-Programme freuen, die ich im veralteten AVR-Studio debuggen kann...
Christian S. schrieb: > Als veraltet würde ein normaler Gamer oder vielleicht auch Programmierer > meinen "Dual-Core 3,6 GHZ PC mit 1GByte Ram und 40 Gig-Platte und > Win-XP" ansehen. Das ist doch ein Schlachtschiff. Meiner ist noch älter (Aldi 2004, 3GHz HT). Ich benutze Studio 4.18 darauf, läuft wie dumm. Peter
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.