Forum: Compiler & IDEs BIT() Makro in IAR


von Lukas K. (carrotindustries)


Lesenswert?

Hallo,
ich bin gerade dabei Code von IAR nach mspgcc zu portieren. Dabei bin 
ich auf
1
  if ((data & BIT(13)) == BIT(13))
 gestoßen. GCC kennt das BIT Makro nicht. Ist BIT(13) äquivalent zu 
(1<<13) ?

von Bernhard R. (barnyhh)


Lesenswert?

Wie ist denn das BIT-Macro im entsprechenden Header-File definiert?

von Lukas K. (carrotindustries)


Lesenswert?

Bernhard R. schrieb:
> Wie ist denn das BIT-Macro im entsprechenden Header-File definiert?
Ich konnte es in den >350 Headerdateien nicht finden.

von Karl H. (kbuchegg)


Lesenswert?

hmm.
Wegen so was bohrt man normalerweise keinen Compiler auf. In irgendeinem 
Header wird es wohl sein und du hast es übersehen.

Aber egal.
Von der Verwendung her würde ich sagen: Ja das wird wohl so definiert 
sein
1
#define BIT(x)    ( 1 << (x) )


Übrigens ist das keine so gute Idee. Wenn du mit Bits arbeitest, ist es 
in C oft einfacher es sich zur Gewohnheit zu machen:
Entweder ein Bit ist 0 oder es ist nicht 0

(also nicht: die Alternative ist, es ist 1)

Dann vereinfacht sich die Abfrage
1
  if (! (data & BIT(13)) )
2
    ...
3
4
  if ( (data & BIT(13)) != 0 )
5
    ...

von Peter D. (peda)


Lesenswert?

Luk4s K. schrieb:
> Ich konnte es in den >350 Headerdateien nicht finden.

Es muß in einer der includierten h-Dateien drin sein, sonst gibts nen 
Compiler-Error.


Peter

von sebastians (Gast)


Lesenswert?

> Ich konnte es in den >350 Headerdateien nicht finden.

Hast du keine IDE, mit der du zu Definitionen hinspringen kannst? 
Normalerweise geht das mit einem einzigen Tastendruck (wenn man die 
Taste kennt - F3 bei eclipse) oder mit dem Kontextmenü.

von Bernhard R. (barnyhh)


Lesenswert?

> Ich konnte es in den >350 Headerdateien nicht finden.

Betriebssysteme besitzen meist eine Such-Funktion, um beliebige Strings 
in Dateien zu finden.

Aber Software portieren wollen...

kopfschüttelnd
Bernhard

von Lukas K. (carrotindustries)


Lesenswert?

Mit (1<<13) geht's
ich hatte mit greap alle Dateien im Inc-Verzeichnis der IAR-Installation 
auf der Windows-Partition durchsuchen lassen.
PS: Ich hab unter Windows IAR (für die msp430) mal kurz ausprobiert; 
eine Frechheit für so etwas noch Geld zu verlangen.

von Peter D. (peda)


Lesenswert?

Luk4s K. schrieb:
> ich hatte mit greap alle Dateien im Inc-Verzeichnis der IAR-Installation
> auf der Windows-Partition durchsuchen lassen.

Dann wirds wohl in nem Include des Projekts stehen.
Es ist kein reserviertes C-Wort, also muß es irgendwo im Quelltext oder 
dessen Includes stehen.

Du mußt Dir mal alle #include-Anweisungen der Quelltexte anzeigen 
lassen.
Vielleicht zeigen welche auf Dateien oder Verzeichnisse, die Du nicht 
mit kopiert hast.
Es soll auch Leute geben, die Includes anders nennen, also nicht *.h.
Prinzipiell könen Defines sogar im Make stehen.


Peter

von Wadim P. (wadim)


Lesenswert?

Also wenn das Problem noch aktuell ist, dann könnte ich dir Helfen. Ich 
arbeite mit ADuC7061 und dazu gibt es Paar Beispiele von ADI. Dort 
findet man in jedem Projekt entweder in einer Header-Datei oder gleich 
in main folgende Zeilen
1
// Bit Definitions
2
#define BIT0  0x01
3
#define BIT1  0x02
4
#define BIT2  0x04
5
#define BIT3  0x08
6
#define BIT4  0x10
7
#define BIT5  0x20

usw.
Somit mit deiner Zeile
1
if ((data & BIT(13)) == BIT(13))
überprüffst du ob in data an den 13.ten Bit eine 1 steht.

Ich hoffe ich konnte dir helfen.

mfg Wadim

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.