typedef Union trop complique pour moi
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

typedef Union trop complique pour moi



  1. #1
    inviteac751535

    typedef Union trop complique pour moi


    ------

    voici la structure proprement dite : il ya trop de truc et je n'y vois pas clair.
    cette structure sert a la reception de donnee usb sur un PIC 18f4550.
    le pic recoit plusieurs buffer 0, buffer 1, buffer2 et tous ca semble disptcher la dedenas mais comment?????

    Code:
    typedef union DATA_PACKET
    {
    byte _byte[USBGEN_EP_SIZE]; //For byte access
    word _word[USBGEN_EP_SIZE/2];//For word access(USBGEN_EP_SIZE msut be even)
    struct
    {
    enum //PROTOCOLO
    {
    READ_VERSION = 0x00,
    SALIDA_DIGITAL_BYTE = 0x10,
    SALIDA_DIGITAL_BIT = 0x11,
    ENTRADA_DIGITAL_BYTE = 0x12,
    ENTRADA_DIGITAL_BIT = 0x13,
    SALIDA_ANALOGICA = 0x14,
    ENTRADA_ANALOGICA = 0x15,
    RESET = 0xFF
    }CMD;
    byte len;
    };
    struct //SALIDAS DIGITALES. LAS 8 SALIDAS DIGITALES CONTROLADAS SIMULTANEAMENTE (BYTE)
    {
    unsigned :8;
    byte salida_digital_byte_valor; //DATO A ESCRIBIR EN LAS SALIDAS DIGITALES (0-255)
    };
    struct //SALIDAS DIGITALES. CONTROL INDIVIDUAL DE UNA DE LAS 8 SALIDAS (BIT)
    {
    unsigned :8;
    byte salida_digital_bit_numero_sali da; //NÚMERO DE SALIDA A CONTROLAR (0-7)
    byte estado_salida_digital; //VALOR PARA ESA SALIDA (0-1)
    };
    struct //ENTRADAS DIGITALES. LAS 8 ENTRADAS DIGITALES LEIDAS SIMULTANEAMENTE (BYTE)
    {
    unsigned :8;
    byte entrada_digital_byte; //VALOR LEIDO DE LAS ENTRADAS DIGITALES (0-255)
    };
    struct //ENTRADAS DIGITALES. LECTURA INDIVIDUAL DE UNA DE LAS 8 ENTRADAS (BIT)
    {
    unsigned :8;
    byte entrada_digital_bit_numero_ent rada; //NÚMERO DE ENTRADA A LEER (0-7)
    byte estado_entrada_digital; //VALOR LEIDO ESA ENTRADA (0-1)
    };
    struct //SALIDAS ANALÓGICAS. CONTROL INDIVIDUAL DE UNA DE LAS DOS SALIDAS ANALÓGICAS
    {
    unsigned :8;
    byte salida_analogica_byte_numero_s alida; //NÚMERO DE SALIDA A CONTROLAR (0-1)
    byte valor_salida_analogica_H; //VALOR A ESCRIBIR EN SALIDA ANALÓGICA
    byte valor_salida_analogica_L; //ENTRE LAS DOS --> RANGO (0-1023)
    };
    struct //ENTRADAS ANALÓGICAS. LECTURA INDIVIDUAL DE UNA DE LAS 8 ENTRADAS
    {
    unsigned :8;
    byte entrada_analogica_numero_entra da; //NÚMERO DE ENTRADA A LEER (0-7)
    byte valor_entrada_analogica_H; //VALOR A LEER EN ENTRADA ANALÓGICA
    byte valor_entrada_analogica_L; //ENTRE LAS DOS --> RANGO (0-1023)
    };
    } DATA_PACKET;
    je viens soliciter votre aide
    merci d'avance

    kix

    -----
    Dernière modification par yoda1234 ; 29/03/2010 à 09h38.

  2. #2
    yoda1234

    Re : typedef Union trop complique pour moi

    Rappel de la charte que tu as acceptée en t'inscrivant ici:

    La courtoisie est de rigueur sur ce forum : pour une demande de renseignements bonjour et merci devraient être des automatismes.
    De plus, il est conseillé d'utiliser les balises comme la balise "CODE" et qui symbolisée par ceci .
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  3. #3
    JPL
    Responsable des forums

    Re : typedef Union trop complique pour moi

    Et il est aussi conseillé d'indenter le code !
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  4. #4
    inviteac751535

    Re : typedef Union trop complique pour moi***HELP

    Bonjour et desole de ce manque de politesse.

    *************Et il est aussi conseillé d'indenter le code ! ***
    --> ca veut dire quoi indenter le code.
    --> avez vous une idee de la facon dont est interpretee ce code

    mais je suis un peu desespere....
    alors HELP HELP HELP pour comprendre cette structure

    merci et encore desole par mon indelicatesse.....

  5. A voir en vidéo sur Futura
  6. #5
    yoda1234

    Re : typedef Union trop complique pour moi***HELP

    Citation Envoyé par kixxxx Voir le message
    --> ca veut dire quoi indenter le code.
    Bonjour,

    voici une explication: http://fr.wikipedia.org/wiki/Indentation#Informatique
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  7. #6
    inviteac751535

    Re : typedef Union trop complique pour moi

    rebonjour,

    tres bien , mais pourquoi les structures n'ont pas d'identifiants
    ex : struct { x as... ; Y as ......}name_struct ;

    je ne vois pas de nom dans les structures du code ex :
    struct //SALIDAS DIGITALES. CONTROL INDIVIDUAL DE UNA DE LAS 8 SALIDAS (BIT)
    {
    unsigned :8;
    byte salida_digital_bit_numero_sali ;dabyte estado_salida_digital;
    };

    voyez vous une raison a cela?

    merci

  8. #7
    Jack
    Modérateur

    Re : typedef Union trop complique pour moi

    Tous les champs "struct" de l'union se recouvrent (c'est le principe de l'union). Il te suffira donc d'avoir une variable du type de l'union, c'est à dire DATA_PACKET, et de lui faire pointer sur n'importe quel champ d'une des structures selon le champ concerné.

    A+
    Dernière modification par Jack ; 30/03/2010 à 11h52.

  9. #8
    inviteac751535

    Re : typedef Union trop complique pour moi

    merci Jack pour ta reponse:
    En fait mon probleme viens du fait que lorsqu'on envoie des data via le port USB au PIC
    par exemple BUffer(0) =0 buffer (1)=0x11 buffer(2)=0x02 (par exemple)
    le pic interprete le buffer(1) comme SALIDA_DIGITAL_BIT et il interprete correctement le buffer 0x02 comme etant byte salida_digital_byte_valor.

    En fait j'ai beau regarder le code source du PIC( le firmware) dans tous les sens il ya rien qui indique que le second buffer pointe sur la structure correspondante :
    struct {
    unsigned :8;
    byte salida_digital_byte_valor; //DATO A ESCRIBIR EN LAS SALIDAS DIGITALES (0-255)
    };

    Puisque dans la suite du code on utilise cette variable comme DATA_PACKET.salida_digital_byt e_valor

    Le code fonctionne correctement mais je me prend la tete a le comprendre.
    croyez vous que la reponse a ma question puisse venir de la DLL utilisee pour la com USB mpUSBapi.dll

    enfin voila je suis un peu perdu quoi?

  10. #9
    Jack
    Modérateur

    Re : typedef Union trop complique pour moi

    Quelle est la déclaration de la variable buffer?

    A+

  11. #10
    b@z66

    Re : typedef Union trop complique pour moi

    Citation Envoyé par kixxxx Voir le message
    rebonjour,

    tres bien , mais pourquoi les structures n'ont pas d'identifiants
    ex : struct { x as... ; Y as ......}name_struct ;

    je ne vois pas de nom dans les structures du code ex :
    struct //SALIDAS DIGITALES. CONTROL INDIVIDUAL DE UNA DE LAS 8 SALIDAS (BIT)
    {
    unsigned :8;
    byte salida_digital_bit_numero_sali ;dabyte estado_salida_digital;
    };http://groupes.codes-sources.com/art...anonyme,struct

    voyez vous une raison a cela?

    merci
    Va-voir du côté des structures anonymes(et non des alcooliques), tu trouveras peut-être ton bonheur.

    http://www.generation-nt.com/structu...de-155041.html
    http://www.developpez.net/forums/d44...ypedef-struct/
    La curiosité est un très beau défaut.

  12. #11
    b@z66

    Re : typedef Union trop complique pour moi

    Citation Envoyé par kixxxx Voir le message
    En fait j'ai beau regarder le code source du PIC( le firmware) dans tous les sens il ya rien qui indique que le second buffer pointe sur la structure correspondante :
    struct {
    unsigned :8;
    byte salida_digital_byte_valor; //DATO A ESCRIBIR EN LAS SALIDAS DIGITALES (0-255)
    };

    Puisque dans la suite du code on utilise cette variable comme DATA_PACKET.salida_digital_byt e_valor
    Après cela concerne la gestion de l'électronique et le corps du programme lui-même. On ne pourra pas te répondre avec juste cette organisation de donnée que tu nous présentes.
    La curiosité est un très beau défaut.

  13. #12
    b@z66

    Re : typedef Union trop complique pour moi

    La curiosité est un très beau défaut.

  14. #13
    inviteac751535

    Re : typedef Union trop complique pour moi

    Rebonjour et merci de vous interresser a mon probleme :

    je vais essayer de vous fournir plus de details
    d'abord le projet C++ qui gere la DLL mpUSBapi.dll

    Code:
    ****declaration***********
    char vid_pid[]= "vid_04d8&pid_000c";    // Default Demo Application Firmware
    char out_pipe[]= "\\MCHP_EP1";
    char in_pipe[]= "\\MCHP_EP1";
    BYTE send_buf[64],receive_buf[64];
    ******fonction envoi***********
    VOID SalidasDigitalesBitTAD(DWORD numero_bit,DWORD valor_bit)
    {
    RecvLength=1;
    send_buf[0] = SALIDA_DIGITAL_BIT;	//Comando
    send_buf[1] = (BYTE)numero_bit;	//Dato
    send_buf[2] = (BYTE)valor_bit;	//Dato
    if(SendReceivePacket(send_buf,3,receive_buf,&RecvLength,1000,1000)==1)
    {
    if(RecvLength != 1 || receive_buf[0] != SALIDA_DIGITAL_BIT )
    {
    MessageBox::Show("USB Operation Failed","Function SalidasDigitalesBitTAD");
    exit(1);
    }
    }
    else
    {
    MessageBox::Show("USB Operation Failed","Function SalidasDigitalesBitTAD");
    exit(1);
    }
    }
    ***********desole pour l'indentification**********[/COLOR]
    
    donc voila pour la description software
    
    [COLOR="RoyalBlue"]*********code firmware en complement du code poste en haut**
    void ServiceRequests(void)
    {
     //byte index;
     word w;
     if(USBGenRead((byte*)&dataPacket,sizeof(dataPacket)))
     {
     counter = 0;
      switch(dataPacket.CMD)
     {
    case SALIDA_DIGITAL_BIT:
    if(dataPacket.estado_salida_digital!=0)
    dataPacket.estado_salida_digital=1;
    switch(dataPacket.salida_digital_bit_numero_salida)
    {
    case 0:
    LATDbits.LATD0=dataPacket.estado_salida_digital;
    break;
    case 1:
    LATDbits.LATD1=dataPacket.estado_salida_digital;
    break;etc.....
    					
     if(counter != 0)
     {
     if(!mUSBGenTxIsBusy())
     USBGenWrite((byte*)&dataPacket,counter);
     }//end if

    donc voila pour les infos supplementaires
    a+ et merci encore pour votre aide


    Et la balise "Code"?

    yoda1234.
    Dernière modification par yoda1234 ; 31/03/2010 à 07h09.

Discussions similaires

  1. dérivé compliqué pour moi
    Par invite699ec6b0 dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 23/10/2009, 12h49
  2. Au secours exercice de maths très compliqué pour moi
    Par invite5d55e02f dans le forum TPE / TIPE et autres travaux
    Réponses: 3
    Dernier message: 06/05/2009, 23h29
  3. montage aop compliqué (pour moi !)
    Par invite95822f03 dans le forum Électronique
    Réponses: 2
    Dernier message: 26/03/2008, 09h52
  4. Calcul très compliqué (du moins pour moi)
    Par Myr dans le forum Mathématiques du collège et du lycée
    Réponses: 9
    Dernier message: 16/08/2003, 04h27
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...