www.mikrocontroller.net

Forum: Compiler & IDEs BIT() Makro in IAR


Autor: Lukas K. (carrotindustries)
Datum:

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

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist denn das BIT-Macro im entsprechenden Header-File definiert?

Autor: Lukas K. (carrotindustries)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
#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
  if (! (data & BIT(13)) )
    ...

  if ( (data & BIT(13)) != 0 )
    ...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ü.

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wadim Popov (wadim)
Datum:

Bewertung
0 lesenswert
nicht 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
// Bit Definitions
#define BIT0  0x01
#define BIT1  0x02
#define BIT2  0x04
#define BIT3  0x08
#define BIT4  0x10
#define BIT5  0x20

usw.
Somit mit deiner Zeile
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.