Forum: Mikrocontroller und Digitale Elektronik uint8t volatile uint16t?


von Herbert (Gast)


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

von M80 (Gast)


Lesenswert?

Volatile steht für eine Globale Variable
_t für Typ

von Herbert (Gast)


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

von M80 (Gast)


Lesenswert?

Volatile uint8_t x;

void unterroutine(void);

int main (void)
{
while(1)
{
unterroutine();
PORTB = x;
}
}

void unterroutine(void)
{
    x = 1;
}

Globale Variablen sind von jeder Funktion sichtbar und
können von jeder Funktion verändert werden.

Lokale Variablen sind nur innerhalb einer Funktion sichtbar.
Steht auch in jedem C Buch.

http://www.pronix.de/pronix-925.html

von Simon K. (simon) Benutzerseite


Lesenswert?

@M80: Ja, aber das Volatile muss da nicht hin.

Globale Variablen müssen erst volatile deklariert werden, wenn man ISR 
(interrupt service routine) deklariert und diese auf die variable 
zugreifen.

von Herbert (Gast)


Lesenswert?

ah super, danke jetzt wird mir das ganze auch schlüssig. Ein Bekannter 
von mir hat mir nämlich mal was geschrieben wo volatile Werte vorkamen.
Vielen Dank

von MNR (Gast)


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.

von Karl H. (kbuchegg)


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."

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.