fonction strtok et pointeur en µC (PIC)
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

fonction strtok et pointeur en µC (PIC)



  1. #1
    invite3bf0caa8

    fonction strtok et pointeur en µC (PIC)


    ------

    Bonjour à tous.
    Je suis devant un problème depuis quelques jours et je n'arrive pas à trouver de solution(mon erreur).
    J'ai créé une fonction qui traite une chaine de caractère du type :
    "$125$2sdf$3sdf$4sefd" .
    Le but et de récupérer les chaine situé après $*. Par exemple $1->"25".
    Pour cela j'utilise la fonction strtok du compilateur PICC.
    Voila mon code :
    Code:
    	StrutProcess * TmpProcess;
    	char tmp=0;
    	char *token;
    	char *seps = "$";
    	char *PtrTemp="$125$2sdf$3sdf$4sefd";
    	token = strtok( PtrTemp, seps ); 
    	while( token != NULL )
       		{
    		tmp=*token;
     		switch (tmp)
    			{
    			case '1' : 
    				TmpProcess->NumProcess = token[1];
    				break;
    			case '5' :
    				TmpProcess->time = xtoi(token[1]);
    				break;
    			default : break;
    			}
    	token = strtok( NULL, seps );
       }
    Lorsque je suis l'évolution des variable avec MPLAB, je me rend compte que la variable tmp prend la valeur 0x52 donc 'R'. J'ai essayé de remplacer tmp=*token par tmp=token[0] mais cela ne change rien.
    Merci de votre aide.

    -----

  2. #2
    freepicbasic

    Re : fonction strtok et pointeur en µC (PIC)

    On ne fait pas un tableau de pointeur mais un tableau de char
    char seps[] = "$";
    char PtrTemp[]="$125$2sdf$3sdf$4sefd";

    pour Token même erreur.
    Comme il manque du code je ne peux pas en dire plus.

    et la fonction fonctionne avec un ptr il faut donc le remettre à jour à chaque lecture.
    char *pch;
    pch = PtrTemp

    while (pch!=NULL) pch = strok(pch,strs);

    exemple;
    http://www.cplusplus.com/reference/c...ng/strtok.html



    Il parait que la fonction est bogguée, alors à vérifier;
    http://www.linux-kheops.com/doc/man/.../strtok.3.html
    A+, pat

  3. #3
    invite3bf0caa8

    Re : fonction strtok et pointeur en µC (PIC)

    Salut et merci de ton aide.
    Le pire dans cette histoire c'est que j'ai suivi exactement l'exemple de la doc du compilateur et que ça ne fonctionne pas. Voila exactement ce que l'on trouve :
    Code:
    Example
    #include <stdio.h>
    #include <string.h>
    void
    main (void)
    {
    char * ptr;
    char * buf = "This is a string of words.";
    char * sep_tok = ".,?! ";
    ptr = strtok(buf, sep_tok);
    while(ptr != NULL) 
      {
      printf("%s\n", ptr);
      263
      Library Functions
      ptr = strtok(NULL, sep_tok);
     }
    }
    J'ai essayé avec le compilateur de visual (désolé pour les puristes je n'avais pas gcc sous la main) et cela fonctionne bien.
    J'étais dans l'optique d'optimiser mon programme avec cette fonction pensant que le compilateur l'intégrait mieux que ce que l'on peut faire en switch ou if!
    Quoi qu'il en soit je te remercie pour ton aide. Je vais revoir de plus prés les tableaux et pointeurs.
    @+

  4. #4
    freepicbasic

    Re : fonction strtok et pointeur en µC (PIC)

    char * buf = "This is a string of words.";
    C'est peut être une syntaxe spécifique à leur compilo...


    ptr = strtok(NULL, sep_tok);
    Le NULL me parait des plus suspecte
    J'aurais écris;
    ptr = strtok(ptr, sep_tok);
    A+, pat

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

    Re : fonction strtok et pointeur en µC (PIC)

    Oui c'est bien plus logique mais ça ne fonctionne pas. J'ai eu du mal a comprendre la logique avant de comprendre qu'il n'y en avait pas!
    Avec visual c'est la même chose il faut entrer NULL dans la boucle.

  7. #6
    freepicbasic

    Re : fonction strtok et pointeur en µC (PIC)

    Du C standard
    Mais la fonction est destructive puisque les ' ' sont remplacés par des '\0'
    Sinon on doit copier le mot dans un buffer temporaire.
    Ou alors on restore le ' ' après le printf.

    Code:
    #include <stdio.h>
    #include <string.h>
    void
    main (void)
    {
    char * ptr;
    char * ptrs;
    char * buf = "This is a string of words.";
    
    ptr= buf;
    ptrs=ptr;
    ptr = strcmp(buf, " ");
    *ptr='\0';
    while(ptr != NULL) 
      {
      printf("%s\n", ptrs);
      ptrs = ptr+1
      ptr = strcmp(ptrs, " ");
      if (ptr!=NULL) *ptr= '\0'
     }
    }
    Dernière modification par freepicbasic ; 23/05/2008 à 17h12.
    A+, pat

  8. #7
    freepicbasic

    Re : fonction strtok et pointeur en µC (PIC)

    Avec restoration du ' '

    Code:
    #include <stdio.h>
    #include <string.h>
    void
    main (void)
    {
    char * ptr;
    char * ptrs;
    char * ptrs2;
    char * buf = "This is a string of words.";
    
    ptr= buf;
    ptrs=ptr;
    ptr = strcmp(buf, " ");
    *ptr='\0';
    ptrs2 = ptr
    while(ptr != NULL) 
      {
      printf("%s\n", ptrs);
      *ptrs2= ' '
      ptrs = ptr+1
      ptr = strcmp(ptrs, " ");
      if (ptr!=NULL) 
           {
    	*ptr= '\0'
    	ptrs2 = ptr
    	}
     }
    
    }
    A+, pat

Discussions similaires

  1. pointeur se desactive ! help
    Par orinnel dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 14/02/2008, 18h18
  2. pointeur
    Par invitef6dc9c06 dans le forum Électronique
    Réponses: 3
    Dernier message: 15/01/2008, 20h53
  3. PIC 16F876-Fonction test
    Par invitef1f90160 dans le forum Électronique
    Réponses: 39
    Dernier message: 16/10/2007, 08h41
  4. Notion de pointeur
    Par invite5e5ea0fa dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 31/12/2006, 10h21
  5. Langage C : pointeur sur une fonction en argument ...
    Par invite1a99f682 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 27/07/2005, 10h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.