Forum: Compiler & IDEs Unterschied zwischen bm/bp bzw (1<<1) und 1


von Simon (Gast)


Lesenswert?

Worin liegt der Unterschied /Nutzen zwischen

(1<<) oder 1


Beispiel:

#define PORT_ISC1_bm  (1<<1)  /* Input/Sense Configuration bit 1 mask. 
*/
#define PORT_ISC1_bp  1  /* Input/Sense Configuration bit 1 position. */

von Karl H. (kbuchegg)


Lesenswert?

In C ist das ziemlich wurscht.

In Assembler gibt es aber einen Mix von Befehlen, wobei die einen die 
Bitnummer haben wollen und die anderen die Bitmaske.

Daher hat Atmel die Include Files so gestaltet, dass beides, Bitnummer 
und Bitmaske aus derselben Angabe erzeugbar ist.
Aus der Bitnummer kann man sich leicht automatisch die Maske erzeugen. 
Aber umgekehrt aus der Maske die Bitnummer zu erhalten, ist nicht so 
einfach möglich.
Ergo: Atmel hat sich dafür entschieden, die Bitnummer in Definements zu 
benutzen.

von Simon (Gast)


Lesenswert?

Danke für die Antwort


Wenn ich nun als Beispiel das PINnCTRL Register einstellen möchte,

und zwar so das es auch nach einer Woche noch lesbar ist.

Gehe ich dann so vor?


// PINnCTRL – Pin n Configuration register
// OSC Einstellen
//     OSC [2:0] 011 PULLUP Widerstand
// ISC Einstellen
//     ISC [2:0] 010 FALLING Sense falling edge
//     PORT_ISC1_bm  (1<<1)  0x00000010
// Slew Rate PORT_SRLEN_bm 0x80    0b1000000

PORTC.PIN0CTRL |= PORT_ISC1_bm |  PORT_OPC1_bm | PORT_OPC0_bm | 
PORT_SRLEN_bm;

von xfr (Gast)


Lesenswert?

Wie die Bitmasken definiert sind, brauchst Du nicht als Kommentar 
hinschrieben. Die Makros sind ja gerade dafür da, dass man das nicht 
wissen muss.

Ich würde in den Kommentar schreiben, was die Bits bewirken bzw. was im 
Endeffekt eingestellt wird. Für die Bitgruppen gibt es beim Xmega 
übrigens eigene Defines, damit wird es fast selbsterklärend:

1
// Configure Pin 0 (besser: wofür ist der Pin, mit was ist er verbunden)
2
// - Enable slew rate limit
3
// - Enable pullup
4
// - Sense falling edge
5
PORTC.PIN0CTRL = PORT_SRLEN_bm | PORT_OPC_PULLUP_gc | PORT_ISC_FALLING_gc;

von anderer Gast (Gast)


Lesenswert?

Simon schrieb:
> und zwar so das es auch nach einer Woche noch lesbar ist.

Wenn du dich mit 'PORT_ISC1_bm' anfreunden kannst...
Ich würde '1 << PORT_ISC1_bp' nehmen.

von Falk B. (falk)


Lesenswert?


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.