Forum: Compiler & IDEs ATtiny24A: kann Fusebits nicht schreiben (c,gcc, avrdude, usbasp)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens N. (midibrain)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
                $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) 
                $(AVRDUDE_WRITE_EFUSE) $(AVRDUDE_WRITE_LFUSE) $(AVRDUDE_WRITE_HFUSE) 

Fällt dir an der zweiten Zeile im Vergleich zur ersten was auf?

von Oliver S. (oliverso)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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

von jens (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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
von jens (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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
von fast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
man könnte aber auch am Ende der 1. Zeile einen backslash \ anfügen
       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_LFUSE) \
       $(AVRDUDE_WRITE_HFUSE) $(AVRDUDE_WRITE_FLASH) \
       $(AVRDUDE_WRITE_EEPROM) $(AVRDUDE_WRITE_LOCK)

gesehen und kopiert von hier: Exkurs Makefiles

von jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke Jörg.

Was mich verwundert ist jetzt die Meldung:

avrdude: 1 bytes of hfuse verified

Sollten doch 3 Byte sein, oder?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
jens schrieb:
> Sollten doch 3 Byte sein, oder?

Nö, die drei Fuses sind jeweils ein eigener Speicherbereich von 1 Byte.

von jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ja, aber warum steht da das nur das Byte für hfuse geschrieben wurde, da 
fehlen doch noch lfuse und efuse?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Die sollten in der Tat alle dort stehen, aber u. U. doch durch einige 
Zeilen anderer Aktivitäten voneinander getrennt.

: Bearbeitet durch Moderator
von jens (Gast)


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

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.