AVR Portzugriffe Warum kein volatile notwendig?

(Firma: www.dossmatik.de) #5726047
Lesenswert?

Wie macht der GCC die Portzugriffe, das diese nicht wegoptimiert werden?

1
 DDRB &= ~(1 << PB0);
So ist es ausreichend.

Von der C Sprache ist es ein Speicherzugriff, der nicht optimiert werden 
darf und dadurch ist volatile als Schlüsselwort notwendig. Ich habe 
gerade das Problem bei einem anderen Compiler und will es verstehen, wie 
der GCC es hinbekommt.
1
 *((volatile int*)0x2)=0x2;
#5726050
Lesenswert?

Der gcc hat im Makro DDRB ein volatile versteckt. Wenn man sich mal 
durch die Definitionen durchklickt erhält man (für einen Mega):
1
#define DDRB    _SFR_IO8(0x04)
2
#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
3
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))

Und da taucht volatile dann wieder auf.
(Firma: www.dossmatik.de) #5726056
Lesenswert?

Ntldr -. schrieb:
> Der gcc hat im Makro DDRB ein volatile versteckt. Wenn man sich mal
> durch die Definitionen durchklickt erhält man (für einen Mega):
>
>
1
> #define DDRB    _SFR_IO8(0x04)
2
> #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
3
> #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
4
>
>
> Und da taucht volatile dann wieder auf.

Das erste define hatte ich noch gesehen. Ich dachte alle Variablen mit 
beginnenden Unterstrich sind Positionen im Linkerscript und hatte nicht 
nach weiteren defines gesucht.
Was sind die __SFROFFSET beim ATMEL. Wann kommen die Offsets noch hinzu?
(Firma: www.dossmatik.de) #5726067
Lesenswert?

A. K. schrieb:
> René D. schrieb:
>> Was sind die __SFROFFSET beim ATMEL. Wann kommen die Offsets noch hinzu?
>
> Das ist eine Besonderheit des Adressraums der AVR Prozessoren.
> Verschiedene Befehle adressieren ihn mal mit mal ohne Offset. Und um das
> Leben interessanter zu gestalten, dokumentiert Atmel die Adressen mal
> mit und mal ohne Offset.

ICh habe schon im Datenblatt die Adressen und die Adressen in Klammern 
gesehen. das muss ich ausprobieren ob ich bei meinem Compiler noch den 
Offset brauche.
Beitrag #5727747 wurde von einem Moderator gelöscht.
Beitrag #5727828 wurde von einem Moderator gelöscht.
Beitrag #5727853 wurde von einem Moderator gelöscht.
Beitrag #5727857 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren