mikrocontroller.net

Forum: PC-Programmierung Byte Order Intel/PowerPc


Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe fogende Ausgangslage:
Versenden von Nachrichten über UDP zwischen PC (Intel) und PowerPC. 
Programmiersprache ist ADA (bis auf die Socket Funktionen welche in C 
implementiert sind). Der Code im PowerPC ist fest und kann nicht 
verändert werden.

Hierbe ergibt sich folgendes Problem:
Da Intel und PowerPC ja verschiedene Byte Order haben, kommen die Daten 
welche vom PC an den PowerPC gesendet werden, dort in der falschen 
Reihenfolge an.

Mit den Funktionen htonl() und htons() kann man die Byteorder ja in C 
ändern. Jedoch funktioniert dies ja nur richtig wenn es sich um 16 bzw. 
32 Bit Datentypen handelt.  Da ich aber selbst definierte Strukturen 
versenden möchte klappt das so nicht.
Hat jemand einen Rat für mich?
Vielen Dank.

mfg. Julian

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verschickst du Binärdaten? Wenn ja, solltest du wirklich gute Gründe 
dafür haben, denn generell ist das keine sonderlich gute Idee, wie die 
Erfahrung zeigt.

Bei Übermittlung einer Textdarstellung hättest du das Problem nicht.

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, verschicke meine Struktur als Binärdaten, da der Empfänger (PowerPC) 
diese so erwartet.
Der record meiner Struktur sieht zum Beispiel so aus:

for x use
record
G   at   0 range  0 .. 15;
A   at   2 range  8 .. 15;
B   at   4 range  0 .. 15;
C   at   6 range  0 .. 47;
...
D   at  58 range  0 .. 1
E   at  58 range  2 .. 3;
F   at  58 range  4 .. 4;
...
end record


mfg. Julian

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du dir auf dem PowerPC nicht ein Programm schreiben, das - 
ähnlich einem Filter unter Unix - die Daten als Text von der 
Schnittstelle einliest, wandelt und auf eine Pipe ausgibt, aus der das 
Zielprogramm sich die Daten abholt?

Nachtrag: Mach das Wandlungsprogramm so, daß es die Textdaten auf einem 
Socket einliest, wandelt und auf einem anderen ausgibt.

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss leider mein Programm so anpassen dass der PowerPC mit den 
Nachrichten was anfangen kann, nicht andersherum...

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo ist das prinzipielle Problem?

Du kannst doch die Daten vom PC aus als Text z.B. an PowerPC Port 10000 
schicken. Dort lauscht dein Wandlungsprogramm, das die Textform in die 
auf dem PPC benutzte Binärform umwandelt und z.B. auf Port 10001 wieder 
ausgibt.

An 10001 hängt das Programm, auf dessen Quellen du keinen Zugriff hast.

Die andere Richtung geht natürlich auch.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die im Pdf beschriebene Methode funktioniert aber auch nur wenn die 
verwendeten Datentypen nicht über die Byte/Word/DoubleWord grenzen 
hinausgehen.... Oder sehe ich das falsch?
Danke

mfg.
Julian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder du beschreitest den von Uhu vergegebenen Weg
oder aber du sendest die Bytes genauso wie der PowerPC
das haben will.

Wenn du in einer Struktur mehrere int hast, dann
wirst du wohl jeden int einzeln anpassen müssen.
Auch eine Struktur hat ja eine Feinstruktur (nämlich
die Member aus denen sie aufgebaut ist). Und an dieser
Feinstruktur musst du ansetzen.

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.