Hallo allerseits, nur eine kurze Frage mit (hoffentlich) kurzer Antwort: Gibt es eine Möglichkeit im GCC eine Binärzahl einzugeben? Bei Hexdezimal-Zahlen muss ich ja das Perfix 0x voranstelen. Gibt es da eine analoge Schache bei binär? Oder kann man da ein Makro definieren? MfG Christian PS: Zum Thema Makros: Kann ich eigentlich einen Code definieren, der mit zur Compile-Zeit durchlaufen wird (z.Bsp. Berechnung von pi (nur Beispiel! Ich waeiß, das gibt's in der lib.)) und dann als Konstante zur Verfügung steht?
Hallo, An so was hab ich auch schon gedacht. Da bekomm ich folgenden Fehler: » hardware.h:172:11: error: invalid suffix "b11110000" on integer constant bei dem Befehl » MCUCR &= 0b11110000; Was mache ich falsch? MfG Christian
hallo, habe mal wirklich bei k&r nachgeschaut, aber nichts derartiges gefunden. warum willst du dir diese mehrarbeit an tippen machen, hexa sagt doch als darstellung(!) schon recht viel aus. bye kosmo
Machs mit nem Macro, dann ist es portabel:
1 | #define B8(y) ((unsigned char)(
|
2 | 0##y & 1 \ |
3 | | 0##y >> 2 & 2 \ |
4 | | 0##y >> 4 & 4 \ |
5 | | 0##y >> 6 & 8 \ |
6 | | 0##y >> 8 & 16 \ |
7 | | 0##y >> 10 & 32 \ |
8 | | 0##y >> 12 & 64 \ |
9 | | 0##y >> 14 & 128 )) |
Und dann einfach: i = B8(10101010); // 0xAA Es gibt ne gepatchte AVR-GCC Version, die 0b... versteht, aber das ist nicht portabel. Peter
@Sonic: Das hat damit garnichts zu tun... @mr.chip: Ganz ehrlich? Das wundert mich auch gerade :-) Warum gibt es kein offizielles Prefix für Binärwerte? Naja, wie auch immer, ich komme ebenfalls ohne Binärwerte aus. Entweder ich setze bits in nem Register mit (1<<Bitnr), oder ich nehm die hexadezimale Schreibweise.
> Warum gibt es > kein offizielles Prefix für Binärwerte? Weil die C-Päpste bei der letzten Überarbeitung des Standards der Meinung waren, dass das keiner braucht und auch kein nennenswerter Compiler bereits implementiert hätte. Im Amtsenglisch des C rationale liest sich das dann so: ``A proposal to add binary constants was rejected due to lack of precedent and insufficient utility.'' Ich habe meinen 0b-Patch bei GCC offiziell als Spracherweiterung eingereicht. Letztlich sind viele der früheren GCC-Erweiterungen mittlerweile im Standard zu finden. Wenn das mal endlich angenommen und eingearbeitet worden ist, dann sollte sich zumindest der Punkt ``lack of precedent'' bei der nächsten Überarbeitung des Standards erledigt haben...
Was ist das mit dem 0b patch? Muss der beim Compilieren (vom avr-gcc selbst) eingespielt werden, oder ist das nur ein plug-in? MfG Christian
> Was ist das mit dem 0b patch?
Du must gar nichts tun. Der avr-gcc kann das von Haus
aus. Den Patch hat derjenige gemacht, der den Compiler
zusammengestellt hat.
Warum geht das dann nicht? Siehe oben. Da hab ich eine Zeile mit 0b11110000 eingegeben; angenommen hat er sich nicht. Was mache ich falsch/habe ich falsch kompiliert? Christian
Kann ich nicht sagen. Falsche Version? Klappt bei mir und allen andern hier ohne Probleme mit dem avr-gcc.
Du musst den Compiler patchen dafür, wenn es dein Compiler-Lieferant nicht bereits für dich getan hat.
Ich hab den Compiler selber übersetzt (deshalb frag ich auch). Der gcc ist eine Vanillia-Version. MfG Christian
Dann solltest du dir wohl die Patches meiner FreeBSD-Versionen angucken, ansonsten fehlt dir nicht nur die Unterstützung von 0b-Konstanten, sonder auch die für viele aktuelle AVRs. Die Patches findest du im CVS unter: http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files/ http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc-devel/files/ Manche davon sind sehr FreeBSD-spezifisch, aber manche sind auch recht allgemein. Ach so, du brauchst auch Patches für die binutils: http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-binutils/files/
Ich gehe davon aus, dass das normal ist, oder etwa nicht??? Ich hab zumindest noch keine binary-packets für SuSE gefunden, die einigermaßen aktuell sind; wenn ich mir da die neuste gcc-core runterlade, sieht's da schon anders aus. MfG Christian
> Ich gehe davon aus, dass das normal ist, oder etwa nicht?
Für RPM-Linuxe, ja.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.