Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Buffer




  1. #1
    bartimeus

    Buffer

    Salut ...
    Et oui encore moi ... ils ont toujours du travail a donner en stage :s
    Si vous m aidez, vous aurez encore tous pleins de remerciements

    Cette fois je dois programmer en C. J'utilise MPLAB 8.10 avec C18.

    Je voudrais stocker une phrase dans un buffer ... quand je compile ça marche mais pas lors de mon exécution. Voilà mon bout de programme :

    {char ToSendDataBuffer[] = "Entré M puis n° multiplexeur.";}

    Si j'enlève les '{' il n'arrive pas a compiler.

    Pouvez-vous me dire comment stocker une phrase dans un buffer en C++ ?

    -----


  2. Publicité
  3. #2
    Jack

    Re : Buffer

    Il faudrait voir ce qu'il y a avant ta ligne, car l'erreur est toujours marquée par le compilateur après l'endroit effectif de cette erreur.

    A+

  4. #3
    bartimeus

    Re : Buffer

    J'ai tout simplement une boucle FOR :

    for(i=0;i<3;i++)
    {
    if(i == 0){char ToSendDataBuffer[] = "Entré M puis n° multiplexeur.";}
    ...
    }
    Je n'ai que cela ...

    Pouvez vous me dire ou se trouve l'erreur et si vous ne pouvez pas, me donner des liens avec des cours de C++ ?


  5. #4
    Jack

    Re : Buffer

    C'est normal, on n'a pas le droit en C d'affecter une chaine dans un tableau de caractères. Il faut utiliser la fonction strcpy.

    A+

  6. #5
    bartimeus

    Re : Buffer

    J'ai déclaré mon tableau comme ceci :

    unsigned char ToSendDataBuffer[64];

    Sachant que c'est un tableau et non un pointeur est ce que le code suivant est bon ? :

    void Version(void)
    {
    mLED_3_On();
    strcpy(ToSendDataBuffer, "911");
    Envoi();
    }

    Est ce que je dois déclarer la fonction "strcpy" quelque part ?

  7. A voir en vidéo sur Futura
  8. #6
    Jack

    Re : Buffer

    Sachant que c'est un tableau et non un pointeur
    ToSendDataBuffer peut aussi être manipulé comme un pointeur.

    Est ce que je dois déclarer la fonction "strcpy" quelque part ?
    Il faut inclure l'entête:
    #include <string.h>

    A+

  9. #7
    bartimeus

    Re : Buffer

    Oki merci ça marche
    J'aurais aimé savoir aussi comment modifier UN seul bit d'un port en langage C. J'utilise MPLAB 8.1 avec C18.
    J'ai essayé avec ceci mais ca ne marche pas :

    PORTB.1=1;

    Pouvez vous me dire comment faire ?

  10. Publicité
  11. #8
    Jack

    Re : Buffer

    Je n'y connais pas grand chose en pic, donc encore moins en compilateur pic.

    Je te laisse entre les mains des spécialistes. Ca ne t'empêche pas une bonne lecture de la doc.

    A+

  12. #9
    Seb.26

    Re : Buffer

    Si c'est un texte que tu affiche, place le dans le code, et pas dans la RAM ...

    Code:
    const rom char myString[] = "Mon texte";


    NB: Ta est tout à fait légale pour une constante ... ... rajoute juste "const" devant ta variable ...

    Code:
    const char ToSendDataBuffer[] = "Entré M puis n° multiplexeur.";
    [Edit]
    Pour tes questions de bit, le plus simple est d'aller voir comment c'est déclaré dans le .h de ton PIC ...
    Dernière modification par Seb.26 ; 19/05/2008 à 13h36.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #10
    Jack

    Re : Buffer

    Si c'est un texte que tu affiche, place le dans le code, et pas dans la RAM ...
    Le problème c'est que bartimeus veut gérer un buffer de transmission. Son contenu va changer, donc il faut bien le placer en RAM.

    De toutes manières, lorsqu'il fera
    strcpy(ToSendDataBuffer, "911");
    le "911" sera implémenté dans la flash.

    A+

  14. #11
    Seb.26

    Re : Buffer

    Si le contenu doit changer, alors c'est clair que ça doit aller en RAM ( mais rien n'indique que ce soit le cas, son exemple semble même indiquer le contraire ) ... Mais si c'est juste pour l'envoyer ou l'afficher, srcpy() ne sert à rien ... ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  15. #12
    bartimeus

    Re : Buffer

    En faite je veux juste stocker une phrase dans un Buffer que je mettrais ensuite dans le Buffer de transmission de l'USB.
    La phrase changera au court du programme.

    Pour la partie programme je veux juste changer, sur un port de 8bits, un seul bit et non les 8. Est-ce possible en C ?

  16. #13
    Jack

    Re : Buffer

    mais rien n'indique que ce soit le cas
    Le terme "buffer" me semble impliquer une utilisation en RAM. A bartimeus de voir.

    Pour la partie programme je veux juste changer, sur un port de 8bits, un seul bit et non les 8. Est-ce possible en C ?
    Oui, bien sur pour les µC gérant les I/O dans leur espace mémoire.

    Le C prévoit une variante du type struct: le bit field (champ de bits).
    A l'aide de macro #define, tu peux développer une syntaxe te permettant de manipuler des bits individuels, des groupes de bits, etc.
    Souvent les compilateurs proposent ces macro, d'où une utilisation comme celle que tu attends.

    A+

  17. #14
    bartimeus

    Re : Buffer

    Je me suis renseigner sur les STRUCTURES parceque c'est tout nouveau pour moi ^^

    J'ai donc taper cela dans mon code :

    struct bytebits // je ne voix pas a quoi sert bytebits !!!
    {
    unsigned a : 1;
    unsigned b : 1;
    unsigned c : 1;
    unsigned d : 1;
    unsigned e : 1;
    unsigned f : 1;
    unsigned g : 1;
    unsigned h : 1;
    } x; // d'après ce que j'ai compris x sera le nom de mon octet, non ?

    ensuite j'ai donné des valeurs à chaque bit comme cela :

    x.a = 1;
    x.b = 0;
    ...

    Maintenant je voudrais savoir comment passer x dans mon port B ... j'ai essayé de compiler ceci mais ca n'a pas marché :

    PORTB = x;

  18. #15
    Jack

    Re : Buffer

    Il te manque 2 infos essentielles: l'adresse du port, la déclaration de la variable comme "volatile".

    Voilà un exemple de déclaration de port sur mon compilateur:
    Code:
    /*** PTAD - Port A Data Register; 0x00000000 ***/
    typedef union {
      byte Byte;
      struct {
        byte PTAD0       :1;                                       /* Port A Data Register Bit 0 */
        byte PTAD1       :1;                                       /* Port A Data Register Bit 1 */
        byte PTAD2       :1;                                       /* Port A Data Register Bit 2 */
        byte PTAD3       :1;                                       /* Port A Data Register Bit 3 */
        byte PTAD4       :1;                                       /* Port A Data Register Bit 4 */
        byte PTAD5       :1;                                       /* Port A Data Register Bit 5 */
        byte PTAD6       :1;                                       /* Port A Data Register Bit 6 */
        byte PTAD7       :1;                                       /* Port A Data Register Bit 7 */
      } Bits;
    } PTADSTR;
    extern volatile PTADSTR _PTAD @0x00000000;
    #define PTAD                            _PTAD.Byte
    #define PTAD_PTAD0                      _PTAD.Bits.PTAD0
    #define PTAD_PTAD1                      _PTAD.Bits.PTAD1
    #define PTAD_PTAD2                      _PTAD.Bits.PTAD2
    #define PTAD_PTAD3                      _PTAD.Bits.PTAD3
    #define PTAD_PTAD4                      _PTAD.Bits.PTAD4
    #define PTAD_PTAD5                      _PTAD.Bits.PTAD5
    #define PTAD_PTAD6                      _PTAD.Bits.PTAD6
    #define PTAD_PTAD7                      _PTAD.Bits.PTAD7
    Note la présence de "volatile" et du @ qui permet de spécifier l'adresse du port.
    Byte a été défini comme "unsigned char" auparavant.
    L'utilisation de l'union permet d'utiliser le port A comme octet ou comme bit:
    si dans mon source je mets PTAD, il s'agit du port en entier. Si je mets PTAD_PTAD0 il s'agit du bit 0 du port A.

    C'est un exemple.

  19. #16
    Seb.26

    Re : Buffer

    Citation Envoyé par Jack Voir le message
    Le terme "buffer" me semble impliquer une utilisation en RAM. A bartimeus de voir.
    Oui, c'est pas faux ...

    De toute façon, bartimeus a répondu à la question : c'est toi qui avait raison

    ...

    @bartimeus : quel intérêt de redéfinir ce qui existe déjà dans le .h de ton PIC ???
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  20. #17
    bartimeus

    Re : Buffer

    Le buffer se trouve dans un .C et je lui donne différentes variables ou chaînes de caractères en fonction de mes entrées. Il faut donc que je puisse le faire varier.

    Pour mon PORTB bit à bit c'est bon ça fonctionne merci ...

    Pour stocker la chaîne je peine encore un peu mais je cherche je cherche ... Je vous tiendrais au courent

    Merci a tous les deux

  21. #18
    Jack

    Re : Buffer

    Pour stocker la chaîne je peine encore un peu mais je cherche je cherche ... Je vous tiendrais au courent
    Pourquoi? Le problème n'est pas résolu?

  22. #19
    bartimeus

    Re : Buffer

    Disons que la compilation marche ... mais une fois chargé dans mon PIC je ne reçois pas la chaîne de caractère. Ca doit donc être un problèm dans mon code. Je m'en occupe, merci de votre aide

Sur le même thème :

Discussions similaires

  1. Buffer 3 états
    Par VIIV dans le forum Électronique
    Réponses: 5
    Dernier message: 06/05/2008, 19h21
  2. sample buffer 5X
    Par miloubiloute dans le forum Biologie
    Réponses: 8
    Dernier message: 26/03/2007, 21h19
  3. buffer
    Par savoir? dans le forum Électronique
    Réponses: 2
    Dernier message: 04/02/2007, 11h28
  4. Tris buffer
    Par Nautilus dans le forum Chimie
    Réponses: 1
    Dernier message: 07/10/2005, 09h12
  5. DD cb de mo de buffer
    Par sliebart dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 23/04/2004, 14h28