Hallo, ATtiny24A,linux, avr-gcc, avrdude, usbasp Mit dieser Kombination brenne ich sonst Atmegas, jetzt beim ATtiny24A bekomme ich die Fusebits nicht in den Controller. Wenn ich mit avrdude brennen möchte wird zwar das Programm rübergeschoben und läuft auch, die Fusebits werden aber nicht geschrieben. Fehlermeldung: ... ... ... avrdude done. Thank you. U efuse:w:0xff:m -U lfuse:w:0x62:m -U hfuse:w:0xdf:m sh: 1: U: not found # make: [makefile:342: program] Fehler 127 (ignoriert) # Kompilierung erfolgreich beendet. Kennt jemand diesen Fehler? Anbei das Makefile. Jens
1 | $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) |
2 | $(AVRDUDE_WRITE_EFUSE) $(AVRDUDE_WRITE_LFUSE) $(AVRDUDE_WRITE_HFUSE) |
Fällt dir an der zweiten Zeile im Vergleich zur ersten was auf?
Jens N. schrieb: > U efuse:w:0xff:m -U lfuse:w:0x62:m -U hfuse:w:0xdf:m oder am ersten U im Vergleich zum zweiten und dritten? Oliver
Oliver S. schrieb: > oder am ersten U im Vergleich zum zweiten und dritten? Wobei man dafür die Untiefen von "make" kennen muss um zu verstehen, warum dort das Minuszeichen nicht ausgegeben wird.
Jörg W. schrieb: > Fällt dir an der zweiten Zeile im Vergleich zur ersten was auf? Ja: in der zweiten Zeile fehlt das einleitende "$(AVRDUDE)" Oliver S. schrieb: >> U efuse:w:0xff:m -U lfuse:w:0x62:m -U hfuse:w:0xdf:m > > oder am ersten U im Vergleich zum zweiten und dritten? Die Bindestriche vor den Us sind im Makefile alle vorhanden.
jens schrieb: > Jörg W. schrieb: >> Fällt dir an der zweiten Zeile im Vergleich zur ersten was auf? > > Ja: in der zweiten Zeile fehlt das einleitende "$(AVRDUDE)" Sowie die $(AVRDUDE_FLAGS). >> oder am ersten U im Vergleich zum zweiten und dritten? > > Die Bindestriche vor den Us sind im Makefile alle vorhanden. Daher schrieb ich ja, dass man die Wirkungsweise von "make" schon recht gut verstanden haben muss, um zu verstehen, warum er in der Ausgabe verschwunden ist. Ein Kommando, dem ein Bindestrich vorangestellt ist, zeigt dem "make" an, dass der Rückkehrwert dieses Kommandos ignoriert werden soll. Normalerweise würde ja bei einem fehlerhaft beendeten Kommando die Sequenz abgebrochen. Da all diese AVRDUDE_FOO-Dinge nur Makros sind, deren Text dann stur ersetzt wird, und da du das eigentliche avrdude-Kommando weggelassen hast, wanderte nun das "-U" an den Anfang einer Kommandozeile und wird dort interpretiert als: "Das Kommando heißt `U', der Fehlercode wird ignoriert."
:
Bearbeitet durch Moderator
Jörg W. schrieb: >> Jörg W. schrieb: >>> Fällt dir an der zweiten Zeile im Vergleich zur ersten was auf? >> >> Ja: in der zweiten Zeile fehlt das einleitende "$(AVRDUDE)" > > Sowie die $(AVRDUDE_FLAGS). Habe mal beides auch vor die zweite Zeile geschrieben (der Zeilenumbruch findet im Makefile nicht statt): $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_EFUSE) $(AVRDUDE_WRITE_LFUSE) $(AVRDUDE_WRITE_HFUSE) Jetzt funktioniert es, ich kann die Fusebits schreiben! Warum ging das mit diesem Makefile (ausser Controller und Takt) für die Atmegas auch ohne voranngestelltes "$(AVRDUDE) $(AVRDUDE_FLAGS)" ? Jens
jens schrieb: > Warum ging das mit diesem Makefile (ausser Controller und Takt) für die > Atmegas auch ohne voranngestelltes "$(AVRDUDE) $(AVRDUDE_FLAGS)" ? Ging garantiert nicht. Vermutlich war früher nach der ersten Zeile noch ein Backslash, der beide Zeilen logisch verbunden hat. Der ist dann irgendwie unter den Tisch gefallen, sodass du auf der zweiten Zeile ein neues Kommando stehen hast. Mit ATmega vs. ATtiny hat das jedenfalls absolut nichts zu tun.
:
Bearbeitet durch Moderator
man könnte aber auch am Ende der 1. Zeile einen backslash \ anfügen
1 | $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_LFUSE) \ |
2 | $(AVRDUDE_WRITE_HFUSE) $(AVRDUDE_WRITE_FLASH) \ |
3 | $(AVRDUDE_WRITE_EEPROM) $(AVRDUDE_WRITE_LOCK) |
gesehen und kopiert von hier: Exkurs Makefiles
Danke Jörg. Was mich verwundert ist jetzt die Meldung: avrdude: 1 bytes of hfuse verified Sollten doch 3 Byte sein, oder?
jens schrieb: > Sollten doch 3 Byte sein, oder? Nö, die drei Fuses sind jeweils ein eigener Speicherbereich von 1 Byte.
ja, aber warum steht da das nur das Byte für hfuse geschrieben wurde, da fehlen doch noch lfuse und efuse?
Die sollten in der Tat alle dort stehen, aber u. U. doch durch einige Zeilen anderer Aktivitäten voneinander getrennt.
:
Bearbeitet durch Moderator
Jörg W. schrieb: > Die sollten in der Tat alle dort stehen, aber u. U. doch durch > einige > Zeilen anderer Aktivitäten voneinander getrennt. Auch hier ein ja: Die stehen natürlich alle da, nur weiter oben... Vielen Dank noch einmal. Jens
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.