Forum: Gesperrte Threads Eeprom Hilfe !


von Dirk k. (Gast)


Lesenswert?

Ich versuche schon die ganze Zeit mit der EEprom Block Anweisung einmal 
einen int Wert und einmal einen char Wert in's EEprom zu schreiben .
Hier mal ein Versuch von mir :

eeprom_busy_wait();
eeprom_read_block(&code_length,(uint8_t*)0,1); 
eeprom_busy_wait();
eeprom_read_block(&code_fest  ,(uint8_t*)20, sizeof(code_fest));

...analog dazu habe ich die write Anweisung gemacht

Um den genauen Platz im EEprom-Speicher habe ich mich erstmal selbst 
gekümmert wie man sieht .
Ich habe zwar schon rumgesucht aber keine Antworten gefunden .
Vielleicht hat ja jemand eben die Geduld mir zu erklären welche 
Variablen und Daten wie von dieser Anweisung erwartet werden .
Eben einmal für char Variablen mit gespeicherten Zahlen
und einmal für int Variablen mit gespeicherten Zahlen ?!

: Verschoben durch User
von Dirk k. (Gast)


Lesenswert?

Achja Controller AtMega168 und code_length ist ein char und
code_fest ist eine int .

von Dirk k. (Gast)


Lesenswert?

Keiner irgendeinen Tipp .Das Tutorial bringt mich hier auch nicht weiter 
:S

von anfängor (Gast)


Lesenswert?

dann hast du das tut nicht gelesen bzw halbwegs verstanden ...

Bytes lesen/schreiben

Die avr-libc Funktion zum Lesen eines Bytes heißt eeprom_read_byte. 
Parameter ist die Adresse des Bytes im EEPROM. Geschrieben wird über die 
Funktion eeprom_write_byte mit den Parametern Adresse und Inhalt

Block lesen/schreiben

Lesen und Schreiben von Datenblöcken erfolgt über die Funktionen 
eeprom_read_block() bzw. eeprom_write_block(). Die Funktionen erwarten 
drei Parameter: die Adresse der Quell- bzw. Zieldaten im RAM, die 
EEPROM-Addresse und die Länge des Datenblocks in Bytes (size_t).

wenn du jetzt noch den hinweis auf die avrlib liest ...
http://www.nongnu.org/avr-libc/user-manual/modules.html
und unter eeprom nachschaust
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

aber anscheinend hast du nichmal C verstanden ..
sonst wüstest du weil dein compiler gemeckert hätte das
1
eeprom_read_block(&code_length,(uint8_t*)0,1);

schonmal nicht gehen kann

von SF (Gast)


Lesenswert?

Hier mal ein Beispiel, wie man ein Byte (my_ee_byte) und ein unsigned 
int (my_ee_uint) im Eeprom definiert und später in der Hauptschleife in 
zwei Ram Variablen (my_ram_byte und my_ram_uint) ausliest:
1
#include <avr/io.h>
2
#include <avr/eeprom.h>
3
4
// initialize eeprom data
5
uint8_t   my_ee_byte EEMEM = 123;
6
uint16_t  my_ee_uint EEMEM = 12345;
7
8
9
int main(void){
10
uint8_t   my_ram_byte;
11
uint16_t   my_ram_uint;
12
13
  // main loop
14
  for(;;){
15
    // read eeprom variables
16
    eeprom_read_block(&my_ram_byte,&my_ee_byte,sizeof(my_ram_byte));
17
    eeprom_read_block(&my_ram_uint,&my_ee_uint,sizeof(my_ram_uint));
18
  };
19
20
  return(0);
21
}

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wichtige Regeln - erst lesen, dann posten!
•Aussagekräftigen Betreff wählen
•Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.