www.mikrocontroller.net

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


Autor: mando (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
void storetag (void) {  
  eeprom_write_block((void*)&rfid_tag,(void*)(6*cardcnt-5),sizeof(rfid_tag));
}

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

Autor: mando (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee, was falsch sein könnte?

mfg

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mando schrieb:

> Hier mal mein teilweiser code:
>
>
> void storetag (void) {  
>   eeprom_write_block((void*)&rfid_tag,(void*)(6*cardcnt-5),sizeof(rfid_tag));
> }
> 
>
> 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
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

Autor: mando (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mando (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.