avr port übergeben warum volatile

Gast #3215139
Lesenswert?

Hallo,


Laut wikipedia wird volatile in c verwendet um anzuzeigen, dass sich ein 
Wert jederzeit ändern kann, vgl. 
http://de.wikipedia.org/wiki/Volatile_(Informatik)


Wenn man einen Port als Parameter übergeben möchte, muss man in der 
Parameterliste volatile benutzen, vgl.:
1
void set_bits_func_correct (volatile uint8_t *port, uint8_t mask)
2
{
3
    *port |= mask;
4
}
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass


Hier wird die Adresse eines Portes übergeben, die sich jedoch nicht 
ändern sollte. Wozu wird das volatile dann benötigt? Was hat es zu 
bedeuten?

Vielen Dank und Viele Grüße
Michael
Gast #3215181
Lesenswert?

Danke für alle Antworten.

volatile bezieht sich also auf den Inhalt des Ports. Könnte man dann 
nicht auf volatile verzichten, falls keine Interrupts verwendet werden, 
die den Inhalt des Ports verändern könnten?

Viele Grüße
Michael
#3215199
Lesenswert?

@michael (Gast)

>nicht auf volatile verzichten, falls keine Interrupts verwendet werden,
>die den Inhalt des Ports verändern könnten?

Nein. Denn die HARDWARE verändert die Ports. Ausserdem willst du nicht, 
das Zugriffe, egal ob Lesen oder Schreiben, vielleicht wegoptimiert 
werden. EIn Portzugiff muss so augeführt werden wie er dasteht.
#3215227
Lesenswert?

michael schrieb:
> Danke für alle Antworten.
>
> volatile bezieht sich also auf den Inhalt des Ports. Könnte man dann
> nicht auf volatile verzichten, falls keine Interrupts verwendet werden,
> die den Inhalt des Ports verändern könnten?

Dann überleg mal, welche Möglichkeiten du dem Compiler ermöglichst, wenn 
du mittels

   PORTB |= (1 << PB0);
   PORTB |= (1 << PB1);

eigentlich eine geordnete Reihenfolge haben möchtest, in der die Pins 
auf 1 gehen und was ein Compiler daraus machen könnte, wenn er nicht an 
volatile gebunden wäre.

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