IAR Workbench Binäre Zahlen eingeben

Persönliche Seite #2651442
Lesenswert?

1000VoltGehirn schrieb:
> ist es möglich eine Zahl Binär einzugeben ?

Nein, das ist in C nicht vorgesehen. Es gibt einige wenige Compiler, die 
eine nichtstandardkonforme Erweiterung besitzen, die dann die Verwendung 
des 0b-Präfixes erlaubt, so etwas sollte man sich aber aus gutem Grund 
gar nicht erst angewöhnen.

Besser ist es, sich mal ein Wochenende damit zu beschäftigen, die 16 
möglichen Bitkombinationen für einstellige Hexzahlen zu pauken, das ist 
eine Zukunftsinvestition.
Gast #2652095
Lesenswert?

1
#define B16(y)  ( 0##y       &  0x0001  \
2
          | 0##y >>  2 &  0x0002  \
3
        | 0##y >>  4 &  0x0004  \
4
        | 0##y >>  6 &  0x0008  \
5
        | 0##y >>  8 &  0x0010  \
6
        | 0##y >> 10 &  0x0020  \
7
        | 0##y >> 12 &  0x0040  \
8
    | 0##y >> 14 &  0x0080  \
9
        | 0##y >> 16 &  0x0100  \
10
        | 0##y >> 18 &  0x0200  \
11
        | 0##y >> 20 &  0x0400  \
12
        | 0##y >> 22 &  0x0800  \
13
        | 0##y >> 24 &  0x1000   \
14
    | 0##y >> 26 &  0x2000   \
15
        | 0##y >> 28 &  0x4000  \
16
        | 0##y >> 30 &  0x8000   )

Benutzung sollte selbsterklärend sein...
Moderator Persönliche Seite #2661078
Lesenswert?

gerhard schrieb:
> http://supp.iar.com/Support/?note=46979&from=search+result

Lustig ist natürlich die Argumentation...  Die Aufnahme von 0b als
Binärkonstanten in den Compiler lehnen sie aus Portabilitätsgründen
ab, aber ein #define 0b0001 akzeptieren sie, obwohl dieses nun ganz
eindeutig im Rahmen des C-Standards nicht akzeptabel sein kann:
ein Makroname muss ein Bezeichner sein, und ein Bezeichner kann nicht
mit einer Ziffer anfangen.

Vielleicht sollten die IAR-Nutzer einfach ihren Compilerhersteller
mal nerven, dass er die 0b-Konstanten auch mit aufnimmt.  Dann
steigen die Chancen, dass das C-Standard-Kommittee beim nächsten
Standard nicht schon wieder behaupten kann, eine derartige
Erweiterung "due to lack of precedence" ablehnen zu müssen.
#2661144
Lesenswert?

Jörg Wunsch schrieb:
> gerhard schrieb:
>> http://supp.iar.com/Support/?note=46979&from=search+result
>
> Lustig ist natürlich die Argumentation...  Die Aufnahme von 0b als
> Binärkonstanten in den Compiler lehnen sie aus Portabilitätsgründen
> ab,

welche Portabilität?

Aus dieser Notation folgt kein einziges Problem. 0birgendwas ist vor der 
Erweiterung kein gültiges 'irgendwas' und nach der Erweiterung ist es 
eine gültige Zahl. So what?

Die Sache mit den #define ist doch bestenfalls eine Krücke. Definier 
doch mal alle Möglichkeiten die es mit 32 Bit gibt. Da parst sich der 
Präprozessor einen Ast ab, bis er dann endlich mal weiß, was er aus
B100010001000111000000011011101
machen soll.

Und 64 Bit stehen schon in den Startlöchern.

> steigen die Chancen, dass das C-Standard-Kommittee beim nächsten
> Standard nicht schon wieder behaupten kann, eine derartige
> Erweiterung "due to lack of precedence" ablehnen zu müssen.

Dazu sind die µC-Compiler Hersteller nicht mächtig genug. Wenn Microsoft 
oder Oracle/Sun da dahinter stehen würden, wäre das alles längst 
gegessen. Ok, Texas Instruments wäre noch ein nicht zu ignorierender 
Fürsprecher mit dem man es sich nicht verscherzen sollte. Genauso wie 
Intel.
Die vom Komitee gern gesehene Referenzimplementierung (die auch 
praktisch zeigt, dass es keine Probleme gibt und prinzipiell machbar 
ist) existiert ja schon längst.
Moderator Persönliche Seite #2661198
Lesenswert?

Karl Heinz Buchegger schrieb:

>> Lustig ist natürlich die Argumentation...  Die Aufnahme von 0b als
>> Binärkonstanten in den Compiler lehnen sie aus Portabilitätsgründen
>> ab,
>
> welche Portabilität?

Musst du IAR fragen.  Vermutlich der des Sourcecodes auf andere
Compiler (als ob das nun deren Sorge sein sollte ;-).

> Aus dieser Notation folgt kein einziges Problem.

Das sehe ich genauso wie du.

> Die Sache mit den #define ist doch bestenfalls eine Krücke. Definier
> doch mal alle Möglichkeiten die es mit 32 Bit gibt.

Reichlich 4 Milliarden, ist doch überschaubar.  Man braucht 53 Zeichen
pro Zeile (einschließlich \r\n), macht also so um die 250 GiB für
die Datei mit den Makros.  Wenn der Hersteller die mit seinem
Softwarepaket mitliefert, liegt er doch voll im Trend, dass heutzutage
ein von den Nutzern auch ernst genommenes Softwarepaket nicht unter
der Größe einer anständigen DVD daher kommen darf. >:-)

> parst sich der Präprozessor einen Ast ab

Na, ohne 10-GHz-Octalcore-CPU bist du sowieso auf verlorenem Posten.

Strom sparen?  Das überlassen wir dem Glühlampenverbot. :-)

> Die vom Komitee gern gesehene Referenzimplementierung (die auch
> praktisch zeigt, dass es keine Probleme gibt und prinzipiell machbar
> ist) existiert ja schon längst.

Ja, leider hat sie eben vor 1999 noch nicht existiert (zumindest nicht
in einer für diese Leute sichtbaren Form).
#2661236
Lesenswert?

Jörg Wunsch schrieb:
> Karl Heinz Buchegger schrieb:
>
>>> Lustig ist natürlich die Argumentation...  Die Aufnahme von 0b als
>>> Binärkonstanten in den Compiler lehnen sie aus Portabilitätsgründen
>>> ab,
>>
>> welche Portabilität?
>
> Musst du IAR fragen.  Vermutlich der des Sourcecodes auf andere
> Compiler (als ob das nun deren Sorge sein sollte ;-).

Eben.
da sollte man bei IAR dann gleich mal nachhaken, wie sie sich eigentlich 
die Portabilität ihrer ISR Syntax so vorstellen :-)


> die Datei mit den Makros.  Wenn der Hersteller die mit seinem
> Softwarepaket mitliefert, liegt er doch voll im Trend, dass heutzutage
> ein von den Nutzern auch ernst genommenes Softwarepaket nicht unter
> der Größe einer anständigen DVD daher kommen darf. >:-)

Die Festplatten-Industrie muss auch leben!

> Ja, leider hat sie eben vor 1999 noch nicht existiert (zumindest nicht
> in einer für diese Leute sichtbaren Form).

Ich hege ja immer noch die Hoffnung, dass sinnvolle triviale Änderungen 
es irgendwann dann doch in den Standard schaffen. Bei anderen Dingen ist 
der Zug ja schon lange abgefahren und man muss mit den Krücken leben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren