Hallo, ich arbeite gerade an einem C-Programm für einen AVR und habe folgendes Problem: ich übergebe eine Adresse (unsigned char) an eine Funktion. Die Adresse ist 5 Bits lang. Diese soll dann in ein Register geschrieben werden. Allerdigs soll das Bit 0 der übergebenen Variable an Bit 3 des Registers usw. geschrieben werden. Die ersten drei Bits des Registers sollen unverändert bleiben. Momentan habe ich das so gelöst: Ich teste ob Bit 0 der Variable gesetzt ist. Wenn ja, dann setzte ich Bit 3 des Resiters. Ansonsten lösche ich es. Das ganze mache dann fünf mal. Gibt es da eine elgantere, schnellere Lösung?
register |= wert << 3; 11111111b |= 00000000b << 3 = 11111111b Es sollte aber 00000111 rauskommen... Andersherum funktioniert das: 00000000b |= 11111111b << 3 = 11111000b
Hi, du müsstest vorher die fünf Bits im Register durch eine Und-Verknüpfung "plattmachen". Ich würde mal sowas vorschlagen: register = (register & 7) | (wert << 3); MfG Daniel Jelkmann
Stimmt, das Löschen der Bits im Register hatte ich übersehen. Daniels Ansatz ist sinnvoll. War wohl etwas spät, gestern.
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.