Forum: Mikrocontroller und Digitale Elektronik Was macht (x) & (b) >> (s)?


von Mark M. (mom-jovi)


Lesenswert?

ich bin in einem Programm auf das hier gestoßen:
1
#define BF(x,b,s) (((x) & (b)) >> (s))
Mir ist klar, was hier passiert, aber wozu ist sowas gut? Was heißt BF?

von Stefanie B. (sbs)


Lesenswert?

Hm dann lass uns mal das muntere Raten eröffnen:

x ist der Paramter,
b könnte eine Bitmaske sein
s könnte shift heißen.

von Michael B. (mb_)


Lesenswert?

Mark M. schrieb:
> ich bin in einem Programm auf das hier gestoßen:
>
1
#define BF(x,b,s) (((x) & (b)) >> (s))
> Mir ist klar, was hier passiert, aber wozu ist sowas gut? Was heißt BF?

Das kann dir wohl nur der Author des Codes beantworten.
Ich denke aber, dass BF Bitfield heißt. Mit dem Makro kannst du wohl x 
mit b maskieren und dann um s nach rechts shiften. Ich sehe aber 
eigentlich keinen Grund das in einem Makro zu tun und nicht einfach 
offen zu coden. Das wäre IMO lesbarer.

von Karl H. (kbuchegg)


Lesenswert?

Mark M. schrieb:
> ich bin in einem Programm auf das hier gestoßen:
>
1
#define BF(x,b,s) (((x) & (b)) >> (s))
> Mir ist klar, was hier passiert, aber wozu ist sowas gut? Was heißt BF?

Seltsame Makros kann man oft dadurch ergründen, dass man sich die 
verwendenden Stellen ansieht.

von Mark M. (mom-jovi)


Lesenswert?

Michael Buesch schrieb:
> Ich sehe aber
> eigentlich keinen Grund das in einem Makro zu tun und nicht einfach
> offen zu coden. Das wäre IMO lesbarer.

Das meine ich auch! Aber das ganze Programm ist voll mit solchen 
hässlichen Makros. Ist das üblich, praktisch oder sonst irgendwas?

von Karl H. (kbuchegg)


Lesenswert?

Mark M. schrieb:
> Michael Buesch schrieb:
>> Ich sehe aber
>> eigentlich keinen Grund das in einem Makro zu tun und nicht einfach
>> offen zu coden. Das wäre IMO lesbarer.
>
> Das meine ich auch! Aber das ganze Programm ist voll mit solchen
> hässlichen Makros. Ist das üblich, praktisch oder sonst irgendwas?

Kann man so nicht sagen.
Zeig doch mal einen Ausschnitt, wo das eingesetzt wird.

von Mark M. (mom-jovi)


Lesenswert?

Karl heinz Buchegger schrieb:
> Kann man so nicht sagen.
> Zeig doch mal einen Ausschnitt, wo das eingesetzt wird.

Es geht um MSP430-Programmierung. Ich hab hier ne Firmware von TI, die 
modifiziert werden soll. Nun ist der Quelltext nur so gespickt mit 
diesen Makros. Hat jemand einen Tipp, wie ich das Programm angehen soll, 
als Anfänger?

von Floh (Gast)


Lesenswert?

Mark M. schrieb:
> Hat jemand einen Tipp, wie ich das Programm angehen soll,
Zeig doch mal her.

