IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ALM Discussion :

manipulation et transfert de données inter-CPU


Sujet :

ALM

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut manipulation et transfert de données inter-CPU
    Bonjour,

    Voici mon interrogation. C'est autant de l'analyse, que de la conception ou de l'algorithmie.

    Je dois transférer une structure C de plus de 6000 champs d'un micro à un autre. Les deux micros ne sont pas les mêmes (un 16 bits et un 32 bits avec les problèmes d'alignements qui s'imposent). Je doit réaliser cette passerelle ou plutôt partir de la structure C dans le µC 16bits et fournir un buffer XML dans le 32 bits. Je dispose de tous les sources.

    Idée numéro 1 :
    Mettre la structure à plat (c'est une structure de structures et de tableaux de structures). Bref la dérouler en éléments simples (int, short, char ...) dans un fichier texte puis en sortir un mapping 16 bits tout cela à buildtime. Puis partant d'une copie du bloc mémoire identique (au 16) dans le 32 bits (sans notion de structure C) et du mapping précédent récupérer mes valeurs à runtime.

    problème : Je sais pas comment mettre la structure à plat ! Manuellement c'est pas envisageable.

    Idée numéro 2 :
    Générer le XML dans le 16 bits puis n'envoyer qu'une chaine de caracteres au 32 puisque dans le 16 j'ai la structure C.

    problème : l'export en XML prends trop de temps et je n'ai pas suffisamment de RAM sur ce micro.

    Voila je suis intéressé par vos idées soit pour appréhender le problème différemment soit pour m'aider sur mon idée numéro 1.

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    Voila je suis intéressé par vos idées soit pour appréhender le problème différemment soit pour m'aider sur mon idée numéro 1.
    Simple...

    Il y a des fonctions hton.. (host to network) et ntoh.. (network to host) pour passer des éléments en binaire à travers un réseau... (htons par exemple pour short, etc) (ntohl ou htonl)

    donc tu utilises :

    Bref la dérouler en éléments simples (int, short, char ...)
    pour écrire en binaire la structure, et tu la récupères de l'autre côté en la lisant dans le même ordre avec les instructons inverses...



    Maintenant, si tu veux transférer un fichier XML, ben ya pas trop de problème.. Tu peux le compresser/décompresser au vol avant/après de l'envoyer..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Je connais ces fonctions mais je crains que cela ne resolve pas mon probleme.
    c'est pas tant l'endianness qui me pose probleme mais l'alignement et là ces fonctions ne peuvent rien pour moi.

    admettons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct 
    {
      char car;
      uint16 ent;
    }test;
    
    test MaVar;
    sur mon micro 16 bits l'organisation mémoire va ressembler à c*ii (où c represente le char et i un octet du int16, * un octet perdu (alignement)).
    &MaVar.car = 0 et &MaVar.ent = 2

    sur un micro 32 bits l'organisation mémoire va ressembler à c***ii.
    &MaVar.car = 0 et &MaVar.ent = 4

    c'est principalement ce probleme qui me bloque.

    Merci

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    Bonjour,

    Je connais ces fonctions mais je crains que cela ne resolve pas mon probleme.
    c'est pas tant l'endianness qui me pose probleme mais l'alignement et là ces fonctions ne peuvent rien pour moi.

    admettons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct 
    {
      char car;
      uint16 ent;
    }test;
    
    test MaVar;
    sur mon micro 16 bits l'organisation mémoire va ressembler à c*ii (où c represente le char et i un octet du int16, * un octet perdu (alignement)).
    &MaVar.car = 0 et &MaVar.ent = 2

    sur un micro 32 bits l'organisation mémoire va ressembler à c***ii.
    &MaVar.car = 0 et &MaVar.ent = 4

    c'est principalement ce probleme qui me bloque.

    Merci
    je ne vois pas en quoi ça bloque... A moins que tu n'aies des références d'adresse absolues...


    A priori on s'en fiche des problèmes d'alignement, sauf si tu communiques le total de la structure en binaire... Mais si c'est en ASCII ou chaque élement en binaire via les fonctions, on s'en fiche complètement..

    Par exemple en ASCII ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    typedef struct 
    {
      char car;
      uint16 ent;
    }test;
    
    test MaVar;
    
    void Ecrit ( test *MaVar )
    {
       unsigned char Message[10000] ;
    
       Message[0] = (unsigned char) MaVar->car ;
       sprintf ( &(Message[1]), "%d", MaVar->ent);
    
       SendMessage ( Message );
    }
    
    
    void Lit ( test *MaVar )
    {
       unsigned char Message[10000] ;
    
       ReceiveMessage ( Message );
       MaVar->car = (char)Message[0] ;
       sscanf ( &(Message[1]), "%d", &(MaVar->ent) );
    }
    Donnera le bon résultat de chaque côté..

    Ou alors il y a quelque chose qui m'échappe...


    Je ne vois pas où est la question par rapport à l'alignement...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Citation Envoyé par sybe30 Voir le message

    Générer le XML dans le 16 bits puis n'envoyer qu'une chaine de caracteres au 32 puisque dans le 16 j'ai la structure C.

    problème : l'export en XML prends trop de temps et je n'ai pas suffisamment de RAM sur ce micro.
    je ne vois vraiment pas du tout l'intérêt de générer des fichiers XML...comme tu l'écris ça va prendre du temps inutilement..
    Citation Envoyé par sybe30 Voir le message
    Je dois transférer une structure C de plus de 6000 champs d'un micro à un autre. Les deux micros ne sont pas les mêmes (un 16 bits et un 32 bits avec les problèmes d'alignements qui s'imposent)
    attention aux problèmes de Big Endian/Little Endian....
    les CPU d'Intel sont Little Endian,Motorola c'est l'inverse ( à vérifier)...

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    vous n'avez pas le choix, vous devez parcourir la structure au départ champs par champs et idem au remplissage à l'arrivée, ainsi vous éviter les problèmes d'alignement

    le plus performant est évidemment de ne pas passer par une représentation externe (ie printf), pour ne pas avoir de problème d'ordre des octets utilisez htonXX et ntohXX (en fait ces deux fonctions font finalement la même chose, car soit elle retournent soit elles ne font rien)

    si la structure est complexe et sa définition peut changer, je vous recommande de faire une petite appli lisant la définition de la structure et produisant automatiquement les sources d'envoi / réception, vous éviterez ainsi des erreurs

    je confirme que passer par xml est une totale abbération
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    je ne vois vraiment pas du tout l'intérêt de générer des fichiers XML...comme tu l'écris ça va prendre du temps inutilement..
    je confirme que passer par xml est une totale abbération
    l'XML n'est pas une aberation c'est le cahier des charges !

    Maintenant, comme vous, si cela ne m'etait pas expressement demandé je ne voie aucune raison de passer par là mais ............




    Les deux micros sont reliés par une liaison faible debit (UART) et cette liaison est utilisée pour plein d'autres choses. Donc mon interet de ce coté là c'est de transferer le moins possible (donc en binaire (7Ko) et pas en ASCII). Ensuite 1 des deux micros du produit est plus critique et moins puissant que l'autre.

    A priori on s'en fiche des problèmes d'alignement, sauf si tu communiques le total de la structure en binaire... Mais si c'est en ASCII ou chaque élement en binaire via les fonctions, on s'en fiche complètement..
    Donc je cherche à transferer cette structure en binaire entre les deux micro, puis faire l'export en XML sur le micro le plus puissant et le moins critique (en plus c'est dans ce micro que je dois fournir un buffer contenant l'XML.




    si la structure est complexe et sa définition peut changer, je vous recommande de faire une petite appli lisant la définition de la structure et produisant automatiquement les sources d'envoi / réception, vous éviterez ainsi des erreurs
    La structure est complexe mais ne bouge plus une fois compilée. Je cherche bien à faire une appli ou un script (un sorte de pré-processeur) en partant des .h du projet mais c'est là mon probleme décrit dans mon "Idée numéro 1" du post initial. Connaissez-vous un outil d'analyse de texte/code qui me donnerai cela ?



    attention aux problèmes de Big Endian/Little Endian....
    Ensuite pour le probleme des indiens j'en suis conscient mais c'est un probleme plus simple que je gererai plus tard.



    J'ai essayé en simulant sur PC à faire l'export XML et j'en ai pour 65 Ko (au lieu de 7 en binaire) .

    Merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    Donc mon interet de ce coté là c'est de transferer le moins possible (donc en binaire (7Ko) et pas en ASCII). Ensuite 1 des deux micros du produit est plus critique et moins puissant que l'autre.

    Donc je cherche à transferer cette structure en binaire entre les deux micro...

    La structure est complexe mais ne bouge plus une fois compilée. i
    Donc il faut faire ce que je disais au début :

    faire une fonction Ecrit_Structure et une Lit_Structure qui passe champ par champ et appellent les fonctions hotn et ntoh et utilise les read et write binaires..

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Oui dans la theorie mais dans la pratique champs par champs c'est compliqué (pres de 6000 champs). Donc il faut scripter au moins sur une phase preparatoire. Et là j'y arrive pas.

    Parceque Ecrit_Structure champs par champs à la main sur 6000 champs ça me semble impossible.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    Parceque Ecrit_Structure champs par champs à la main sur 6000 champs ça me semble impossible.
    6000 champs distincts et non sous forme de tableau ?????????


    Tu as un problème beaucoup plus grave que le passage entre 2 micros...


    D'une part c'est aberrant....

    D'autre part, même si ça ne l'était pas (mais ça l'est) écrire 6000 lignes de quasi copier-coller t'aurait pris moin de temps que les 4 jours déjà écoulés depuis ton premier post...

    Donc, avant de penser à faire quoi que ce soit, tu as un gros problème de conception de ta structure....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Effectivement il n'y a pas bcps de tableau. Quelques uns bien sur mais la majorité c'est pas gerable dans une boucle.

    La structure j'en herite dans un soft qui tourne depuis presque 20 ans. C'est hors sujet (et hors planning) que de me pencher sur ce probleme.

    D'autre part, même si ça ne l'était pas (mais ça l'est) écrire 6000 lignes de quasi copier-coller t'aurait pris moin de temps que les 4 jours déjà écoulés depuis ton premier post...
    4 jours n'y suffisent pas et meme si c'etait le cas (mais ça ne l'est pas) le jour où il y a un probleme ou une modif je vais avoir des angoisses ....

    Dans un projet industriel il y a un existant + un cahier des charges + des contraintes. Sur ces 3 parametres on ne peut pas forcement influer.

    Meme si jamais je coderai une structure avec 6000 champs on me demande de l'exporter (plus d'autres petites choses). Donc je dois faire avec.

    Pour le moment la solution la moins pire c'est de preprocesser le source mais je sais pas avec quel outil.

    merci

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    je ne comprend pas :

    tu peux générer ton fichier XML, non ???

    Donc tu as toutes les instructions déjà étalées...


    Ou alors tu te fais un petit parseur dans le langage de ton choix, à qui tu fournis en entrée le bout (??) de code qui remplit les 6000 champs, et le transforme en y ajoutant les hotn et ntoh..

    C'est sans doute le plus rapide à faire si le code est propre, cohérent...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Non pour le moment je n'ai pas de code pour generer le XML. Il me faudra le faire ensuite. Ce sera plus un pb quand j'aurai reussir à faire l'etape 1. Le nom des TAGs XML etant incremental (<var1>.....<varn>).

    Je sais c'est encore plus debile de faire du XML comme cela.

    Enfin si vous n'avez pas de solution à me proposer pour scripter un "parse" des sources (.h) c'est pas grave.

    Merci

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    Enfin si vous n'avez pas de solution à me proposer pour scripter un "parse" des sources (.h) c'est pas grave.
    Euh.. pourquoi vouloir scripter un ".h" ???

    Un "sed" bien appliqué sur le source d'assignation de la structure te premttra rapidement d'avoir préparé le terrain en grande partie...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #15
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    J'ai jamais fais de sed, c'est facile à apprendre ? on y rentre vite ?

    merci

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sybe30 Voir le message
    J'ai jamais fais de sed, c'est facile à apprendre ? on y rentre vite ?
    sed est un outil unixoide permettant de remplacer une expression par une autre...

    man sed

    (en gros sed expression_a_remplacer expression_remplacement fichier)

    Et pour des précisions et/ou des demandes, tu vas sur le forum Linux
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Transfert données inter-feuille excel
    Par 21368 dans le forum Excel
    Réponses: 3
    Dernier message: 18/04/2012, 19h18
  2. [C#] [Excel] Transfert de données
    Par bartoumi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h08
  3. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  4. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  5. Transfert de données vers My SQL
    Par zoso dans le forum Outils
    Réponses: 2
    Dernier message: 30/09/2003, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo