ich versuche grade mein array im eeprom des atmega128 zu speichern,beim
lesen aus dem eeprom erhalte ich komische werte auch das vorzeichen wird
nich richtig gelesen.
die Routinen sind hier aus dem Tutorial.
Muss ich denn anstatt EEWritebyte denn EEWriteWort benutzen
bitte um Nachsicht.
int i;
signed int Wert[19];
Wert[1] = -20;
for(i=0; i<19; i++)
{
EEPWriteWort( 10+i,Wert[i]);
}
for(i=0; i<19; i++)
{
Wert[i]=EEPReadWort(10+i);
}
ich hab das jetzt so aber so gehts auch nicht.
Denn beim Compilieren kommen 2 Warnings bei eeprom_write_word und
eeprom_read_word.
vielleicht kann von ihnen noch einer weiterhelfen
mfg
Erstmal vielen Dank für ihre Hilfe,
Die daten im array werden ja während das Programm im Atmega läuft
ja auch verändert ,mein Problem ist ja wie ich das vorzeichen zb.-20
im eeprom speichern und lesen kann.
mfg
Verwende den richtigen Typ und fertig.
Ums Vorzeichen brauchst dich dann ebensowenig zu kümmern wie darum, ob
die Zahl gerade ist oder ungerade oder ne Primzahl.
Was verstehst du am oben verlinkten Tutorial nicht?
Wenn ich mein array als int wert[19] Deklariere und mit den Funktionen
aus dem Tutorial
eepreadbyte und eepwritebyte kann ich das array an die gewünschte
adresse speichern und lesen aber ohne Vorzeichen und so wie ichs jetzt
habe gehts nicht das ist zurzeit mein problem.
wie muss ich den richtigen Type verwenden?
mfg
neuling schrieb:> Wenn ich mein array als int wert[19] Deklariere und mit den Funktionen> aus dem Tutorial> eepreadbyte und eepwritebyte
vergiss ee_read_byte bzw. ee_write_byte
Du hast nun mal keine einzelnen Bytes!
Du kannst dein Array im weitesten Sinne als einen Block von Bytes
auffassen und damit ee_read_block bzw. ee_write_block benutzen, so wie
Vlad das da oben gezeigt hat.
Klar bricht sich diese Funktion das dann auch wieder in Bytes runter.
Aber danmn macht es die Funktion und du brauchst es nicht machen.
Ist doch ganz einfach.
neuling schrieb:> Wenn ich mein array als int wert[19] Deklariere und mit den Funktionen> aus dem Tutorial> eepreadbyte und eepwritebyte kann ich das array an die gewünschte> adresse speichern und lesen aber ohne Vorzeichen
Dein Problem war nicht das Vorzeichen an sich, sondern dass du ganz am
Anfang nur die Hälfte gespeichert bzw. gelesen hast.
Du musst zwischen 'Problem' und 'Symptom' unterscheiden lernen. Was du
gesehen hast war das Symptom. Dein Problem war aber ein ganz anderes.
hallo,
Mit Stucts habe ich bisher noch nicht gearbeitet,
ich hab 2 Drehencoder einen für die array-nummer 1-19 ist gleichzeitig
auch die eep-adresse, der andere stellt den wert ein im array.
Die eep-werte weiss ich vorher nicht wird über den Drehencoder
eingestellt daher weiss ich auch nicht wie ich die eep-adresse mit dem
struct einstellen kann.
ich habs jetzt so meine werte werden auch gespeichert, nun kommen
allerdings 2 warnings:
passing argument 2 of 'eeprom_write_block' makes pointer from integer
without a cast
passing argument 2 of 'eeprom_read_word' makes pointer from integer
without a cast
mfg
neuling schrieb:> hallo,> Mit Stucts habe ich bisher noch nicht gearbeitet,
dann lass sie weg.
> ich habs jetzt so meine werte werden auch gespeichert, nun kommen> allerdings 2 warnings:> passing argument 2 of 'eeprom_write_block' makes pointer from integer> without a cast> passing argument 2 of 'eeprom_read_word' makes pointer from integer> without a cast>>> mfg>>
1
>signedintWert[19];
2
>intb=0x20;//eep-adresse
3
>Wert[1]=-20;
4
>Wert[8]=-18;
5
>
6
>
7
>
8
>eeprom_write_word(Wert,b,sizeof(Wert));
9
>
10
>
11
>
12
>Wert[i]=eeprom_read_word(Wert,b,sizeof(Wert));
13
>
14
>
15
>
wie passt diese 'Code' zu einer Fehlermeldung die über eine Funktion
eeprom_write_block spricht? Richtig. Gar nicht.
* Möglichkeit 1
1
intWert[0];
2
intWert_Eeprom[19]EEMEM;
3
4
// nur einen einzelnen Wert aus dem Array im EEPROM transferieren
* Möglichkeit 3
Mischen von Mögl. 2 und Mögl. 1
Am Anfang des Programm werden alle Werte auf einmal ins SRAM
übertragen. Wird ein Wert verändert, dann wird dieser eine Wert
und nur dieser eine Wert wieder ins EEprom zurückgeschrieben
neuling schrieb:> ich habs jetzt so meine werte werden auch gespeichert, nun kommen> allerdings 2 warnings:> passing argument 2 of 'eeprom_write_block' makes pointer from integer> without a cast> passing argument 2 of 'eeprom_read_word' makes pointer from integer> without a cast
das wird auch nicht funktionieren
du hast ein array mit intwerten (2 byte breit)
und du indizierst einen Byte-Addressierten Speicher mit den in deimem
Wert enthaltenen fortlaufenden Adressen
das eeprom-Layout sieht also folgender maßen aus:
1
Byte 1 2 3 4 5 6 7 8 9 ...
2
Daten [ 0][ 1][ 2][ 3] ...
3
4
Du beschreibst aber so:
5
Byte 1 2 3 4 5 6 7 8 9 ...
6
Daten [ 0]
7
[ 1]
8
[ 2]
9
[ 3] ...
Deine geschriebene Werte überlappen sich.
MAch es vernünftig.
Leg eine eeprom-Variable ab und beschreib diese, so wie ich es oben
geschrieben habe.
1
intEEMEMg_eepromWert[19];// this reserves place in eeprom
erstmal vielen Dank an ihnen,
ich habe jetzt noch eine Frage,ich möchte gerne die eeprom schreib und
lese routine in eine Funktion legen, doch leider kommt ein error und 2
warnings beim block lesen und schreiben.
vielleicht kann mir von ihnen noch ein tipp geben.
mfg
neuling schrieb:> Aufruf zum lesen> EEPReadBlock(0x20,int Wert);
Naja, DAS kann ja nicht gehen... Mehr verrat' ich nicht, da Du uns ja
auch nicht die Fehlermeldungen verraten willst :-P
die Fehlermeldung lautet:
EEPReadBlock:
passing argument 2 of 'eeprom_write_block' makes pointer from integer
without a cast
invalid use of void expression
EEPWriteBlock:
passing argument 2 of 'eeprom_write_block' makes pointer from integer
without a cast
mfg
neuling schrieb:> vielleicht kann mir von ihnen noch ein tipp geben.
Ja.
Warum versuchst du schon wieder dein eigenes Süppchen zu kochen, wenn du
nichts davon verstehst?
Kauf dir ein C-Buch und arbeite es durch. Irgendwann wird dir der
Unterschied zwischen Adressen und 'Wert an einer Adresse' unterkommen
und dann arbeitest du die im Buch angegebenen Übungen besonders
sorgfältig durch. So jedenfalls macht das momentan überhaupt keinen
Sinn. Du schreibst einfach irgendwas hin und hoffst, das das richtige
schon dabei sein wird.