Bug bei FOR-Schleife ?

Gast #2664252
Hallo.

Hab gerade einige Zeit mit einer FOR-Schleife gekämpft.
( Eigentlich eher mit der Wirkung, weil der Fehler einen
ganz komischen Effekt - wie immer - ganz wo anders hatte :-( )

Hab folgenden Code:

for (tmp = 0; tmp < 100; tmp++) {
  mPrgSpeed[tmp] = eeprom_read_byte(&eSpeed[tmp]);
  mPrgLeft[tmp] = eeprom_read_dword(&eLeft[tmp]);
  mPrgRight[tmp] = eeprom_read_dword(&eRight[tmp]);
}

Bei eRight[0] steht 100 im EEProm. Wird auch so eingelesen, wenn
ich debugge. (mPrgRight[0] = 100) Sobald ich aber die Schleife verlasse 
ist mPrgRight[0] = 0.

Kann mir jemand sagen was da falsch läuft ?
Vor allem die gleiche Schleife als WHILE() läuft.

Vielen Dank,
Pepe.
Gast
OK, sorry.
Hier nochmal in lesbarer Form:

Die FOR-Schleife ist aber der "fehlerhafte" Code.
Ich setze einen Breakpoint direkt dahinter und mPrgRight[0] enthält
eine 0.
Pepe.
Gast
Hier mehr Code...

uint8_t  mPrgSpeed[99];
int32_t  mPrgLeft[99];
int32_t  mPrgRight[99];

uint8_t   eSpeed[99] EEMEM = {30, 30, ... }
int32_t   eLeft[99] EEMEM = {-100, -125, ... }
int32_t   eRight[99] EEMEM = {100, 125, ... }

void fVarSetup(void) {
  uint8_t tmp;

  for (tmp = 0; tmp < 100; tmp++) {
    mPrgSpeed[tmp] = (uint8_t) eeprom_read_byte(&eSpeed[tmp]);
    mPrgLeft[tmp] = (int32_t) eeprom_read_dword(&eLeft[tmp]);
    mPrgRight[tmp] = (int32_t) eeprom_read_dword(&eRight[tmp]);
  }

  if ((mActualPrg < 1) || (mActualPrg > 99)) !Hier kommt der Breakpoint 
!
  ...

}
Gast
@ Klaus Wachtler:
Hab zwar ne Lösung. Aber ich möchte gerade mal nicht wissen
wieviele FOR-Schleifen ich in meinem Leben schon geschrieben hab.
Macht mich ziemlich "nervös", wenn ich zu doof für ne FOR-Schleife
geworden bin...
Gast
Upps. Ok. Ich mach jetzt Wochenende.
Ich schreib jetzt mal nicht wie lang ich gesucht habe.
Gelegentlich sieht mal den Wald vor lauter Bäumen nicht.
Vielen Dank für die schnelle Hilfe.
Aus den Namen der Funktionen könnte man schlußfolgern, daß es sich 
möglicherweise um einen AVR handelt. Wieviel Platz hast du denn 
überhaupt in deinem EEPROM und dem RAM? Immerhin brauchen deine Arrays 
zusammen für jeden der beiden Speicher 891 Bytes.
Gast
Bei statischen Vektoren kann man das elegant so lösen:
1
#define N_VECT(v)     ( sizeof(v) / sizeof (*(v)) )
2
int vector[100] = { ... }
3
for (int i = 0; i < N_VECT(vector); i++) ..

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.