Hallo an alle die das hier lesen! Ich habe folgendes Problem Ich möchte in ein uint8_t array[12] bitweise schieben geht aber nur für das erste Byte alle anderen sind 0. array[0] |= (1<<0...7) geht array[0] |= (1<<8....) geht nicht mehr AVR GCC attiny2313 Gruß Torben
Gast
#617304
du kannst nicht über das byte hinausschieben aber probier doch mal folgenden code unsigned char temp; temp = (1 << x); array[0] |= (unsigned char)temp; array[1] |= ((unsigned char)temp >> 8);
Gast
#617306
edit: ich meine natürlich unsigned int temp; sry
Gast
#617310
Oder: unsigned char x = [hier willst du eine 1]; array[x/8] |= (1 << (x%8));
Ich wollte das Array eigentlich nicht hochzählen da ich einen Bit counter habe und müßte dann die bytes noch zählen und die bits runter teilen.
Wo ist das niederwertigste Bit?
Annahme: Bit 0 in array[0] ist das niederwertigste Bit
Bit 7 in array[11] ist das höchstwertigste Bit
Um 1 Bit über 12 Bytes hinweg um jeweils 1 Stelle zu schieben
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Einer der wenigen Dinge, die ein heisser Kandidat für Inline Assembler sind, da man dort durch Einbeziehung des Prozessor Carry Flags, die ganze 'Übertragsberücksichtigung' ins nächste Byte einfacher hinkriegt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.