festes prozessorregister für Flags

Gast #549225
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
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
Gast
Neuere AVRs (ab Tiny2313) besitzen eigens zu diesem Zweck 3 freie Bytes 
im bitadressierbaren I/O-Bereich: GPIOR0-2. Damit fährt man besser als 
mit Prozessorregistern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.