Go Down

Topic: <avr/eeprom.h> & <EEPROM.h> (Read 1 time) previous topic - next topic

stoni99

Muss in meinem ESP8266-01 Werte in den EEPROM abspeichern welche größer sind als 256.

Hab hier auch was gefunden was prima im Arduino Uno funktioniert.

Leider kann ich <avr/eeprom.h> nicht im ESP kompilieren. Kommt immer die Meldung: Kann File nicht finden.

Sobald ich die Platine von Uno zu Generic ESP ändere zickt die IDE rum.

Gibt es noch andere Möglichkeiten >256 im EEPROM zu speichern?

gregorss

Muss ...
Stoned?

Ob ich verstehe, was Du meinst, kann ich nur vermuten ...

Speichere keine Bytes ab, sondern z. B. Ints. Zu EEPROM.h habe ich hier mal einen „Merkzettel" für mich zusammengetippt. Vielleicht hilft das.

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Serenifly

Der ESP ist kein AVR. Wie soll das also gehen?

stoni99

#3
Nov 08, 2015, 05:20 pm Last Edit: Nov 08, 2015, 05:37 pm by stoni99
Achso!

Ich wollte also mit dem Code "Fremdgehen" ?! ;-) Immer diese Anfänger...

Hab hier noch was gefunden:

Code: [Select]
// save value

int a = value/256;
int b = value % 256;

EEPROM.write(0,a);
EEPROM.write(1,b);

// read value

int a=EEPROM.read(0);
int b=EEPROM.read(1);

value = a*256+b;


Funktioniert im UNO aber:

Sorry, ich verstehe die Rechnung nicht.

Die Referenz bringt mich auch nicht sonderlich weiter.

Hab mir a & b mal im Terminal anzeigen lassen: value=1400 / a=5 / B=120
Wenn ich 1400/256 rechne = 5,47 !! (wird gerundet weil int? - wieso stimmt dann value = a*256+b;)
Wie komme ich mit int b = value % 256; auf 120?

Lasst mich nicht dumm sterben!! :smiley-mr-green:

combie

#4
Nov 08, 2015, 05:30 pm Last Edit: Nov 08, 2015, 05:31 pm by combie
Viele Dampfer....

Eben noch ESP8266....

Was auf dem UNO tut, kannste (alles) in die Tonne kloppen!
(erstmal, im einzelnen kann man ja prüfen)

Denn:
1. Der ESP hat kein EEPROM (nur eine Emulation)
2. Beim ESP sind int nicht 16, sondern 32 Bit breit
3. Die EEPROM Lib für AVR und ESP sind in der Lage solche Datentypen ohne jede Verrenkung zu speichern.

Klarer: Du machst dir einen Kopp um nix.

Wenn du beim ESP die EEPROM Emulation nutzen möchtest, dann tu das.
Lies die Doku dazu und dann men los!

Quote
Die Referenz bringt mich auch nicht sonderlich weiter.
Und was soll mir ein Link helfen, welcher auf deinen Rechner zeigt?
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

Serenifly

Quote
Wenn ich 1400/256 rechne = 5,47
Nein! Das ist eine Ganzzahl Division! Wird sind hier nicht in Python

Sorry, ich verstehe die Rechnung nicht.
Die Integer Division liefert das erste Byte. Die Modulo Division das zweite. Modulo = Rest einer Division

Einfacher macht man das mit Bit-Schieben:
Code: [Select]

int value = ...;

byte low = value;
byte high = value >> 8;

Also die Zahl einfach einem Byte zuweisen. Dadurch fällt automatisch das obere Byte weg. Man muss es nicht mal durch & ausmaskieren. Und dann 8 mal nach rechts schieben um das obere Byte zu bekommen


Auf dem Arduino gibt es in der EEPROM Lib bei neuen Version übrigens Funktionen die das automatisch erledigen. Die nehmen jeden beliebigen Typ (auch komplexere Typen wie structs) und und bearbeiten die Byte-weise.

stoni99

Danke!
Hab es verstanden.
Na prima wenn sich der ESP bei Integer Werten für EEPROM nicht verrenken muss. Ich liebe ihn immer mehr!

combie

Quote
Na prima wenn sich der ESP bei Integer Werten für EEPROM nicht verrenken muss. Ich liebe ihn immer mehr!
Das gilt auch für die Arduino AVRs
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

agmue

#8
Nov 08, 2015, 06:01 pm Last Edit: Nov 08, 2015, 06:03 pm by agmue
Hab es verstanden.
Ich bin nicht so schnell  :( , hier der Sketch zur Anschauung, wenn es die Lib mal nicht für Dich macht:
Code: [Select]
 unsigned int a = 1400;
  unsigned int b = a / 256;
  unsigned int c = a % 256;
  Serial.print("a = ");
  Serial.print(a);
  Serial.print("  b = ");
  Serial.print(b);
  Serial.print("  c = ");
  Serial.print(c);

Bei 32 Bit Integer dann eher so:
Code: [Select]
 unsigned int a = 77000000;
  byte b = a >> 24;
  byte c = a >> 16;
  byte d = a >> 8;
  byte e = a;
  Serial.print("a = ");
  Serial.print(a);
  Serial.print("  b = ");
  Serial.print(b);
  Serial.print("  c = ");
  Serial.print(c);
  Serial.print("  d = ");
  Serial.print(d);
  Serial.print("  e = ");
  Serial.print(e);

Quote
a = 77000000  b = 4  c = 150  d = 237  e = 64
Das habe ich auf einem teensy 3.2 probiert.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

stoni99

Danke!!

@combie:

Hab ich das richtig verstanden: Für den ESP muß ich eine extra EEPROM Lib laden um auch "int" direkt zu schreiben/lesen?

combie

#10
Nov 09, 2015, 02:08 pm Last Edit: Nov 09, 2015, 02:22 pm by combie
Quote
Hab ich das richtig verstanden: Für den ESP muß ich eine extra EEPROM Lib laden um auch "int" direkt zu schreiben/lesen?
Nix extra!
Habe ich nicht gesagt und auch nicht gedacht.

Verwende einfach die mitgelieferte Lib!
Was hält dich davon ab?
Die kann das.

Einfach #include <EEPROM.h> an den Anfang und die Lib steht dir zur Verfügung

Nochmal: Lies die Doku dazu!!!!
http://arduino.esp8266.com/versions/1.6.5-947-g39819f0/doc/reference.html
Spiele mit den Beispielen!

Verwende put() und get() um deine int zu schaufeln.




Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

stoni99


combie

Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

stoni99

Bräuchte mal ne deutsche Erklärung.

Dieser hier läuft auf meinem ESP.
Baue ich ihn auf int = 1400 um geht nix mehr...

combie

#14
Nov 09, 2015, 10:04 pm Last Edit: Nov 09, 2015, 10:05 pm by combie
Warum zeigst du deinen Code nicht?
Wie soll man denn so den Fehler finden?

Deutsche Erklärung.....
Wir sind hier bei den Computern... da ist halt 99,9% der Doku in Englisch....
Da wirste dich dran gewöhnen müssen.
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

Go Up