Forum: Mikrocontroller und Digitale Elektronik Position der Variablen im EEProm bei gcc


von Hardy F. (hflor)


Lesenswert?

Hallo,

ich habe nun schon den halben Tag gesucht, jedoch keinen Beispielcode 
für die direkte Zuweisung einer Adresse im EEProm.

Wie geht das?

Hardy

von André A. (nummer5) Benutzerseite


Lesenswert?

Du erstellst einfach einen Zeiger auf den Datentyp und speicherst per 
Typecast die Adresse darin:
1
uint8_t *testbyte;
2
3
testbyte = (uint8_t*)0x10;
4
eeprom_write_byte(testbyte, 10);

Damit wird im EEPROM an der Adrese 0x10 eine 10 reingeschrieben.
In anderen Sprachen sollte es ähnlich gehen.

von Hardy F. (hflor)


Lesenswert?

Hallo André,

ich möchte aber nicht noch zusätzlichen RAM verbrauchen. Die Adressen 
sind ja fest, ich möchte sie einfach in der Definitionszeile der 
EEProm-Variable mit angeben.

Hardy

von André A. (nummer5) Benutzerseite


Lesenswert?

Das dürfte nicht gehen, jedenfalls nicht mit Standard C. Was du machen 
könntest wäre das ganze mit defines tricksen:
1
#define testbyte ((uint8_t*)0x10)
2
3
eeprom_write_byte(testbyte, 10);

Bei beiden Varianten darf du jedoch keinesfalls mehr mit EEMEM arbeiten, 
da es zu Adresskonflikten kommen kann.

Wenn es nicht unbedingt sein muss würde ich mit EEMEM arbeiten, das ist 
einfacher als sich über die Adressen selber gedanken zu machen.

von Kali (Gast)


Lesenswert?

>ich möchte sie einfach in der Definitionszeile der EEProm-Variable mit >angeben.

Du solltest vielleicht einmal schreiben, zu welchem Zweck Du das 
überhaupt möchtest. Dann wird vielleicht manches klarer und unsere 
Erklärungen sind zielgerichteter.

Die Formulierung
>die direkte Zuweisung einer Adresse im EEProm.

ist nämlich so unkorrekt (es fehlt das Objekt im Satz), das man sie 
deuten muss. Wem oder soll hier eine Adresse im EEPROM zugewiesen 
werden?

Man kann dafür sorgen, dass eine bestimmte Speicherstelle im EEPROM für 
irgendeinen Zweck benutzt wird und diese Adresse fest im Programm 
benennen (ohne zusätzlichen RAM-Speicher zu brauchen). Im allgemeinen 
ist das aber unnötig, da der Compiler bzw. der Linker selbst Adressen 
festlegen kann.

Hier kommen wir zum nächsten Problem. In welcher Sprache und mit welchem 
Compiler willst Du arbeiten?

von Hardy F. (hflor)


Lesenswert?

Hallo Kali,

ich möchte einfach einen festen Aufbau aller EEProms eines großen 
Steuerungssystem haben, um nicht jedes mal bei Auslesen erst nachschauen 
zu müssen, was an welcher Adresse gespeichert wird.

Es gibt aufgrund der Speicherplatzgröße des Atmel nun mehrere Programme, 
welche immer eine bestimmte Funktion erfüllen. Dadurch brauchen nicht 
alle Programme alle Variablen im EEProm.

Ich kann nun natürlich immer alle Variablen in den einzelnen Programmen 
mit aufnehmen, aber die Variante mit dem define der Adressen ist jetzt 
erst mal der Übersichtlicher.

> Hier kommen wir zum nächsten Problem. In welcher Sprache und mit welchem
> Compiler willst Du arbeiten?

Mit dem avr-gcc, welches mit winavr 20100110 installiert wurde.


Hardy

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.