kleines C Problem - brauch mal Hilfe

OP #444215
Lesenswert?
• ▲
▼
Hallo,
So nach drei Tagen Fehlersuche habe ich mein Problem auf ein minimum 
reduziert, hab schon nach Hardwarefehler gesucht.
Compiler ist der WinARM GCC Optimierung ist aus

U8 ist als unsigned Char definiert

Der adcbuffer[] wird in ner Timerinterupptroutine mit ner Konstanten 
(10) gefüllt. Hab ich testweise gemacht um ein ADC Fehler 
auszuschliessen.

Es sollten sich so im ganzen buffer die gleichen Werte befinden.


U8 dx,dy,dc,dd;
volatile U8 temp;

while(1) {
dc=adcbuffer[temp];
dd=adcbuffer[temp-1];

if (dc!=dd) {rprintf("%d %d\r",dd,dc);}

temp--;

}

Wenn temp den Wert 0 annimmt tritt ein Fehler auf.

Ich bin bisher davon ausgegangen das temp einen Wertebereich von 0-255 
hat. ???
Wenn temp den Wert 0 annimmt erhalte ich als Ausgabe auf dem 
Terminelprg.

182 10

In diesem Fall scheint adcbuffer[temp-1] der temp Wert aus dem 
Wertebereich  (0-255) herauszuhüpfen und übergibt mir nen falschen 
Bufferwert.

Wie sorge ich nun in C dafuer das bei temp 0 temp-1 auch wirklich 255 
ist ?   oder wo mach ansonsten den Gedankenfehler.

gruß,
Bjoern

#444223
Lesenswert?
• ▲
▼
> Wenn temp den Wert 0 annimmt tritt ein Fehler auf.

Ja logisch.
Das Arrayelement adcbuffer[-1] existiert nicht.
Also kannst du dort auch nicht zugreifen um den
Wert von dort zu lesen.

Auch wenn temp den Datentyp unsigned char hat, so werden
arithmetische Ausdrücke in C immer als int (oder long)
durchgeführt. Mit anderen Worten, dein temp-1
wird gerechnet als
   ((unsigned int)temp)-1)

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