Hallo!
Irgendwie habe ich ein Problem in einer Funktion bei mir und komme nicht
auf den Fehler.
Ich habe eine Variable "data" vom Typ uint32_t und will mir von dieser
das Bit an der Stelle "index" zurückgeben lassen.
Dafür habe ich mir folgende Funktion geschrieben:
1 | uint8_t get_bit(uint32_t data, uint8_t index)
|
2 | {
|
3 | // index may not be higher than 31 for 32 bit value
|
4 | if(index > 31)
|
5 | return 0;
|
6 |
|
7 | // extract the n-th bit by and-ing "data" with just one binary "1" in n-th bit
|
8 | // then the result is shifted right by n places to get the bit we want
|
9 | return (uint8_t)((uint32_t)(data & (uint32_t)(1 << index)) >> index);
|
10 | }
|
Das funktioniert aber nur bis zum 16. Bit, danach kommt immer "0"
zurück.
Warum ist das so, hab ich irgendwas übersehen?
Oder kann man das eleganter/schneller realisieren?
Das komplette Programm ist im Anhang.
Verwendet wird AVR Studio 4.18, µC ist ein ATtiny45.
Für Tipps wäre ich sehr dankbar, ich weiß echt nicht mehr weiter...
MfG Stefan