Variable ins EEPROM

#1685754
Lesenswert?

Für eine einzelne Variable hat man in der Tat nur die
Möglichkeit, mindestens ein Byte zu spendieren.

Aber bevor man sich jetzt lustig macht, gibt es noch
den Fall, daß man mehrere solcher Variablen (falls
vorhanden) zu einem Bitfeld zusammenfasst, dann kann man
bitgenau zugreifen. Dann ist es aber auch relevant,
unsigned zu nehmen, weil sich Compiler nicht unbedingt
gleich verhalten, wenn man signed mit einem Bit Lämge
nimmt. Es könnten dann nämlich (Zweierkomplement
vorausgesetzt) nur die Werte 0 oder -1 vorkommen,
nicht aber 1.

Also Bitfelder mit einem Bit sollten immer umsigned sein.
Persönliche Seite #1687159
Lesenswert?

Klaus Wachtler schrieb:
> Für eine einzelne Variable hat man in der Tat nur die
> Möglichkeit, mindestens ein Byte zu spendieren.
>
> Aber bevor man sich jetzt lustig macht, gibt es noch
> den Fall, daß man mehrere solcher Variablen (falls
> vorhanden) zu einem Bitfeld zusammenfasst, dann kann man
> bitgenau zugreifen. Dann ist es aber auch relevant,
> unsigned zu nehmen, weil sich Compiler nicht unbedingt
> gleich verhalten, wenn man signed mit einem Bit Lämge
> nimmt. Es könnten dann nämlich (Zweierkomplement
> vorausgesetzt) nur die Werte 0 oder -1 vorkommen,
> nicht aber 1.
>

Ist zwar nicht AVR, aber Keil-C kennt Bit als Datentyp und macht auch 
obiges draus.
Gast #1688151
Lesenswert?

Wenn ich nun diese Variable vergleichen will, ob sie 0 oder 1 ist,
kann ich dass dann so machen:

eeprom unsigned char Ist_moeglich = 0;

if(Ist_moeglich == 0)
{...}


Oder muss ich da '0' oder "0" schreiben?
Gast #1688355
Lesenswert?

Simone schrieb:
> Wenn ich nun diese Variable vergleichen will, ob sie 0 oder 1 ist,
> kann ich dass dann so machen:
>
> eeprom unsigned char Ist_moeglich = 0;
>
> if(Ist_moeglich == 0)
> {...}
>
>
> Oder muss ich da '0' oder "0" schreiben?

Vor allem musst Du die Variable erstmal wieder aus dem EEPROM in den 
SRAM auslesen, sonst wird das nix mit dem Vergleich...

siehe AVR-GCC-Tutorial: EEPROM
#1688645
Lesenswert?

ein unsigned bit haha ihr seid herrlich xD

nein ich hatte da mal was entworfen (war nicht so schwer) - ich wollte 
da ein Game of Life realisieren. Hatte mich für einen möglichst kleinen 
und damit billigen Controller entschieden. Das Feld war 16x16 groß (=> 
unsigned char array) = mind. 16*16 = 256 Byte. Schon das war zu viel für 
den µC (RAM  224 Byte)! Hab dann bischen (anfängermäßig) mit 
Bit-Shifting angefangen und dann logischerweise es auf ein Array von 
16*2 = 32 Byte reduzieren können. Seitdem ist es möglich sogar 3 dieser 
Array's zu betreieben um auch oszillierende Figuren erkennen zu können. 
Mehr dazu http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens
Ich poste gerne den code wenn erwünscht. Soviel zur kleinen Geschichte 
zum unsigned =)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren