avr-gcc und integer suffix

Oct 01, 2006 18 Replies

Hallo NG,



avr-gcc version 4.1.0 bringt ja bei Zuweisungen wie z.B. int x =



0b01010101; unter Linux einen Fehler: "error: invalid suffix "b10010" on integer constant". Dies liegt wohl daran, dass der C-Standard nix von dem "0b" Suffix sagt und daher unter Linux auch nicht unterstütz wird. Mit WinAVR klappt das ja. Hatte auch mal einen Link zu einem Compiler-Patch, welchen ich jetzt aber nicht mehr finde.

Jetzt die Frage an die avr-gcc Benutzer mit Linux: Was macht ihr? Compiler patchen, alles hexadezimal "0x" umschreiben, oder bitweise verodern: "= 1


Andreas Weber schrieb:

Ich glaube ich hab ihn doch noch gefunden:

formatting link
ist von anfang 2004 also schon leicht angestaubt, mal schauen ob der mit der mit dem aktuellen Source geht. Gruß Andy

Andreas Weber schrieb:

Oliver Schneidewind schrieb:

prefix?

Ich habe mir in grauer Vorzeit mal ein int a2i(char*) geschrieben, das zumindest den Benutzern _meiner_ Programme die Freiheit gibt,

0bxxx zu benutzen. Wenn die ANSI oder die gcc-Truppe irgendwann mal aufwacht, werde ich das begrüßen. Bits sind nun mal ein wichtiger grundlegender Datentyp und wenn die nicht vernünftig unterstützt werden, erregt das Unwillen.

Wenn Du das ernsthaft unters Volk bringst, kannst Du gleich ein FAQ dazu schreiben, warum B01010101 nicht funktioniert. Der erste DAU wird sich noch am gleichen Tag beschweren.

Gerhard

Die gcc-Leute sind - ganz entgegen der Implikation deiner Äußerung - nicht nur am pennen. Im Gegenteil: das sind sehr hilfsbereite, nette Leute, die ein großartiges Stück Software geschaffen haben.

Äußerungen wie die obige würden mich, wenn ich an so einen Projekt freiwillig (!) und unentgeltlich (!) teilnehmen würde, echt ankotzen.

Du hast den Source. Mach einen Patch. Schick ihn rein. Diskutier's auf der Mailingliste.

Na dann mach ich mal den DAU: Wieso gehts nicht? Ich seh den Fehler nicht, weswegen

#define B01010101 0x55

nicht "funktionieren" soll. FYI: Bei mir kompiliert's einwandfrei - wie zu erwarten war. YMMV.

Gruß, Johannes

durch dei Verdunstung kült das sogar ziemlich gut das ist wie schweiß. Hünde müssen da hecheln so wie Lüfter. Markus Gronotte in de.sci.electronics

Weil die Include-Datei fuer 32Bit-Ints 4 Gigazeilen groß wird, von

64 Bit wollen wir mal nicht reden?

Gerhard

Dir ist klar, dass die AVRs 8 Bit Mikrocontroller sind? Von 32 Bit war nie die rede.

Und dafür reicht ein Bash-Einzeiler (wenn auch ein kryptischer):

i=0; while [ $i -le 255 ]; do echo -n '#define b'; n=`echo "scale=8; obase=2; $i" | bc -q`; j=0; while [ $j -lt $((8-${#n})) ]; do echo -n 0; j=$(($j+1)); done; echo $n $i; i=$(($i+1));

Erzeugt eine 5,4kB große .h Datei. Kaum zu viel verlangt.

Aber zurück zu deinem Thema: für das "nicht funktionierende" B01010101 hast du also keine Erklärung?

Gruß, Johannes

durch dei Verdunstung kült das sogar ziemlich gut das ist wie schweiß. Hünde müssen da hecheln so wie Lüfter. Markus Gronotte in de.sci.electronics

Hoppla, da ist ein "done" verlorengegangen:

i=0; while [ $i -le 255 ]; do echo -n '#define b'; n=`echo "obase=2; $i" | bc -q`; j=0; while [ $j -lt $((8-${#n})) ]; do echo -n 0; j=$(($j+1)); done; echo $n $i; i=$(($i+1)); done

Gruß, Johannes

durch dei Verdunstung kült das sogar ziemlich gut das ist wie schweiß. Hünde müssen da hecheln so wie Lüfter. Markus Gronotte in de.sci.electronics

Das betrifft nicht nur den gcc, das hat mich auch schon beim portable C compiler auf der PDP11/40e unter Unix V6 gestört. (V6 ist übrigens kein Nachfolger von Unix system5).

Ich habe das Problem seinerzeit für mich gelöst, da hat der gcc noch nicht existiert( ok, nicht für C-programme selbst, aber für deren In/output, soweit ich dafür zuständig bin.)

Wenn sich jetzt nach 25 Jahren andere Leute immer noch über das gleiche Problem aufregen, dann ist das einfach nur Ignorieren-Wollen von Seiten ANSI und von mir aus der gcc-Gemeinde. Das Problem ist leicht zu sehen und leichter zu beseitigen als die Zuständigkeiten auszuloten.

Das ist so, wie wenn ein paar VHDL-Feinschmecker entscheiden, daß Block-Comments BÄÄÄÄH sind. Man besorgt sich halt einen Editor-Makro der in 1000 Zeilen vorne ein -- einfügen kann und ******* auf die Feinschmecker.

Wenn mein nicht unentgeltliches(!) Pro-Naviagtionssystem verkündet, daß der Öschelbronner Weg 23 links ist, dann finde ich trotzdem nach Hause und werde _keinen_ Verbesserungsvorschlag an BMW schicken. Ich habe keine Lust mehr, den Missionar zu spielen. Von mir aus, wenn's um Phasenrauschen oder Demodulatoren geht, aber nicht bei Grundlagentools auf Ameisen-Kniehöhe.

Gerhard

Was interessiert mich eine Speziallösung für den AVR? Ich benutze ihn nicht und werde ihn nicht benutzen.

(whoever:)

Genau. Wie ein 32 Bit Microblaze oder PPC405 in meinem Virtex-4. Als ob man eine Lösung brauchen könnte, die die nächste Generation nicht überlebt. Doppelt und dreifach eben.

und Du hast das Wort "ankotzen" ins Spiel gebracht?

Gerhard

Subject gelesen? Genau darum geht es...

Gruß, Johannes

-- durch dei Verdunstung kült das sogar ziemlich gut das ist wie schweiß. Hünde müssen da hecheln so wie Lüfter. Markus Gronotte in de.sci.electronics

Problem

Tja, C kann auch keine nested comments - finde ich zwar nervig, aber so ist es halt. Nicht alles was ICH oder DU gerne hätten, wird umgesetzt.

Aber sich drüber richtig aufregen, so ist's richtig.

Unglaublich.

Gruß, Johannes

durch dei Verdunstung kült das sogar ziemlich gut das ist wie schweiß. Hünde müssen da hecheln so wie Lüfter. Markus Gronotte in de.sci.electronics

Der Nutzen einer 32Bit Zahl in "0b.." Notation ist recht fraglich. Der Weg über (...

Zur (pädagogischen) Auswertung von IP(IV)-Adressen mit dazugehörigen Netzwerk-Masken sind die sogar sehr gut geeignet..!

  • Andreas Weber [2006-10-01 16:31]:

Wenn ich mich richtig erinnere, ist ein entsprechender Patch in den FreeBSD-Quellen zum avr-gcc eingeflossen. Eventuell mal auf der avr-gcc Mailingliste fragen?

Lars Noschinski schrieb:

Habs noch gefunden:

formatting link
Ist von Joerg Wunsch, dem Vater von der avrlibc. Wir wohl nicht wirklich von der gcc Entwicklergemeinde begrüßt. Gruß Andy

Oliver Schneidewind schrieb:

Folgendes Macro ist vielleicht besser:

#define BIN(b) ((int)(b*100000000)%10) \ | (((int)(b*10000000)%10)

((a & 0x00100000l)>>15)|\ ((a & 0x01000000l)>>18)|\ ((a & 0x10000000l)>>21) #define BINARY(x) _BINARY(0x##x##l)

unsigned char code lcd_charset[] = { BINARY(00000), BINARY(00000), BINARY(00000), BINARY(00000), BINARY(00100), BINARY(00000), BINARY(00000), BINARY(00000), [...]

cu Michael

Some people have no respect of age unless it is bottled.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required