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

 C Discussion :

Utilite de ce code ?


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Utilite de ce code ?
    Bonjour,

    J'ai recupere un petit programme Que j'execute sur un micro controller (ATMEGA 168).

    Une partie de ce programme reste tres flou, qu'est ce que le behaviour similar to Unix stty ICRNL ???? j'ai tente une recherche sur google mais j'ai trouve tout et n'importe quoi....

    Est ce que j'ai besoin de toute ces lignes de code ou est ce que je peux le simplifier ????

    Merci

    PS: Desole pour les accents, le clavier de mon PC est un QWERTY

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    //------------------------------------------------------------	
    //behaviour similar to Unix stty ICRNL
    //------------------------------------------------------------
     
    	if (c == '\r')
    	  c = '\n';
     
    	if (c == '\n')
    	  {
    	    *cp = c;
    	    uart_putchar(c, stream);
    	    rxp = b;
    	    break;
    	  }
     
    	else if (c == '\t')
    	  	c = ' ';
     
    	if ((c >= (uint8_t)' ' && c <= (uint8_t)'\x7e') || c >= (uint8_t)'\xa0')
    	  {
    	    if (cp == b + RX_BUFSIZE - 1)
    	      uart_putchar('\a', stream);
     
    	    else
    	      {
    		   	*cp++ = c;
    			uart_putchar(c, stream);
    	      }
     
    	    continue;
    	  }
     
    	switch (c)
    	  {
       	   	   case 'c' & 0x1f : return -1;
     
    	  	   case '\b':
     
    	  	   case '\x7f':
    	   	   		 if (cp > b)
    	      		 {
    				  	uart_putchar('\b', stream);
    					uart_putchar(' ', stream);
    					uart_putchar('\b', stream);
    					cp--;
    	     		 }	 
    		   break;
     
    	  	   case 'r' & 0x1f:uart_putchar('\r', stream);
     
    	       		for (cp2 = b; cp2 < cp; cp2++)
    	      			uart_putchar(*cp2, stream);
               break;
     
    	  	   case 'u' & 0x1f:
    	       		while (cp > b)
    	      		{
    				 	uart_putchar('\b', stream);
    					uart_putchar(' ', stream);
    					uart_putchar('\b', stream);
    						cp--;
    	      		}
    	       break;
     
    	  	   case 'w' & 0x1f:
    	       		while (cp > b && cp[-1] != ' ')
        		    {
    			 	    uart_putchar('\b', stream);
    					uart_putchar(' ', stream);
    				  	uart_putchar('\b', stream);
    					cp--;
       		        }
    	       break;
    	  }
      }
     
      c = *rxp++;
      if (c == '\n')
      rxp = 0;
      return c;
    }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    Avant toute chose, peux-tu s'il-te-plaît éditer ton message (avec le bouton Éditer en bas à droite), et encadrer ton code avec les balises [ CODE ] et [ /CODE ] (sans espace) ? Merci.

    stty est le programme Unix qui sert à paramétrer le terminal (en mode texte) sur lequel on travaille. ICRNL se lit I-CR-NL pour « Input : Carriage Return to New Line ». C'est l'un des flags possibles. Voir termios et stty.

    Il sert à indiquer qu'en entrée, on considère tous les retours chariots (Entrée) comme des retours à la ligne. Sinon, en s'en tenant à l'A.S.C.I.I. strict, le retour chariot se contenterait de te ramener en début de ligne courante. Il faudrait ajouter une « tabulation verticale » (10d ou 0ah) pour faire défiler en plus le papier d'une ligne vers le haut.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Message edite...

    Par contre mon programme tourne sous windows, pour la commuication je passe par le terminal et j'ai des problemes justement de retour a la ligne...

    cela passe bien a la ligne suivante mais pas au debut de la ligne, cela reprend au niveau du texte je vais mettre un exemple ce sera plus simple qu'une longue phrase incomprehensible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    si je tape un message et que j'appuie sur entree 
                                                                    la suite du message apparait comme ceci

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Sous Windows, la fin de ligne n'est pas '\n' mais '\r' suivi de '\n'. Au sujet des fins de ligne, voir cette FAQ. Ton programme marcherait déjà donc mieux avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         if (c == '\n')
    	  {
    	    *cp = c;
    	    uart_putchar('\r', stream); /* Requis par Windows. */
    	    uart_putchar(c, stream);
    	    rxp = b;
    	    break;
    	  }

Discussions similaires

  1. [2.x] Utilité des codes http
    Par Kamoo dans le forum Symfony
    Réponses: 1
    Dernier message: 05/06/2013, 12h01
  2. [Entity Framework 4.1] Quelle est l'utilité du Code First ?
    Par Julien_G dans le forum Entity Framework
    Réponses: 3
    Dernier message: 19/08/2011, 09h25
  3. De l'utilité d'un générateur de code
    Par Whisperer dans le forum Outils
    Réponses: 9
    Dernier message: 08/09/2009, 15h22
  4. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  5. [W3C] Quelle est l'utilité réelle de cette ligne de code ?
    Par unreal2me dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/12/2006, 15h59

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