Forum: PC-Programmierung [code::blocks] wo wird LFUSE_DEFAULT definiert?


von Uhu U. (uhu)


Lesenswert?

Wenn man ein neues AVR-Projekt anlegt, wird eine Datei fuse.c mit 
folgendem Inhalt erzeugt:
1
#include <avr/io.h>
2
3
FUSES = {
4
    .low = LFUSE_DEFAULT,
5
    .high = HFUSE_DEFAULT,
6
    .extended = EFUSE_DEFAULT
7
};

Wo und wie sind die Fuse-Konstanten definiert? (In avr/io.h jedenfalls 
nicht.)

von Mark B. (markbrandis)


Lesenswert?

Uhu U. schrieb:
> Wo und wie sind die Fuse-Konstanten definiert?

Hier vermutlich:

"To use the Fuse API, include the <avr/io.h> header file, which in turn 
automatically includes the individual I/O header file and the 
<avr/fuse.h> file. These other two files provides everything necessary 
to set the AVR fuses."

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Du kannst übersetzen mit -save-temps -g3 (oder höher).

Im präprozessierten Progamm (*.i für C, *.ii für C++) findest du dann 
sowas wie:
1
# 1 "<built-in>"
2
#define __STDC__ 1
3
#define __STDC_VERSION__ 201112L
4
...
5
# 1 "<command-line>"
6
#define __AVR_ATmega8__ 1
7
#define __AVR_DEVICE_NAME__ atmega8
8
# 1 "foo.c"
9
# 1 "e:\\winavr\\5.2.1\\avr\\include\\stdio.h" 1 3
10
# 40 "e:\\winavr\\5.2.1\\avr\\include\\stdio.h" 3
11
#define _STDIO_H_ 1
12
13
14
15
# 1 "e:\\winavr\\5.2.1\\avr\\include\\inttypes.h" 1 3
16
# 35 "e:\\winavr\\5.2.1\\avr\\include\\inttypes.h" 3
17
#define __INTTYPES_H_ 
18
...

__INTTYPES_H_ wird also in Zeile 35 von inttypes.h 
defined, __AVR_ATmega8__ hingegen per Kommandozeilen-Option(*) 
-D__AVR_ATmega8__ oder -D__AVR_ATmega8__=1

(*) Bis v4.9 ist __AVR_ATmega8__ ein Built-In Define von avr-gcc, ab v5 
wird das Makro über ein spec-File definiert 
($prefix/lib/gcc/avr/$version/device-specs/specs-atmega8).

: Wiederhergestellt durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Uhu U. schrieb:
> Wo und wie sind die Fuse-Konstanten definiert? (In avr/io.h jedenfalls
> nicht.)

Im Prinzip schon in <avr/io.h>.

Allerdings sind sie natürlich spezifisch für den tatsächlich benutzten
Controller, sodass sie in dem abhängig von -mmcu=XXX reingezogenen
konkreten Headerfile stehen.

von Uhu U. (uhu)


Lesenswert?

Ah ja... vielen Dank für die Hinweise.

So unter dem Strich scheint mir das aber ein Komfort zu sein, der nicht 
unbedingt sinnvoll ist.

Ist eigentlich der Fuse-Anzeige-Bug im avrdude behoben? (Ich habe mir 
letzhin zwei Arduino Nanos gebrickt, weil ich auf die Fuse-Werte 
vertraut hatte, die beim Lesen eines Controllers angezeigt weren.)

von Bernd K. (prof7bit)


Lesenswert?

Uhu U. schrieb:
> Wo und wie sind die Fuse-Konstanten definiert?

Kann man da nicht so Sachen wie "gehe zur Deklaration" oder "expandiere 
dieses Makro schrittweise" machen? Code::Blocks wird doch immer so 
gelobt, sowas gehört imho im Jahr 2016 zum Stand der Technik bei einer 
IDE, insofern müsste also ein Mausklick reichen um zu der Stelle zu 
springen an der das definiert wird.

von Uhu U. (uhu)


Lesenswert?

Bernd K. schrieb:
> Kann man da nicht so Sachen wie "gehe zur Deklaration" oder "expandiere
> dieses Makro schrittweise" machen?

Kann man, aber für solche Dinge findet er leider nix.

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


Lesenswert?

Uhu U. schrieb:
> So unter dem Strich scheint mir das aber ein Komfort zu sein, der nicht
> unbedingt sinnvoll ist.

Du meinst, dass man die Fuses überhaupt im Sourcecode einstellt?

Hmm, ja, ich mach' das bei mir auch nicht, aber manche Leute finden
das wohl toll.

> Ist eigentlich der Fuse-Anzeige-Bug im avrdude behoben?

Wenn ich nur wüsste, welchen du meinst ...

: Bearbeitet durch Moderator
von Uhu U. (uhu)


Lesenswert?

Jörg W. schrieb:
> Wenn ich nur wüsste, welchen du meinst ...

Wenn man das Flash ausliest, kommt am Ende eine Meldung
1
avrdude: safemode: Fuses OK (H:00, E:DA, L:FF)

Da sind E und H vertauscht. (Version 6.0.1, compiled on Oct 21 2013 at 
15:55:32)

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Der Bug war nur wenige Tage lang im Sourcecode, und der Fix fand sich
auch ziemlich schnell in einem Release.

Es ist unklar, warum zum Geier™ dieses hornalte Release nach wie vor
durch die Kante geistert. :(  Dieser Bug ist der, der am häufigsten
wohl mittlerweile berichtet worden ist, weil das ja auch jeder sofort
bemerkt.

: Bearbeitet durch Moderator
von Uhu U. (uhu)


Lesenswert?

Das Teil stammt aus dem Linux Mint 17 / Ubuntu Repositorium.

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


Lesenswert?

Uhu U. schrieb:
> Das Teil stammt aus dem Linux Mint 17 / Ubuntu Repositorium.

Dann beschwer' dich dort.  Aktuell ist die 6.3.

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.