C embarqué inversin d'octets

Fermé
Link31 - 27 mars 2012 à 12:30
 Link12 - 30 mars 2012 à 21:42
Bonjour,
J'ai un problème sur du C embarqué. J'utilise un simulateur d'OS avec un compilateur GCC (cygwin). Le simulateur est censé simuler une execution sur une cible powerPC750Cxe. dans mon code j'utilise une structure pour stocker des données (octets) que je reçois sur un reseau ethernet; et mon problème est que dans tous les champs de ma structure les lsb et les msb sont inversés. Exemple : j'envoie à mon appli en hexa 0xCAFEDECA la donné 32 bit stockée dans ma structure ou meme ma variable (type entier 32) est 0xCADEFECA. Auriez vous une idée d'où cela peut venir?

2 réponses

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 29/03/2012 à 03:18
Bonjour, c'est un problème d'endianness https://en.wikipedia.org/wiki/Endianness entre les deux machines. Je ne sais pas comment vous envoyez les données et les recevez mais le problème vient de là à mon avis. Créez un protocole pour vos données ne les envoyez&recevez pas directement dans les sockets tel quel, pour les char ça passe mais les int etc..
Pouvez faire le test de conversion big et little endian là : http://www.darkfader.net/toolbox/convert/ en utilisant la section "Integer, IPv4 address"

Edit : café déca c'était au pif ou voulut ?
0
Effectivement tu as raison c'est un problème d'endianness, j'ai eu la confirmation des personnes qui ont fait l'outil de simulation du hard. incompatibilité entre le hard simulé et le PC.

Pour le CAFEDECA c'est fait exprès, c'était pour identifier la façon dont les digits sont arrangé.
0