define mit Platzhalter

OP #1498813
Lesenswert?

Hallo,
besteht eine Möglichkeit,
define mit Platzhalter zu versehen ?

#define my_set_BIT    |=  (1 <<
#define my_del_BIT    &= ~(1 <<

*FifoZeiger my_del_BIT FifoPortBit);
*FifoZeiger my_set_BIT FifoPortBit);

Habe es so geschrieben, ist aber Murks.

Funktioniert, Compiler meckert nicht.

etwa so
#define my_set_BIT   &= ~(1 <<  Platzhalter )
und so
*FifoZeiger my_set_BIT FifoPortBit;


Gruß Siegfried
OP #1498946
Lesenswert?

Hallo,

#define SET_BIT(var,bit)  (var) |=   (1<<(bit))
#define DEL_BIT(var,bit)  (var) &= ~ (1<<(bit))
#define TEST_BIT(var,bit) (var) &    (1<<(bit))

unsigned int    *FifoAdresse[MaxFifoBuffer];
unsigned char   FifoPortBitNr[MaxFifoBuffer];
unsigned char   BusSpiInput[MaxBusSpiInOut];
unsigned int    *FifoZeiger;
unsigned char   FifoPortBit;

SET_BIT(*FifoZeiger,FifoPortBit);
DEL_BIT(*FifoZeiger,FifoPortBit);

Habe aber jetzt ein Problem.
jeweils in einem Array liegt die Adresse bzw. die Bit-Nummer.
Bit 0 bis Bit 6 funktioniert einwandfrei zu setzen/löschen.
jedoch Bit 7 bereitet Probleme.
Es wird dann immer die nächste Adresse auf 0xFF bzw 0x00 gesetzt.

Gruß Siegfried
#1498953
Lesenswert?

Siegfried Saueressig schrieb:

> jeweils in einem Array liegt die Adresse bzw. die Bit-Nummer.

Das ist keine gute Idee

   1 << i;

ist für deinen AVR eine 'komplizierte' Operation.

Leg ins Array besser gleich die fertigen Masken (also zb den Wert 1<<6) 
ab.

> Bit 0 bis Bit 6 funktioniert einwandfrei zu setzen/löschen.
> jedoch Bit 7 bereitet Probleme.
> Es wird dann immer die nächste Adresse auf 0xFF bzw 0x00 gesetzt.

Ohne Code ist das schwer zu sagen.
#1498961
Lesenswert?

Siegfried Saueressig schrieb:

> #define SET_BIT(var,bit)  (var) |=   (1<<(bit))
> #define DEL_BIT(var,bit)  (var) &= ~ (1<<(bit))
> #define TEST_BIT(var,bit) (var) &    (1<<(bit))

Zur Sicherheit solltest du da noch Klammern rundum setzen. Zumindest 
beim TEST_BIT kann das sonst fatal sein
1
#define SET_BIT(var,bit)  ( (var) |=   (1<<(bit)) )
2
#define DEL_BIT(var,bit)  ( (var) &= ~ (1<<(bit)) )
3
#define TEST_BIT(var,bit) ( (var) &    (1<<(bit)) )
OP #1498967
Lesenswert?

Hallo,
hier der Code

FifoDelay[i]      = FifoTimeOff[i];
FifoZeiger        = FifoAdresse[i];
FifoPortBit       = FifoPortBitNr[i];
DEL_BIT(*FifoZeiger,FifoPortBit);
ablauf_status[i]  = WaitOn;

probiere es noch mit den zusätzlichen Klammern.

Gruß Siegfried

Problem bleibt auch mit den zusätzliche Klammern.


hier passe ich.
Leg ins Array besser gleich die fertigen Masken (also zb den Wert 1<<6)
ab.


Nachtrag:
in der von FifoZeiger adressierten Adresse wird Bit 7 korrekt behandelt.

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