[PIC] Copier tableau
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[PIC] Copier tableau



  1. #1
    Kreg

    [PIC] Copier tableau


    ------

    Bonjour,

    J'ai quelques difficultés par rapport à la fonction memcpy.
    En fait, je souhaiterais copier le contenu d'un tableau qui est dans la ROM (ici tab1) dans un tableau qui est dans la RAM (ici tab2).

    Tout d'abord, j'ai copié un tableau de la RAM vers la RAM, de tab1 vers tab2.

    Code:
     float tab1[4]={1.0,2.0,3.0,4.0}; 
    float tab2[2];
     memcpy(tab2,tab1+2,sizeof(tab1));
    Cela fonctionne parfaitement et tab2 contient les valeurs 3 et 4 (oui, je voulais faire un petit décalage)

    J'ajoute 'const'

    Code:
    const float tab1[4]={1.0,2.0,3.0,4.0}; 
       float tab2[2];
       memcpy(tab2,tab1+2,sizeof(tab1));
    Le même code en rajoutant 'const' et j'obtiens un résultat incohérant (tab2 contient des 0).
    Comment puis je corriger cela ?

    J'utilise MPLAB 8.92 avec CCS.
    Mon PIC est de la famille 18
    Merci

    -----

  2. #2
    Jack
    Modérateur

    Re : [PIC] Copier tableau

    Cela fonctionne parfaitement
    Il ne faut pas se fier aux apparences: tu copies 4 float dans un tableau qui ne peut en contenir que 2. Tu ne vois pas lés dégâts, mais l'écriture des 2 octets en dehors de tab2 vont écraser les données qui s'y trouvent.

  3. #3
    RISC

    Re : [PIC] Copier tableau

    Salut,

    Quel PIC18 utilises-u exactement ?
    Quel debugger ?
    Vérifies bien la documentation des librairies pour la fonction memcopy et en particulier quels sont les argument autorisés : RAM vers RAM, ROM (= const) vers RAM
    Les instructions de lecture dans la FLASH et dans la RAM étant différentes en PIC18, il faut parfois utiliser différentes fonctions
    Si tu utilises MPLAB, va en mode débogueur et regardes la RAM

    a+

  4. #4
    andre_teprom

    Re : [PIC] Copier tableau

    Je pense qu'il serait préférable d'employer l'indexation, comme suit:
    Code:
    memcpy(tab2,tab1[2],sizeof(tab1)-2);

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : [PIC] Copier tableau

    Non, tab1[2] n'est pas une adresse mais une donnée contenue dans le tableau.

    De plus sizeof(tab1) - 2 ne va pas marcher non plus car sizeof compte en octets. Hors il ne faut pas retirer 2 octets, mais la taille de 2 float.

  7. #6
    andre_teprom

    Re : [PIC] Copier tableau

    Vous avez absolument raison en ce qui concerne le format standard des nombres, et donc une opération de conversion de type pour float est exigé. Cependant, comme le adresse, je dois dire que j'ai utilisé auparavant dans des structures similaires indexer une table de signaler son adresse avancé.

    Je pense qu'il serait intéressant de tester la structure ci-dessous:

    Code:
    memcpy( tab2 , tab1[2] , sizeof(tab1)-2*sizeof(float) );
    Dernière modification par andre_teprom ; 14/08/2014 à 13h07. Motif: correction

  8. #7
    Jack
    Modérateur

    Re : [PIC] Copier tableau

    Cependant, comme le adresse, je dois dire que j'ai utilisé auparavant dans des structures similaires indexer une table de signaler son adresse avancé.
    Pas très clair ce que tu racontes ...

    Je pense qu'il serait intéressant de tester la structure ci-dessous:
    memcpy( tab2 , tab1[2] , sizeof(tab1)-2*sizeof(float) );
    Je pense que tu n'as pas encore bien compris la syntaxe des tableaux. Regarde la doc:
    http://manpagesfr.free.fr/man/man3/memcpy.3.html
    le 2ème paramètre est du type void* et toi tu passes un float. Tu aurais pu t'en rendre compte en essayant de compiler ce code.
    Ce qui marche par contre c'est ceci:
    Code:
    memcpy( tab2 , &tab1[2] , sizeof(tab1)-2*sizeof(float) );
    ou plus simple:
    Code:
    memcpy( tab2 , tab1 + 2 , sizeof(tab1)-2*sizeof(float) );
    Dernière modification par Jack ; 14/08/2014 à 14h00.

  9. #8
    andre_teprom

    Re : [PIC] Copier tableau

    Pardon pour l'erreur. A été effectivement oublié l'opérateur '&' dans le code précédemment posté

Discussions similaires

  1. [PHP] tri d'un tableau et création d'un nouveau tableau
    Par crocoscore dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 10/02/2014, 22h05
  2. Alimentation d'un tableau divisionnaire depuis tableau principal
    Par wonderfulif dans le forum Bricolage et décoration
    Réponses: 2
    Dernier message: 19/09/2013, 17h22
  3. Peinture magnétique, tableau blanc pour feutre, tableau noir pour craie
    Par dasv74 dans le forum Bricolage et décoration
    Réponses: 2
    Dernier message: 03/04/2012, 12h22
  4. copier de pc a pc
    Par roland59 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 21
    Dernier message: 08/12/2008, 19h26
  5. copier mes K7 vhs sur dvd ?
    Par elektrax dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 17/10/2003, 18h39
Découvrez nos comparatifs produits sur l'informatique et les technologies.