www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uint8t volatile uint16t?


Autor: Herbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: M80 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volatile steht für eine Globale Variable
_t für Typ

Autor: Herbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wann benutze ich eine globale Variable?
ich hab mal ein Beispiel:
uint8_t x;

void unterroutine(void);

int main (void)
{
while(1)
{  
unterroutine();
}
}

void unterroutine(void)
{
    x = 1;  
}

wann muss ich da jetzt volatile uint8_t x; machen

Autor: M80 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Herbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.