www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable ins EEPROM


Autor: Simone (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: ←↓→ (Gast)
Datum:

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

Autor: NurEinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und unsigned bit ist doch mal was neues :-)

Autor: gasst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

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

Variablen packt man nicht ins EEPROM.

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simone (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0


....

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder
if(!Ist_moeglich)...

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

Autor: Shuzz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.