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;
imho gibt es in c keinen dateityp "bit". "char" sollte das kleinste sein mit 8 bit.
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.
>ich möchte für meinen ATmega16 eine Variable ins EEPROM deklarieren, die
Variablen packt man nicht ins EEPROM.
und ich meinte natürlich unsigned, nicht umsigned. Trotzdem ein schönes Wort!
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.
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?
oder if(!Ist_moeglich)... CodeVision kennt den Bit-Typ auch, und ich finde das verdammt praktisch.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.