Wo finde ich wie Integer "aussehen"

Moderator Persönliche Seite #284073
Lesenswert?
• ▲
▼
Ja klar.  Dachtest du, der AVR erfindet das Rad neu?

Das hängt übrigens nicht von der Bibliothek ab, sondern vom
Prozessor.  Mit C hat es auch nicht unbedingt was zu tun,
insofern ist das C-Buch u. U. ungeeignet als Nachschlagewerk
(weil C sich natürlich möglichst komplett aus solchen Dingen
wie einer internen Zahlendarstellung raushalten möchte).
Gast #284074
Lesenswert?
• ▲
▼
Ich vermute mal, Simon meint die Byteorder. Die ist bei 8-Bittern nicht
definiert und daher compilerabhängig.

Wenn ich einen Int in Bytes zerlege bzw. umgekehrt, mache ich das daher
lieber compilerunabhängig, also mit Schiften und Undieren.


Bzw. wenn verschiedene 16- oder 32-Bitter kommunizieren, ist das auch
immer wieder ein Problem.

Ein Kollege ist gerade dabei, einen Ethernettreiber auf den ARM zu
portieren. Der 8051 (Keil C51) hatte die richtige Byteorder, der ARM
hat leider die falsche und benötigt außerdem ein Alignment.


Peter
Gast #284075
Lesenswert?
• ▲
▼
@Peter Dannegger:

> Ein Kollege ist gerade dabei, einen Ethernettreiber auf den ARM
> zu portieren. Der 8051 (Keil C51) hatte die richtige Byteorder,
> der ARM hat leider die falsche und benötigt außerdem ein Alignment.

Erzähle Deinem Kollegen, dass htons(), htonl(), ntohl() und ntohs()
schon erfunden sind.
OP Persönliche Seite #284076
Lesenswert?
• ▲
▼
Ich glaube Peter versteht mich.

Im C Buch habe ich nichts dazu gefunden (Ist halt nur ein Anfänger C
Buch), aber wenn ich was gefunden hätte, hätte es also nicht
zwangsläufig für den AVR gelten müssen?

Denn was ich wissen will ist folgendes:

Wenn ich jetzt 2 bytes von einem bipolaren ADC bekomme (Also der + und
- messen kann, wo das höchste Bit das Vorzeichen bit ist), kann ich
einfach den Wert als INT einlesen und habe dann automatisch die
richtige Zahl oder muss ich noch dies oder das machen...

Und genau dafür, benötige ich die Information, wo beim AVR-C bzw beim
Integer jetzt genau das Vorzeichen Bit steht, wie -32767 aussieht und
+32767 und wie die 0 gilt. Und außerdem, wie die Zahlen dazwischen
aussehen.
Moderator Persönliche Seite #284077
Lesenswert?
• ▲
▼
> Denn was ich wissen will ist folgendes:

Nun, wie du eben siehst, ist es immer sinnvoll, genau das zu fragen,
was man wissen will, statt den Befragten einen Teil der Information
vorzuenthalten, weil man ,,vordenken'' will.

> Wenn ich jetzt 2 bytes von einem bipolaren ADC bekomme (Also der +
> und - messen kann, wo das höchste Bit das Vorzeichen bit ist), kann
> ich einfach den Wert als INT einlesen und habe dann automatisch die
> richtige Zahl oder muss ich noch dies oder das machen...

Das ist exakt das int16_t-Format praktisch aller heute gängiger
Architekturen, einschließlich des AVR.
Gast #284078
Lesenswert?
• ▲
▼
>>Das ist exakt das int16_t-Format praktisch aller heute gängiger
  Architekturen, einschließlich des AVR.

Bist du dir sicher ? Würde ich lieber nicht so pauschalisieren.

Der positive Bereich des 16Bit AD Wandler erstreckt sich von
0b0000 0000 0000 0000 bis 0b0111 1111 1111 1111 (0 bis +32767)
und der negative Bereich erstreckt sich über
0b0000 0000 0000 0000 bis 0b1000 0000 0000 0000 (0 bis -32767)

zu finden:
http://pdfserv.maxim-ic.com/en/ds/MAX1142-MAX1143.pdf
Seite 17...

Ich glaub nicht dass das aufm µC auch so ist, kann mich aber auch
irren, da ich noch keine Infos erhalten habe.

Ich denke auf dem µC ist es so:
0b0000 0000 0000 0000 bis 0b0111 1111 1111 1111 (0 bis +32767)
0b0000 0000 0000 0000 bis 0b1111 1111 1111 1111 (0 bis -32768)

Oder?
Persönliche Seite #284079
Lesenswert?
• ▲
▼
Hi

auf Seite 11 steht das Ausgabeformat doch beschreiben:

The output data format is straight binary for unipolar
conversions and two’s complement in bipolar mode.

Und das ist genau die Zahlendarstellung für Integerzahlen wie es
beinahe jedes µC-Rechenwerk dieser Welt verwendet. Alles andere wäre
auch nicht besonders clever vom Hersteller des ADC.

Matthias
Gast #284081
Lesenswert?
• ▲
▼
Arghs,

Ihr habt ja beide Recht. Ich weiß auch wie das Format vom ADC aussieht.
Ich möchte aber gerne wissen, wie der Integertyp im µC "aussieht",
damit ich erkennen kann ob irgndeine Anpassung notwendig ist.

Und das ist das, was ich wissen will. Wenn das aber anscheinend in
(fast) jedem C-Compiler gleich ist, dann ist das schonmal gut. Und da
ich jetzt weiß, dass dass das Format des ADCs gleich dem signed Integer
Format (also im bipo mode) ist, kann ich ja beruhigt schlafengehen ;)

@Peter:
Dachte ich auch so, beide Bytes einlesen, dass eine ins lowbyte packen,
das andere zu int casten, shiften und dann ins highbyte packen.

Wenn ich also jetzt itoa anwende auf diese signed integer zahl, dann
bekomme ich automatisch den richtigen +/- Wert zurück (Als String) ?

Aber gut, dass ich über viele Umwege noch an diese Info gekommen bin.
Eigentlich hättemir ja auch eine Seite o.ä. gereicht, wo das
aufgezeichnet ist mit dem signed/unsigned. Hatte erst versucht zu
googlen, bin aber gescheitert und das war der Grund, dass ich hier
gefragt habe.

Dankee

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.