von Nonsense (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Zeig doch mal einen Ausschnitt, wo das eingesetzt wird.

von Karl H. (kbuchegg)


Lesenswert?

Mark M. schrieb:

> Es geht um MSP430-Programmierung. Ich hab hier ne Firmware von TI, die
> modifiziert werden soll. Nun ist der Quelltext nur so gespickt mit
> diesen Makros. Hat jemand einen Tipp, wie ich das Programm angehen soll,
> als Anfänger?

Am besten geht man sowas an, indem man sich aus dem Anfängerstatus 
heraushievt.
Das heißt: erst mal diese Programm beiseite legen, ein C-Buch schnappen 
und da die ersten paar Kapitel auf dem PC durcharbeiten.

Der Vorteil: Es bricht nicht alles auf einmal auf dich herein, sondern 
das Buch baut dein Wissen in logischen und sinnvollen Schritten auf.

Das meiste von dem, was du in diesem Programm sehen wirst, ist höchst 
wahrscheinlich sehr simpel. Nur bricht eben alles auf einmal auf dich 
herein. Und dann verlierst du den Überblick.

So wie beim Schach: Wenn man gleichzeitig die Figuren, ihre möglichen 
Züge und 8 verschiedene Eröffnungsstrategien auf einmal lernen soll, 
dann verliert man sich.

von Micha S. (e-tec)


Lesenswert?

Das ist ein sehr schöner vergleich mit schach^^
zeig mal deinen Programmausschnitt, kann dir sicher helfen.
(sollst es ja nicht ganz posten :)

grüße e-tec

von Mark M. (mom-jovi)


Lesenswert?

Karl heinz Buchegger schrieb:
> Am besten geht man sowas an, indem man sich aus dem Anfängerstatus
> heraushievt.
> Das heißt: erst mal diese Programm beiseite legen, ein C-Buch schnappen
> und da die ersten paar Kapitel auf dem PC durcharbeiten.

Mit den C-Grundlagen hab ich kein Problem, sondern damit, dass in einer 
Funktion 5 Makros stehen, die nicht nur wiederum Funktionen sind, 
sondern auch noch alle in verschiedenen Headern stehen.

Kann mir da jemand ein gutes Buch empfehlen? Also keines, das mir zum 
100. Mal erklärt, was eine Funktion ist. Hello World kann ich auch schon 
schreiben ;-P Ich suche was, wo auch auf die praktische Anwendung, 
besonders µCs eingegangen wird. Ich kann lange immer die ersten Kapitel 
durcharbeiten, wenn dann nachher irgendwelche µC-Register mit komischen 
Makros abgekürzt sind.

von Karl H. (kbuchegg)


Lesenswert?

Mark M. schrieb:
> Karl heinz Buchegger schrieb:
>> Am besten geht man sowas an, indem man sich aus dem Anfängerstatus
>> heraushievt.
>> Das heißt: erst mal diese Programm beiseite legen, ein C-Buch schnappen
>> und da die ersten paar Kapitel auf dem PC durcharbeiten.
>
> Mit den C-Grundlagen hab ich kein Problem, sondern damit, dass in einer
> Funktion 5 Makros stehen, die nicht nur wiederum Funktionen sind,
> sondern auch noch alle in verschiedenen Headern stehen.

Und?
Die sucht man sich einmal zusammen, sieht sich an was sie machen und 
legt sich das in Gedanken beiseite (oder aber macht sich eine Notiz auf 
einem Schmierzettel)

> Kann mir da jemand ein gutes Buch empfehlen? Also keines, das mir zum
> 100. Mal erklärt, was eine Funktion ist. Hello World kann ich auch schon
> schreiben ;-P Ich suche was, wo auch auf die praktische Anwendung,
> besonders µCs eingegangen wird. Ich kann lange immer die ersten Kapitel
> durcharbeiten, wenn dann nachher irgendwelche µC-Register mit komischen
> Makros abgekürzt sind.

Das wirst du in keinem Buch finden.
Denn wie ein Programmautor seine Makros nennt ist ihm überlassen. Und 
wenn er sie SCHMUTZDIPAP nennt, dem Compiler ist das egal.
Als Leser musst du dir nur merken was die Makros bedeuten, wie sie 
expandieren (oder, eh schon wissen, Schmierzettel)

Diese Frage
> Aber das ganze Programm ist voll mit solchen
> hässlichen Makros. Ist das üblich, praktisch oder sonst irgendwas?
kann man daher nicht pauschal beantworten.

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.