Forum: Mikrocontroller und Digitale Elektronik IAR Workbench Binäre Zahlen eingeben


von 1000VoltGehirn (Gast)


Lesenswert?

Hallo,

ist es möglich eine Zahl Binär einzugeben ?

Danke.

von Frank (Gast)


Lesenswert?

Also zumindest für den MSP geht es NICHT, denke, es wird dann generell 
für alle MCUs sein, da es vom Compiler umgesetzt werden muss.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von 1000VoltGehirn (Gast)


Lesenswert?

Ist halt echt nervig immer umzurechnen

von 1000VoltGehirn (Gast)


Lesenswert?

Da gibts doch sicher ein Macro oder sowas ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1000VoltGehirn schrieb:
> Da gibts doch sicher ein Macro oder sowas ?

Ja, such' mal hier im Forum.  Schreibt man dann halt B00000000,
B00000001 usw., statt 0b00000000, 0b00000001.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

1000VoltGehirn schrieb:
> Ist halt echt nervig immer umzurechnen

Nein. Ist ein ausgedehnter Nachmittag mit dem Pauken von gerade mal 16 
Bitkombinationen.

von Wolfgang-G (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:

>...einstellige Hexzahlen zu pauken, das ist eine Zukunftsinvestition.

meinst Du, dass das Dezimalsystem eines Tages vom Hexsystem abgelöst 
wird?
MfG

von Micha (Gast)


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...

von gerhard (Gast)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wolfgang-G schrieb:
> meinst Du, dass das Dezimalsystem eines Tages vom Hexsystem abgelöst
> wird?

Nein, aber hexadezimale Zahlen zu beherrschen ist eine der essentiellen 
Grundvoraussetzungen, um Programmieren zu lernen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Karl H. (kbuchegg)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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).

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.