Forum: Mikrocontroller und Digitale Elektronik array mit variabler adresse ins eeprom


von mando (Gast)


Lesenswert?

Hallo,

ich will für einen RFID Türöffner das Array rfid_tag[5] ins Eeprom 
speichern und zwar an verschiedenen Adressen, die je nach Anzahl an 
bereits gespeicherten Rfidtags varriert. Anders ausgedrückt will ich 
diese Tags nacheinander ins Eeprom speichern. Hier mal mein teilweiser 
code:
1
void storetag (void) {  
2
  eeprom_write_block((void*)&rfid_tag,(void*)(6*cardcnt-5),sizeof(rfid_tag));
3
}

rfid_tag[5] enthält den 4*8bit breiten Rfidtag und cardcnt gibt die 
Anzahl der Karten an, die gespeichert sind. Die Tags sollen mit der 
Funktion storetag nacheinander ab Adresse 1 ins Eeprom geschrieben 
werden, allerdings funktioniert das nicht, sondern der Avr startet sich 
neu.

Was ist an dem Code falsch, bzw wie kann ich mein Problem lösen?

danke und mfg

von mando (Gast)


Lesenswert?

Hat keiner eine Idee, was falsch sein könnte?

mfg

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

mando schrieb:

> Hier mal mein teilweiser code:
>
>
1
> void storetag (void) {  
2
>   eeprom_write_block((void*)&rfid_tag,(void*)(6*cardcnt-5),sizeof(rfid_tag));
3
> }
4
>
>
> rfid_tag[5] enthält den 4*8bit breiten Rfidtag und cardcnt gibt die
> Anzahl der Karten an, die gespeichert sind.

Ich nehme mal an, dass rfid_tag als
1
unsigned char rfid_tag[5];

deklariert ist?

Dann ist da wohl ein "&" zu viel. rfid_tag ist ja bereits die Adresse 
des Bereichs, die Du ins EEPROM schreiben willst.

Besser wäre es trotzdem, wenn Du mehr von Deinem Code offenbaren 
würdest. So ist das nur Stochern im Nebel.

Gruß,

Frank

von mando (Gast)


Lesenswert?

Hallo nochmal,

das ganze habe ich jetzt mehrmals durchprobiert und ich glaube jetzt zu 
wissen, dass dem Tiny2313 der Ram ausgegangen ist. Da ich zum debuggen 
viele usart routinen drin hatte, war die Ramauslastung bis zu 97%. Als 
ich dann die meisten Routinen rausgekickt habe und unter 80% 
Ramausnutzung gekommen bin, funktionierte alles wieder. Bei höherer 
Ramnutzung ist der kleine avr irgendwo in den Funktionen 
steckengeblieben und hat sich dann neugestartet. Seltsam finde ich das 
schon, ich dachte immer der Compiler sagt mir wieviel Ram maximal 
genutzt wird....

Ich habe insgesamt mehrere Stunden an diesem code rumgekaut und alles 
mögliche ausprobiert, aber die Mühe hat sich am Ende gelohnt. Jetzt weiß 
ich, dass ich lieber einen Megaxx zum testen nehme, anstatt ein paar 
Cent zu sparen und dann Ärger zu haben.

grüße,
Mando

von mando (Gast)


Lesenswert?

Edit: Diesen Umweg über (void*)&rfid_tag musste ich nehmen, weil der 
Compiler bei alleinigem rfid_tag rumgemeckert hat. Die Variable rfid_tag 
habe ich übrigens global mit volatile unsigned char definiert.

mfg

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
Noch kein Account? Hier anmelden.