uint8t volatile uint16t?

Gast #621475
Lesenswert?
• ▲
▼
Hallo,
ich arbeite jetzt schon seit einiger Zeit mit AVR Mikrocontrollern 
(ATMega8 und Mega16). Jetzt hab ich mal ein paar grundlegende Fragen zur 
C Programmierung. Gibt es irgendwo eine genaue Erläuterung zu den 
Datentypen? Also was bedeute z.B. uint8t -- ein 8Bit Wert unsigned also 
ohne Vorzeichen Integer also ein Ganzzahl wert, aber wofür steht das 
letzte t? was bedeutet volatile und wann benutze ich es? Welche Werte 
kann ich noch definieren?

MFG Herbert
Gast #621480
Lesenswert?
• ▲
▼
und wann benutze ich eine globale Variable?
ich hab mal ein Beispiel:
1
uint8_t x;
2

3
void unterroutine(void);
4

5
int main (void)
6
{
7
while(1)
8
{  
9
unterroutine();
10
}
11
}
12

13
void unterroutine(void)
14
{
15
    x = 1;  
16
}

wann muss ich da jetzt volatile uint8_t x; machen
Gast #621521
Lesenswert?
• ▲
▼
Um genau zu sein bedeutet volatile, das der Compiler so codiert, das die 
Varibale vor Benutzung aus dem Speicher geladen wird.

Das ist wie geschrieben bei ISR, aber auch bei Multithreading nützlich.
#621542
Lesenswert?
• ▲
▼
Und um noch genauer zu sein, teilt das volatile dem Compiler
mit, dass er auf dieser Variablen keine Optimierungen machen
darf.
volatile heist im Englischen 'flüchtig, vergänglich, unbeständig'
Und genau so soll der Compiler den Inhalt einer Variablen auch
behandeln: Den Wert der jetzt gerade in einer Variablen gespeichert
ist, kann im nächsten Moment schon ein ganz anderer sein. Und zwar
ohne dass der Compiler die Ursache dafür herausfinden könnte.

Denk einfach mal an eine Hardwareuhr, die im Speicher wie eine
Variable gemappt ist. Jedes mal, wenn diese Variable ausgelesen
wird, kriegst du einen anderen Wert. Und zwar ohne daß man
das im restlichen Programm irgendwie erkennen könnte. Daher
darf der Compiler nicht hergehen und sich sagen: "Oh, diese
Variable hab ich gerade vorher schon ausgelesen. Der Wert lungert
da noch in einem Register herum. Wenn ich den Wert gleich vom
Register wiederverwende anstatt ihn aus dem Speicher zu lesen,
kann ich eine Menge Zeit einsparen."

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