mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik compiler akzeptiert keine binärzahlen 0b001010


Autor: Sonke A. (soeni)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bei nem Kumpel (MAC) funktioniert das kompilieren meines Quelltextes 
nicht, welcher bei mir ordentlich durchläuft.

Ich verwende die Binärschreibweise 0b10101010 Ich hab mal was von makros 
gehöhrt, die man dazu braucht aber warum geht das  bei mir und bei ihm 
nicht, ich benutze doch auch keine makros jedenfalls nicht absichtlich. 
Wie kann man das bei ihm zum laufen bringen?

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Hex umstellen. Allenfalls gibt's eine alternative Schreibwaise wie 
"%01010101" oder 10010100b.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein Glück, daß es nur einen Compiler in einer Version auf der Welt 
gibt...

Gruß aus Berlin
Michael

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 0b... Schreibweise ist nicht Standardkonform und daher nicht 
portabel. Dazu kommt noch das diese Schreibweise (bis auf seltene 
Ausnahmen) absolut tötlich für die Lesbarkeit eines Quellcodes ist.

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na absolut tödlich ist sie nicht. wenn ich ein bitmuster an einem port 
brauche verwende ich diese schreibweise auch, weil man da direkt den 
zustand der einzelnen pins erkennen kann. ich verwende das manchmal 
sogar beim schreiben auf die control-ports weil ich zu faul bin 
irgendwelche abkürzungen für die "bitnamen" zu suchen die ich mal wieder 
vergessen habe.

Autor: Sonke A. (soeni)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
er verwendet avr gcc 4.20 auf einem mac (OS 10.5.8)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier gcc (GCC) 4.3.2 auf Kubuntu, Binärdarstellung funktioniert 
einwandfrei. Übersetzt du zufällig mit -ansi oder --std=c89 oder sowas?

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ben _ schrieb:
> wenn ich ein bitmuster an einem port
> brauche verwende ich diese schreibweise auch, weil man da direkt den
> zustand der einzelnen pins erkennen kann.

Bei sowas gehts vllt noch, wobei man das bei Hex nach sehr kurzer Zeit 
auch direkt sehen kann.

Das einzige mal wo ich diese Schreibweise verwendet hab war das 
ausnullen der oberen 6 Bits eines 16-Bit Wertes.


Ben _ schrieb:
> ich verwende das manchmal
> sogar beim schreiben auf die control-ports weil ich zu faul bin
> irgendwelche abkürzungen für die "bitnamen" zu suchen die ich mal wieder
> vergessen habe.

Für sowas muss man eh ins Datenblatt gucken und dann hat man dort doch 
auch die Bitnamen oO
Oder kennst du die entsprechenden Ports/Register alle auswendig?

Naja jedenfalls hat es mich bis jetzt immer angekotzt wenn ich eine 
Software von einem anderen benutzen musste und dort die 0b... 
Schreibweise verwendet wurde. War immer mehr Arbeit als sprechende Namen 
für bestimmte Bits.

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
liegt wohl auch daran, daß ich zu 99,9% der einzige bin der in meinem 
quellcode rumwerkelt. wenn ich quellcode weitergebe (etwa PHP) dann 
versuch ich schon das verständlich zu schreiben. ist aber nur seeeehhhr 
selten der fall, bei der µC programmierung denke ich bislang nicht, daß 
irgendwer mal meinen quellcode braucht oder verstehen will. ansonsten 
wäre es halt auch eine frage ob sich's für mich lohnt. wenn sich 
irgendwer sein projekt ein wenig was kosten läßt (was ich heute auch als 
seeeehhr unwahrscheinlich ansehe) dann bekommt er auch vernünftigen 
quellcode, logisch.

bei den control-registern hab ich oft situationen, daß ich direkt sehe 
ich brauche nur die bits x und y auf 1, den rest 0. dann tippt sich 
0b... schneller als sich vielleicht noch einen fehler bei den "bitnamen" 
einzufangen. die HEX schreibweise nutz ich auch, etwa wenn nur ein bit 
zu setzen ist.

