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
Stört dich was an der Art, wie so was sonst gemacht wird?
1 | #define my_set_BIT(var,bit) (var) |= (1<<(bit))
|
2 | |
3 | my_set_Bit(*FifoZeiger,FifoPortBit); |
jedes handelsübliche C-Buch, oder online C-Tutorial wird dir diese Frage mit Leichtigkeit beantworten.
Hallo, Danke für die schnelle Antwort. möchte mich gerne immer an die Regeln halten. es ist für mich übersichtlicher. Die Variante von @Stefan Ernst ist gut. Gruß Siegfried
> Die Variante von @Stefan Ernst ist gut.
Oh ja, da hat Stefan Ernst sich ja wirklich was geniales ausgedacht!
Warum machen das nicht alle auf die Art? Oh, Moment, das tun sie ja
schon...
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
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.
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)) )
|
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.
Das hier unsigned int *FifoAdresse[MaxFifoBuffer]; unsigned int *FifoZeiger; sollten Zeiger auf unsigned char sein. unsigned char* FifoAdresse[MaxFifoBuffer]; unsigned char FifoPortBitNr[MaxFifoBuffer]; unsigned char BusSpiInput[MaxBusSpiInOut]; unsigned char* FifoZeiger;
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.