Forum: Mikrocontroller und Digitale Elektronik bit_test Funktion


von Chipsammler (Gast)


Lesenswert?

Moin

Ich habe bemerkt, dass in manchen Compilern eine bit_test und bit_set 
Funktion verfügbar ist, in C18 leider nicht.
Hat jemand die entsprechende grad bei der Hand?

result=bit_test(byte,bit);

bit_set(byte,bit);


vieln Dank..

von Matthias L. (Gast)


Lesenswert?

so vielleicht?
1
byte bit_test(byte b,byte n )
2
{
3
  if ( n > 7 ) return 0;
4
  return byte & (1<<n);
5
}
6
7
8
9
byte bit_set(byte b ,byte n )
10
{
11
  if ( n > 7 ) return byte;
12
  return byte | (1<<n);
13
}

von Chipsammler (Gast)


Lesenswert?

super vieln Dank!

von roffez (Gast)


Lesenswert?

Aus Kompatibilitätsgründen würd ichs immer so machen:

Bit setzen:   b |= (1<<n);
Bit löschen:  b &= ~(1<<n);
Bit abfragen: if ( b & (1<<n) )  {...}

Ist leicht lesbar und 100% kompatibel, da Standard-C. Also keine 
Bibliotheken nötig!

von Chipsammler (Gast)


Lesenswert?

jo vielen Dank. Nur rein interessehalber: Funktioniert es auch von 
rechts, also (1>>n)?

von Rörig (Gast)


Lesenswert?

Nein.

Du solltest aber besser die " byte |= (1 << bit) " Schreibweise 
verwenden und nicht die Funktionen. Ein vernünftiger Compiler (gibts 
sowas für PIC12/16/18?) macht daraus eine einzelnen Assembler Anweisung. 
Die bit_xxx() Funktionen werden ja gerade deshalb vom Compiler 
bereitgestellt weil sie Probleme haben solche Situationen zu erkennen.

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
Noch kein Account? Hier anmelden.