Forum: Mikrocontroller und Digitale Elektronik Variable ins EEPROM


von Simone (Gast)


Lesenswert?

Hallo,

ich möchte für meinen ATmega16 eine Variable ins EEPROM deklarieren, die 
entweder 0 oder 1 sein kann.
Was für einen Datentyp wähle ich da am Besten?

eeprom unsigned char Ist_moeglich = 0;
oder
eeprom unsigned bit Ist_moeglich = 0;

von ←↓→ (Gast)


Lesenswert?

imho gibt es in c keinen dateityp "bit".
"char" sollte das kleinste sein mit 8 bit.

von NurEinGast (Gast)


Lesenswert?

... und unsigned bit ist doch mal was neues :-)

von gasst (Gast)


Lesenswert?

:)

von Klaus W. (mfgkw)


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.

von holger (Gast)


Lesenswert?

>ich möchte für meinen ATmega16 eine Variable ins EEPROM deklarieren, die

Variablen packt man nicht ins EEPROM.

von Klaus W. (mfgkw)


Lesenswert?

und ich meinte natürlich unsigned, nicht umsigned.
Trotzdem ein schönes Wort!

von Abdul K. (ehydra) Benutzerseite


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.

von Simone (Gast)


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?

von Klaus W. (mfgkw)


Lesenswert?

0


....

von H.Joachim S. (crazyhorse)


Lesenswert?

oder
if(!Ist_moeglich)...

CodeVision kennt den Bit-Typ auch, und ich finde das verdammt praktisch.

von Shuzz (Gast)


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

von Lehrmann M. (ubimbo)


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 =)

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.