destroyedlolo a écrit :Un simple
Code : Tout sélectionner
unsigned long int toto = 0xaabbccdd;
write(fd, &toto, sizeof(toto);
ne donnera pas le même résultat si l'un est écrit par un gros-boutiste (68000, Spark, ...) et lu sur un petit-boutiste (x86) ou l'inverse car l'octet de poids fort ne se trouve pas au même endroit.
Tout à fait vrai, mais tu n’as rien compris ou pas tout lu. D'ailleurs en parlant de lecture fiable, tu aurais du me reprendre. J'avais malencontreusement écrit 'L'ordre des bits' alors que j'aurais dut écrire 'l'ordre des bytes' . Heureusement que tu m'a cité, sinon je le l'aurais même pas vu. J'ai donc corrigé mais ca ne change rien au raisonnement.
Petit rappel pour ceux qui se mélangent les pinceaux ou qui comme moi tape un peu trop vite : 1 byte = 1 octet = 8 bits
Explication du pourquoi on s'en fout de la taille de l'indien:
Quand on découpes une variable codée sur plusieurs octets pour construire un tableau de bytes, on décide arbitrairement de la position de chaque byte dans le tableau. Apres que le system qui envoi soient little ou big endian, on s'en fout puisque tous les protocoles /ip sont fort heureusement normalisé (big-endian) et c’est le processus IP propre au destinataire qui a la charge de mettre les bytes dans le bon ordre pour sa propre interprétation. C’est exactement ce qui se passe quand on envoies une chaine de caractères sur un socket /IP. On ne peux le faire qu’en précisant le type d’encodage et si celui-ci est codé sur plusieurs octets (genre utf32), c'est justement l'encodage qui va construire un tableau de bytes ordonnée
obligatoirement big-endian. A destination, Les bytes sont remis dans le bon ordre toujours par le processus IP du destinataire et la reconvention en caractère est faite en précisant localement l’encodage (qui doit être du même type qu'a l'envois sinon ca fait des gribouillis dans le texte

). Dans notre cas, il n’existe pas (ou pas encore …) d’encodage
PinHapple16 ou
PinHapple32, donc on ordonnes suivant … notre humeur du moment ou nos habitudes et la seul chose qui importe, c'est que l'on décode de la même façon. C'est comme cela que ca fonctionne et c'est justement ce qui permet à n'importe quel système de dialoguer /IP avec n'importe quel autre sans avoir a se soucier de tout ca.
destroyedlolo a écrit :
Seuls les int8_t, int16_t, int32_t sont normalisés (mais pas forcement supporté par les anciens compilos) : int, long int, ... dépendent de l'archi spécialement dans l'embarqué.
Qui t’as parlé de compiler quelques chose. On ne parle pas de compilation mais de transmission de données UDP/IP entre un client python ARM et un serveur C konsefoutdecekecest (Relire le titre du sujet). Tu n’envoies pas des Int signés ou pas, codés sur 8,16 ou 32 bits ou je ne sais quoi d’autre, tu n’envois que des tableaux de bytes que tu as toi-même ordonné au moment de la construction. A réception, quel que soit le système, tu auras EXACTEMENT le même tableau de bytes. Suffit ensuite de réattribuer en bonne place suivant les types utilisés localement (qui ont toutes les chances d’être complétement diffèrent que ceux utilisés avant la construction du tableau). Je persiste donc à dire que dans le cas qui nous intéresse, les types on s'en fout royalement. L'important, c'est que les valeurs des types finaux soient conforme aux valeurs des types initiaux et si ca chante le développeur d'aller loger une valeur qui était au départ un int16 dans un word, un long ou un int32, ca marchera tout pareil pour peut qu'il fasse attention à la signature.
Si il y a des choses que tu ne comprends pas, n'hésite pas a demander.
Pour en revenir au sujet :
Juste une question parce que ca me taraude quand même : Tu comptes faire quoi à l'arrivé des données sur ton PI ? Même si j'ai dit qu'on s'en foutait pour l'instant, ca peut quand même avoir de l'incidence sur la méthode d'envoi a choisir.
PS HS : J'étais un peu en rade d'idée pour aller mettre une nouvelle leçon sur le tuto des app. web dynamique
viewtopic.php?f=44&t=3033/ mais tout ca m'a éclairé. Dès que j'ai le temps, je vais coder un petit client UDP. Ca devrait être instructif pour beaucoup et ca pourra faire la base d'un bon petit outils d'analyse
Pinhapple a écrit :
après recherches, on parle de durée de l'ordre de la milliseconde pour l'écriture, même avec une "bonne" carte...

Nouveau problème. Comment enregistrer des données plus vite qu'on ne les reçois sur un système qui reçoit plus vite qu'il ne les enregistres ?
Décidément, T'as pas choisi un projet facile
