Hallo, ich habe eigentlich eine ganz einfache Frage. Ich möchte in der elf Datei Daten anlegen und zwar mit einer bestimmten adresse. Wenn ich diese ausdruck nutze: uint8_t eeFooByte EEMEM = 125; wird die Zahl ja irgendwo abgeleft aber ich weiß nicht welche Adresse eeFooByte ist. Ich möchte die 125 an die Adresse 1 setzen....
Meinst du wirklich Adr. 1? Oder doch eher 0? Die werden einfach der Reihe nach angelegt. Und willst du sie wirklich auf Adresse 1 haben, dann pack halt noch ein dummy-Byte davor. uint8_t dummy EEMEM=0xff; //Adresse 0 uint8_t eeFooByte EEMEM = 125; //Adresse 1 Ne absolute Adresszuweisung ist das natürlich nicht, sollte man schon mal kontrollieren. Frühere AVRs ohne brownout hatten regelmässig Problem mit Zelle 0 des EEPROMs. Manche Compiler haben diese aus diesem Grund nicht benutzt, da gings ab Adresse 1 los. Bleibt die Frage, warum du die Variable auf eine feste Adresse haben wilst - benötigst du die irgendwo im Programm, macht der Compiler das schon richtig :-)
unsigned char eeFooByte = 125; eeprom_write_byte((unsigned char*)1, eeFooByte); Das musst du dann aber im Programm immer so machen. Wenn du das mit unsigned char EEMEM eeFooByte2 = 126; mischt, benutzt der Compiler ziemlich sicher Adressen, die du schon selbst verwendest. D.h. du musst deinen Speicher selbst verwalten. mfg.
@Thomas: Diese Zuweisung kann ich nicht zur Compilerzeit machen bzw das geht nicht direkt in die eep datei(hab mich im anfanspost verschrieben) Wenn ich das hier mache uint8_t eeFooByte EEMEM = 125; uint8_t eeFooByte1 EEMEM = 126; uint8_t eeFooByte2 EEMEM = 127; sieht die eep so aus :030000007D7E7F83 :00000001FF Zweite Zeile steht immer da, ist also klar. Die 3 in Zeile 1 ist die Anzahl der Einträger. 7D 7E 7F sind die Daten. Hier kann man ja schonmal von ausgehen das eeFooByte nicht adresse 0 ist oder? Ich will die eep später mit ner exe öffnen können und über eine Oberfläche die Daten ändern, deshalb möchte ich das ich bei Adresse 1 Anfange, Adresse 0 würde auch gehen.
Peter schrieb: > @Thomas: Diese Zuweisung kann ich nicht zur Compilerzeit machen bzw das > geht nicht direkt in die eep datei(hab mich im anfanspost verschrieben) Die wird meiner Meinung nach sowieso überschätzt. Ich bevorzuge es, wenn meine Programme selber eine Funktion enthalten, die die Werte ins EEPROM schreiben anstatt sich darauf zu verlassen, dass die Werte über eine EEP Datei gebrannt werden. Auf die Art gibt es dann auch eine Möglichkeit, wie man den µC auf 'Factory-Default' zurückstellen kann. Und zwar ganz ohne einen Brenner oder eine EEP Datei zur Verfügung haben zu müssen. > sieht die eep so aus > > :030000007D7E7F83 > :00000001FF > > Zweite Zeile steht immer da, ist also klar. Die 3 in Zeile 1 ist die > Anzahl der Einträger. > 7D 7E 7F sind die Daten. Hier kann man ja schonmal von ausgehen das > eeFooByte nicht adresse 0 ist oder? Das Intel-Hex Format ist gut dokumentiert. Anstatt raten such dir lieber die Beschreibung mittels Google.
Dann musstes so machen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Bytes_lesen.2Fschreiben Die Adressen dann eben als defines mits übersichtlich bleibt.
Peter schrieb: > sieht die eep so aus > > :030000007D7E7F83 > > :00000001FF Das ist Hex-Intel. Das gleiche Format, wie bei der Programmdatei. Besorg oder Schreib dir einen Editor dafür. mfg.
Peter schrieb: > Ich will die eep später mit ner exe öffnen können und über eine > Oberfläche die Daten ändern, deshalb möchte ich das ich bei Adresse 1 > Anfange, Adresse 0 würde auch gehen. Dann ist es aber nicht zielführend, den Compiler die Adressvergabe machen zu lassen. Im Programm verwendest du dann nur noch absolute Adressen und dein PC-Programm erzeugt, verändert und schreibt selbst das EEP File. Noch besser, da muss allerdings dann auch die Hardware dafür passen, ist es allerdings, wenn dein PC-Programm direkt mit dem µC kommuniziert und dem µC direkt mitteilt, welche Einstellung wie zu ändern ist. Ganz ohne EEP File. Und dann ist es wiederrum (fast) egal, wo im EEPROM welcher Wert gespeichert wird. Denn Schreiben und Lesen erledigt ausschliesslich der µC selber.
Naja die exe soll nachher die Hex zahlen ändern.Und da ich ja weiß an welcher stelle diese stehen sollte das kein problem sein. Habe eben rausbekommen wie es abgespeichert ist. eeFooByte fängt tatsächlich bei adresse 0 an und wird dann mit jedem weiteren byte um 1 erhöht. Ich denke damit sollte ich arbeiten können. danke erstmal
Peter schrieb: > Naja die exe soll nachher die Hex zahlen ändern.Und da ich ja weiß an > welcher stelle diese stehen sollte das kein problem sein. Habe eben > rausbekommen wie es abgespeichert ist. eeFooByte fängt tatsächlich bei > adresse 0 an und wird dann mit jedem weiteren byte um 1 erhöht. Ich > denke damit sollte ich arbeiten können. danke erstmal Dei einzige reale Gefahr geht davon aus, dass sich die Lage einzelner Bytes durch hinzufügen von weiteren Einstell-'Variablen' verändern kann. Daher: Alles was im EEPROM landen soll, nur in einer Datei sammeln und neuen Werte immer hinten anfügen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.