Forum: Compiler & IDEs Arduino und AVR: setzen der Lock und Fusebits im Code?


von Florian Hauer (Gast)


Lesenswert?

Hallo uC.net,

ich frage mich gerade wie man im Sourcecode die gewünschte Befehle für 
das Setzen der Fuse und Lockbits eintragen könnte. Da Arduino ja avrdude 
zum Flashes benutzt un ddort als Parameter unter anderem auch die 
Fuse&Lockbits übergeben werden (von der Arduino-IDE aus) sollte es doch 
möglich kein dies dort auch zu setzen?

Ich flashe meine Mega8 momentan mit dem Befehl "Hochladen mit 
Programmer". Die daraus generierte Befehlszeile im Tracerfenster 
übernehme ich dann den avrdude-Befehl in die CMD von Windows 
(Kommandozeile) und ändere die Fusebits nach meinen Vorgaben.

Geht das auch im Arduino-Editor bzw Sourcecode? Habe bei Bascom gesehen 
das es dort nämlich extra dafür ein $PROG gibt. Bin aber C'ler (zwar 
kein Profi, aber ich verhungere nicht beim Basteln).

Wer hat sinnvolle Tips?

von Oliver S. (oliverso)


Lesenswert?

Wenn dein Programmer fues im elf-file unterstützt, geht das so:

https://www.nongnu.org/avr-libc/user-manual/group__avr__fuse.html

Oliver

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


Lesenswert?

Florian Hauer schrieb:

> Da Arduino ja avrdude
> zum Flashes benutzt un ddort als Parameter unter anderem auch die
> Fuse&Lockbits übergeben werden (von der Arduino-IDE aus) sollte es doch
> möglich kein dies dort auch zu setzen?

Das hängt ganz stark davon ab, wie die Arduino-IDE das angeht.

Die von meinem Vorredner vorgeschlagene Variante geht nur, wenn die 
Arduino-IDE das auch unterstützt, denn sie muss dann sowas wie "-U 
lock:w:foo.elf" etc. an AVRDUDE übergeben.

Wenn die Arduino-IDE einfach stur die irgendwo in einem Menü angegebenen 
Werte für Fuse- und Lockbits da übergibt (als "-U lfuse:0x**:m"), dann 
kannst du dich im Sourcecode abmühen wie du willst.

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


Lesenswert?

Oliver S. schrieb:
> Wenn dein Programmer fues im elf-file unterstützt, geht das so:

Der Programmer bekommt das ELF-File nicht zu sehen.

von Oliver S. (oliverso)


Lesenswert?

Ok, das elf-file sieht natürlich nur das Programmierprogramm.

Kann avrdude in aktueller Verison mit der .fuse-section im elf-file was 
anfangen?

Oliver

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


Lesenswert?

Oliver S. schrieb:
> Kann avrdude in aktueller Verison mit der .fuse-section im elf-file was
> anfangen?

Ja, aber nur, indem man ihm das auch auf der Kommandozeile so mitteilt.

Das ist halt der Punkt, bei dem ich bei der Arduino-IDE so meine 
Zweifel habe. Ich kenne sie nicht persönlich, habe aber Berichte von 
anderen gehört, dass innerhalb dieser IDE so ziemlich alles sehr 
„händisch festgezurrt“ sei.

von Theor (Gast)


Lesenswert?

Hm. Seid Ihr sicher, dass der TO das so gemeint hat?

Mein erster Gedanke, aber ich mag mich irren, war, dass er im Quelltext 
die Lockbits beeinflussen will. Er schreibt von "Befehlen", also 
irgendwas, was zur Laufzeit ausgeführt wird, denke ich.

Eine andere Deutung wären Direktiven (manche verwechseln das ja), die 
offebar die Arduino-IDE aus dem Quelltext lesen soll und damit avr-dude 
Parameter setzen.

von leo (Gast)


Lesenswert?

Florian Hauer schrieb:
> ich frage mich gerade wie man im Sourcecode die gewünschte Befehle für
> das Setzen der Fuse und Lockbits eintragen könnte.

Gar nicht. Die Lockbits und Fuses werden via Eintrag in boards.txt (und 
damit teilweise indirekt ueber das Menue) festgelegt. E.g.
1
atmegasa16.name=ATmega328P Stand Alone (Arduino as ISP)
2
...
3
atmegasa16.bootloader.low_fuses=0xff
4
atmegasa16.bootloader.high_fuses=0xdf
5
atmegasa16.bootloader.extended_fuses=0x05
6
...

Das Schreiben der Bits erfolgt dann mit dem Schreiben des Bootloaders.
leo

von Oliver S. (oliverso)


Lesenswert?

Die Lockbits lassen sich natürlich auch aus dem Program setzen.

https://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html#gadaa352690ac1c82c535da9d8faf77590

Oliver

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


Lesenswert?

Theor schrieb:
> Eine andere Deutung wären Direktiven (manche verwechseln das ja), die
> offebar die Arduino-IDE aus dem Quelltext lesen soll und damit avr-dude
> Parameter setzen.

Nein, die IDE müsste das nicht unbedingt aus dem Quelltext selbst lesen 
können, das funktioniert prinzipiell schon auch auf dem oben gezeigten 
Weg über das ELF-File. Atmel Studio unterstützt sowas beispielsweise. Es 
liegt aber an der IDE, die entsprechenden Sections aus dem ELF-File dann 
auch wirklich beim Programmieren „in Auftrag zu geben“.

von Theor (Gast)


Lesenswert?

Jörg W. schrieb:
> Theor schrieb:
>> Eine andere Deutung wären Direktiven (manche verwechseln das ja), die
>> offebar die Arduino-IDE aus dem Quelltext lesen soll und damit avr-dude
>> Parameter setzen.
>
> Nein, die IDE müsste das nicht unbedingt aus dem Quelltext selbst lesen
> können, das funktioniert prinzipiell schon auch auf dem oben gezeigten
> Weg über das ELF-File. Atmel Studio unterstützt sowas beispielsweise. Es
> liegt aber an der IDE, die entsprechenden Sections aus dem ELF-File dann
> auch wirklich beim Programmieren „in Auftrag zu geben“.

Moment. Das ist wahrscheinlich ein Mißverständnis.

Merkwürdig subtil, die Sache ... :-)

Ich habe eine mögliche Deutung der Frage des TO in den Raum gestellt und 
gefragt ob diese aus Eurer Sicht möglich wäre.

Darin steht, dass die IDE das tun "soll", "soll" im Sinne einer 
Spezifikation, einer Erwartung, eines Wunsches. Nicht, dass sie das 
"muss", weil es nicht anders geht oder umgekehrt, dass sie das nicht 
unbedingt muss, weil es auch anders geht.

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
Noch kein Account? Hier anmelden.