Hallo, Ich programmiere erst seit sehr kurzer Zeit uC. Ich möchte nun ein Flagregister anlegen, damit ich gewisse Zustände anzeigen kann. Wie reserviere ich mir den benötigten Speicher, damit es keine Probleme mit dem Rest des Programmes gibt? Vielen Dank für Eure Hilfe Michael B
Wenn ich z.B. Daten an ein Display senden will muss ich zuerst prüfen ob das Display Busy ist. Ist dies der Fall möchte ich also ein Flag in einem Register setzen können damit dann die Funktion dieses eine Bit prüfen kann. Es wäre nun praktisch wenn ich ein Register im Speicher reservieren könnte, wo ich dann die ganzen Flags unterbringen könnte. Sonst muss ich ja immer ein ganzes Byte benutzen.
ja ich geh jetzt mal davon aus das du in C Programmierst eine möglichkeit: Bit Felder typedef struct { uint8 bit0 : 1; uint8 bit1 : 1; uint8 bit2 : 1; . . . uint8 bit7 : 1; } bitfeld; bitfeld flag; flag.bit0=1; zu bitfelder ist allerdings zu sagen, dass hier durch optimierungen des compilers etwas anderes rauskommt (später im asm) als erwartet, d.h. größer sind als erwartet oder über masken #define BIT0 0x1 // 1b #define BIT1 0x2 // 10b #define BIT2 0x4 // 100b #define BIT3 0x8 #define BIT4 0x10 #define BIT5 0x20 #define BIT6 0x40 #define BIT7 0x80 setzten über flag|=BIT0; löschen über flag&=~BIT0; (~ Komplement) if(flag&BIT0) { //Wenn BIT0 gesetzt } if(!(flag&BIT0)) { //Wenn BIT0 nicht gesetzt }
nachtrag zu bitfelder es ist nicht nach ansi geregelt wie ein compiler bitfelder anlegen muss. Manche compiler bieten explizite anweisungen an um bitfelder so klein wie möglich zu machen. und in der regel wenn ein bitfeld aus acht bits besteht sind auch nur ein Byte was vom compiler an platz dafür vorgesehen wird. jedoch ich wiederhole, keine reglung durch ANSI
vielen dank für die infos zu den bitfeldern. probiere das problem einmal wie vorgeschlagen anzugehen.
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.