www.mikrocontroller.net

Forum: Compiler & IDEs eprom schreiben


Autor: Wolfgang Hopperdietzel (hastekene)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ich hab ein kleines Problem bezüglich Daten in Eprom schreiben

void dataEinlesen(void){
  uint8_t i=0;
    char send[30];

  while(i<60){wodata[i]=einlesen(serData,i*2+4,2);i++;}

  eeprom_write_block(wodata,eeFooByteArray1,sizeof(wodata));
// save 60 byte pro Block

//Ausgabe
  i=0;
  while (i<10){

      sprintf( send, "Data %2d= %2d:%2d:%2d", 
i,wodata[i],wodata[i+1],wodata[i+2] );
      uputsnl(send);
      i+=3;
      }
// Ende Ausgabe
}

Wenn ich die Daten mit nachfolgender Ausgabe in das EEPROM schreibe habe 
ich die daten auch da nur erfolgr keine serielle Ausgabe statt dessen 
erfolgt ein interner reset

lasse ich die serielle Ausgabe weg werden keine Daten in das EEPROM 
gespeichert

MCU atmega32
Taktfrequenz 12MHz

uint8_t eeFooByteArray1[70] EEPROM ;

der Compiler bringt keine Fehler oder Warnungen

kann mir da vielleicht jemand auf die Sprünge helfen

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

Bewertung
0 lesenswert
nicht lesenswert
Poste das komplette Programm. Im obigen Schnipsel fehlt zuviel, als das 
man was Genaueres sagen kann.
Wie ist wodata definiert?

PS: deine while Schleifen wären besser als for Schleifen gebaut, dadurch 
sieht man besser über welche Zahlenbereiche die Laufvariable läuft und 
wie sie inkrementiert wird, weil alle 3 Angaben beisammen bleiben und 
nicht über die ganze Schleife verstreut werden.
void dataEinlesen(void)
{
  uint8_t i;
  char send[30];

  for( i = 0; i < 60; i++ )
    wodata[i] = einlesen( serData, i*2+4, 2 );

  eeprom_write_block( wodata, eeFooByteArray1, sizeof(wodata) );

  for( i = 0; i < 10; i += 3 ) {
    sprintf( send, "Data %2d= %2d:%2d:%2d",
                    i, wodata[i], wodata[i+1], wodata[i+2] );
    uputsnl(send);
  }
}

Allerdings ist das nicht dein jetziges Problem. (Und ein paar 
Leerzeichen dann und wann sind der Code Lesbarkeit auch sehr zuträglich)

Autor: Wolfgang Hopperdietzel (hastekene)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Karl Heinz,
anbei mein bisheriges Projekt die while schleifen habe ich mit for 
ersetzt
und das Projekt in der Anzeige etwas aufgelockert.
ich habe immer noch das gleiche Problem mit eeprom schreiben.

vielleicht findest du etwas .

Anderes Problem ich arbeite die Routine Relais_ausgeben() alle sekunde 
ab
sobald ich es in die while schleife im Main lege versaut sie meine LCD 
Anzeige .

vielleicht hast du ja einen tip

Autor: Wolfgang Hopperdietzel (hastekene)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ich hab den Fehler wegen dem Reset beim Speichern gefunden .Ich 
weiß nur nicht warum sich die CPU aufhängt ?



//---------------- String in Integer umwandeln -------
// Start = 1.Position im String
// Max    = länge des umzuwandelnden Strings
int einlesen(char *data,uint8_t start,uint8_t max){
uint8_t i;
int  wert;

char s[max+1];

for(i=start;i<(start+max);i++) s[i-start]= data[i];

s[max+1]='\0';      //String abschliesen
wert= atoi(s);
return wert;
}


es werden nur numerische stringvariablen in data geschrieben und sollen 
entsprechend der anzahl String /Zahl in max
in einen realen wert mit atoi umgewandelt werden
 Kann mir vielleicht jemand sagen wo hier mein Fehler liegt ?

Danke im Vorraus

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s[max+1]='\0';
Hier schreibst du hinter das Ende vom Array. Und da s auf dem Stack 
liegt, überschreibst du dabei einen Teil der Rücksprungadresse.

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.