Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: IEEE Little Endian? Kategorie: Programmierung (von André H. - 3.08.2007 8:30)
Als Antwort auf IEEE Little Endian? von Michael Zapf - 22.07.2007 22:32
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo Michael,

> mir ist aufgefallen, dass putfloat/getfloat anscheinend mit dem IEEE-Format in Little-Endian-Richtung arbeiten. Das ist
> schon ein bisschen überraschend, da die entsprechenden Routinen für int/long ein Big-Endian verwenden. Vor allem,
> wenn man mit Java über die hwcom kommuniziert, wird das zu Problemen führen. Ein entsprechender Hinweis in der
> mem.c2 sollte vielleicht angebracht werden. Ich weiÃ?, die Anleitung warnt schon einmal vorsorglich vor dem Datenaustausch,
> aber ich muss nun einmal Flie�kommawerte zwischen CC2 und PC übermitteln.
>
> Beispiel: In Bytedarstellung ist -15 = 00 00 00 00 00 00 2e c0 beim CC2, jedoch in umgekehrter
> Reihenfolge in Java. Für int und long ist die Reihenfolge bei beiden gleich.
>
> Es wäre meines Erachtens hilfreich, dies anzugleichen oder der Kompatibilität halber eine weitere Methode hinzuzufügen,
> welche für die andere Endigkeit zuständig ist.

Auch wenn die Reihenfolge anders ist, als erwartet, sehe ich keinen Grund,
hier etwas im OS zu ändern.
Im Gegenteil. Das wäre sogar gefährlich, da bisherige Programm, welche z.B. float-Werte
im Flash, in EEProms oder anderen externen Speichern abspeichern nach einem
OS-Update fehlerhaft funktionieren würden.

Daher ist es eher sinnvoll, die Reihenfolge vor dem Ã?bertragen einfach umzudrehen.
Gut, die Funktion swapByteArray() existiert noch nicht, aber ich habe mir
das für mem.c2 vorgemerkt. (als ASM-Routine)

Bis dahin kann man das in C2 lösen, auch wenn dies etwas langsamer ist:
function swapByteArray(byte data[], int len)
{int i,j;
 byte temp;
 len=len-1;
 j=len shr 1;
 for i=0...j
 {
  temp=data[i];
  data[i]=data[len-i];
  data[len-i]=temp;
 }
}


MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: