festes prozessorregister für Flags

Gast #549225
Lesenswert?
• ▲
▼
Hallo zusammen,

mal ne frage:
Ich schreibe an einem Programm, das überwiegend von Hard- und 
Softwareinterupts gesteuert wird. Das Program greift sehr oft auf 
verscchieden Flags zu, die ich so deklariert habe:

volatile struct Flags
  {
    uint8_t  Timer0Int   :1;
    uint8_t RXInt     :1;
    uint8_t KeyPressedInt   :1;
    uint8_t DataInInt  :1;
    uint8_t LCDchangedInt  :1;
    uint8_t MenuChangedInt  :1;
  }
  IntFlags;

Also eigentlich nur ein byte groß.

Kann ich dieses byte auch als Prozessorregister deklarieren? Dann müsste 
es nicht immer aus dem Speicher geholt werden...

Danke und Grüße
Ignaz
Gast #549321
Lesenswert?
• ▲
▼
Hallo.

Ich benutze eine Lösung, welche ich hier im Forum gefunden habe (dabei 
danke an die Konstrukteure). Man schreibe:

struct bits {
uint8_t b0:1;
uint8_t b1:1;
uint8_t b2:1;
uint8_t b3:1;
uint8_t b4:1;
uint8_t b5:1;
uint8_t b6:1;
uint8_t b7:1;
} _attribute_ ((_packed_));
#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin)

und kann dann mittels

#define TRIGGERFLAG   SBIT(TWDR, 2)
TRIGGERFLAG = 1;
if (TRIGGERFLAG == 1)

das Bit benutzen. Dabei lege ich das Bit bevorzugt in unbenutze 
R/W-Peripheriregister, welche noch mit einem Befehl zu erreichen sind. 
So kann der Compiler machen, was er will (falls er überhaupt R2ff 
benutzt).

Gruß
Marco

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.