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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.