M16C Speicher reservieren

Gast #210806
Lesenswert?

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
Gast #210808
Lesenswert?

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.
Gast #210809
Lesenswert?

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
}
Gast #210810
Lesenswert?

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

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