Zitat Zitat von funky78
Zitat Zitat von SprinterSB
...falls du nicht irgend ne Sonderfunktion aktiviert hast.
Iccccccccccccccchhhhhhhhhhhh und Sonderfunktionen... [-( weiß nicht mal wie man das schreibt
Scherzkeks, du verwendest zu Beispiel den UART

--------------------------------------------------

In C gibt es Pointer Arithmetik. Auf Pointer kann man ganzzahlige Werte draufaddieren und abziehen. Dabei wird der Pointer um so viel weiter gezählt, wie die Größe des Typs, auf den er deklariert wurde:

Beispiel:
short wert;
short *p;
p = &wert; // & = Adressoperator, wenn als Prefix verwendet.
// kurz: short *p = &wert;

Mit p += 1 wird p um 2 (ein short ist 2 Byte lang) weitergezählt.
In diesem Fall zeigt p allerdings auf einen undefinierten Speicherbereich.

Man benutzt das gerne, um Arrays zu durchlaufen. Zum Dereferenzieren schreibt man ein * davor.
p ist also ein Zeiger
*p ist der Wert dessen, worauf er zeigt
&p ist die Adresse von p, vom Typ short**, also Zeiger auf Zeiger auf short.
Mit *p = 3 weist man wert den Wert 3 zu.

Eigentlich sind Pointer in C fast normale Variablen, und man kann auch int und einen Pointer umwandeln:
p = (short*) 100; ist ein Zeiger auf die Speicherzellen 100/101
und mit *p=0 kann man diese beiden Speicherstellen löschen.

Da stehts etwas besser erklärt:
http://www.cl.uni-heidelberg.de/kurs...l/page023.html

Edit:
Nach dem while kommt ja eine Leeranweisung, ist diese unbedingt nötig?
Ja, eine Leeranweisung ist notwendig. Zu while gehört genau ein Block, also
while (bedingung)
;
oder
while (bedingung)
{}

Sonst wird dein C-Compiler das UDR = ..., das darauf folgt, als while-Block ausführen.