Autor: Sonke A. (soeni)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und beim Thema, hat da noch jemand vorschläge zu?

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonke A. schrieb:
> und beim Thema, hat da noch jemand vorschläge zu?

Antworte erstmal hier drauf

Sven P. schrieb:
> Hier gcc (GCC) 4.3.2 auf Kubuntu, Binärdarstellung funktioniert
> einwandfrei. Übersetzt du zufällig mit -ansi oder --std=c89 oder sowas?


Ansonsten musst du bei dem Compiler halt mal gucken ob der überhaupt 
diese arstellung unterstützt. Sollte ja irgendwo auf der Homepage zu 
finden sein.

Autor: Ungast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der "original" Gnu AVR-GCC kann die 0bXXXX-Schreibweise nicht, das ist 
Teil der WINAVR-Patches.
Manche Packager wenden diese auch für Linux-Distros an, was ja auch Sinn 
macht, dort sind auch etliche (wichtige) Bugfixes mit dabei.

Also, Lösung: Dem Kerl, der den AVR-GCC für den Mac verteilt, eine nette 
Mail schicken: er möge doch bitte die WINAVR-Patches mit anwenden.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ungast schrieb:
> der "original" Gnu AVR-GCC kann die 0bXXXX-Schreibweise nicht, das ist
> Teil der WINAVR-Patches.
> Manche Packager wenden diese auch für Linux-Distros an, was ja auch Sinn
> macht, dort sind auch etliche (wichtige) Bugfixes mit dabei.
Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den 
normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken 
klar.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den
> normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken
> klar.

Wie schon gesagt wurde, ist das nicht ISO-C-konform und noch nicht mal 
Teil des GCC. Wenn man also portablen Code schreiben will, darf man es 
nicht benutzen.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:
>> Bei meinem GCC handelt es sich nicht um den AVR-GCC, sondern um den
>> normalen GCC. Aber mein AVR-GCC (Kubuntu) kommt auch mit den Bitmasken
>> klar.
>
> Wie schon gesagt wurde, ist das nicht ISO-C-konform und noch nicht mal
> Teil des GCC. Wenn man also portablen Code schreiben will, darf man es
> nicht benutzen.
ISO-C ist es nicht, aber es ist Teil des GCC.
http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonke A. schrieb:
> er verwendet avr gcc 4.20 auf einem mac (OS 10.5.8)

Dann lebt er wohl in der Zukunft ;-)

Du meinst wahrscheinlich 4.2.0. Damals gab es die 0b-Syntax nur als
Patch, mittlerweile (4.3.x und 4.4.x) ist sie Bestandteil des
offiziellen GCC-Releases. Dein Kumpel braucht also nur zu patchen oder
upzudaten.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sonke A. schrieb:
> Ich hab mal was von makros
> gehöhrt

Ach ja, falls dein Kumpel nicht updaten möchte/kann/darf: Hier ist das
Makro, von dem du gehört hast:
#define B(x) \
   0##x      & 0x01 | \
  (0##x>> 2) & 0x02 | \
  (0##x>> 4) & 0x04 | \
  (0##x>> 6) & 0x08 | \
  (0##x>> 8) & 0x10 | \
  (0##x>>10) & 0x20 | \
  (0##x>>12) & 0x40 | \
  (0##x>>14) & 0x80

Danach kannst du schreiben:
unsigned char a = B(10101010);

Mit dem richtigen Editor sind die 0b-Konstanten auch ganz fix in die
B-Makroaufrufe konvertiert. Beim Vim geht das bspw. mit dem Befehl
:%s/\<0b\([01]\+\>\)/B(\1)/g

Wenn die Konvertierung öfters benötigt wird, geht es auf ähnliche Weise
auch nichtinteraktiv mit dem Streameditor sed. Man könnte den Aufruf
sogar ins Makefile mit einbauen, so dass die C-Dateien beim Kompilieren
automatisch durch den Sed geschleust werden.

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.