www.mikrocontroller.net

Forum: Compiler & IDEs Frage zu Unions


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte 32bit breite Daten vom typ unsigend int auf eine Variable der 
Grösse 64bit aufakkumulieren. Nun kam mir die Idee diese Geschichte mit 
Hilfe einer Union zu lösen.

union union_data
    { unsigned int long long v64;
      unsigned int v32;
    };

Ich addiere nun Daten auf union_data.v32 auf. Wenn ein Überlauf 
stattfinden, wird dieser in union_data.v64 zu sehen sein ? Habe leider 
keinen Rechner zur  Hand an dem ich dies ausprobieren könnte.
Danke und Gruss,
Martin

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ein Überlauf stattfinden, wird dieser in union_data.v64 zu sehen
> sein ?

Nein. Ich verstehe auch den Sinn nicht. Warum nimmst du nicht gleich 
einfach eine 64bit-Variable?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze läuft auf einem 32bit proc. und ist in assembler geschrieben. 
Die eigentliche Auswerteroutine wiederrum in C. Ich wollte mir somit 
eigentlich nur die Überlauf Überprüfung im Assembler Code schenken.
Danke jedoch,
Martin

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Martin (Gast)

>Ich addiere nun Daten auf union_data.v32 auf. Wenn ein Überlauf
>stattfinden, wird dieser in union_data.v64 zu sehen sein ?

Lass diesen Hackerscheiss und mach es ordentlich.

>Das ganze läuft auf einem 32bit proc. und ist in assembler geschrieben.

Wo ist dann das Problem? Mach in ASM eine einfache 64 Bit Addition. Ala

AVR Arithmetik

>Die eigentliche Auswerteroutine wiederrum in C. Ich wollte mir somit
>eigentlich nur die Überlauf Überprüfung im Assembler Code schenken.

Geht nicht. ist auch nicht wirklich performancekritisch.

MFG
Falk

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich wollte mir somit eigentlich nur die Überlauf Überprüfung im
> Assembler Code schenken.

Wie stellst du dir das vor? Wenn du eine 32-Bit-Addition machst, wird 
daraus nicht auf magische Weise eine 64-Bit-Addition, nur weil Werte mit 
diesen beiden Bitbreiten gemeinsam in einer union stehen. Wenn du eine 
64-Bit-Addition brauchst, mußt du sie auch machen. Die Überlauf 
Überprüfung" beschränkt sich ja in der Regel auch darauf, für die obere 
Hälfte statt des normalen Additionsbefehls den mit Carry zu verwenden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.