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
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.
1 | void dataEinlesen(void) |
2 | {
|
3 | uint8_t i; |
4 | char send[30]; |
5 | |
6 | for( i = 0; i < 60; i++ ) |
7 | wodata[i] = einlesen( serData, i*2+4, 2 ); |
8 | |
9 | eeprom_write_block( wodata, eeFooByteArray1, sizeof(wodata) ); |
10 | |
11 | for( i = 0; i < 10; i += 3 ) { |
12 | sprintf( send, "Data %2d= %2d:%2d:%2d", |
13 | i, wodata[i], wodata[i+1], wodata[i+2] ); |
14 | uputsnl(send); |
15 | }
|
16 | }
|
Allerdings ist das nicht dein jetziges Problem. (Und ein paar Leerzeichen dann und wann sind der Code Lesbarkeit auch sehr zuträglich)
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
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
1 | 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.