Page suivantePage pr�c�denteTable des mati�res

2. D�marrage

2.1 D�buggage

Le meilleur moyen de d�bugguer votre code est d'installer une autre machine sous Linux et de connecter les deux ordinateurs par un c�ble null-modem. Utilisez miniterm (disponible dans le Linux programmers guide -- ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gz -- dans le r�pertoire des exemples) pour transmettre des caract�res � votre machine Linux. Miniterm est tr�s simple � compiler et transmettra toute entr�e clavier directement sur le port s�rie. Vous n'avez qu'� adapter la commande #define MODEMDEVICE "/dev/ttyS0" � vos besoins. Mettez ttyS0 pour COM1, ttyS1 for COM2, etc... Il est essentiel, pour les tests, que tous les caract�res soient transmis bruts (sans traitements) au travers de la ligne s�rie. Pour tester votre connexion, d�marrez miniterm sur les deux ordinateurs et taper au clavier. Les caract�res �crit sur un ordinateur devraient appara�tre sur l'autre ordinateur, et vice versa. L'entr�e clavier sera �galement recopi�e sur l'�cran de l'ordinateur local.

Pour fabriquer un c�ble null-modem, pour devez croiser les lignes TxD (transmit) et RxD (receive). Pour une description du c�ble, r�f�rez vous � la section 7 du Serial-HOWTO.

Il est �galement possible de faire cet essai avec uniquement un seul ordinateur, si vous disposez de deux ports s�rie. Vous pouvez lancez deux miniterms sur deux consoles virtuelles. Si vous lib�rez un port s�rie en d�connectant la souris, n'oubliez pas de rediriger /dev/mouse si ce fichier existe. Si vous utilisez une carte s�rie � ports multiples, soyez s�r de la configurer correctement. La mienne n'�tait pas correctement configur�e, et tout fonctionnait correctement lorsque je testais sur mon ordinateur. Lorsque je l'ai connect� � un autre, le port a commenc� � perdre des caract�res. L'ex�cution de deux programmes sur un seul ordinateur n'est pas totalement asynchrone.

2.2 Configuration des ports

Les p�riph�riques /dev/ttyS* sont destin�s � connecter les terminaux � votre machine Linux, et sont configur�s pour cet usage apr�s le d�marrage. Vous devez vous en souvenir lorsque vous programmez la communication avec un p�riph�rique autre. Par exemple, les ports sont configur�s pour afficher les caract�res envoy�s vers lui-m�me, ce qui normalement doit �tre chang� pour la transmission de donn�es.

Tous les param�tres peuvent �tre facilement configur� depuis un programme. La configuration est stock�e dans une structure de type struct termios, qui est d�finie dans <asm/termbits.h> :

#define NCCS 19
struct termios {
 tcflag_t c_iflag;               /* Modes d'entr�e */
 tcflag_t c_oflag;               /* Modes de sortie */
 tcflag_t c_cflag;               /* Modes de contr�le */
 tcflag_t c_lflag;               /* Modes locaux */
 cc_t c_line;                    /* Discipline de ligne */
 cc_t c_cc[NCCS];                /* Caract�res de contr�le */
};

Ce fichier inclus �galement la d�finition des constantes. Tous les modes d'entr�e dans c_iflag prennent en charge le traitement de l'entr�e, ce qui signifie que les caract�res envoy�s depuis le p�riph�rique peuvent �tre trait�s avant d'�tre lu par read. De la m�me fa�on, c_oflags se chargent du traitement en sortie. c_cflag contient les param�tres du port, comme la vitesse, le nombre de bits par caract�re, les bits d'arr�t, etc... Les modes locaux, stock�s dans c_lflag d�terminent si les caract�res sont imprim�s, si des signaux sont envoy�s � votre programme, etc... Enfin, le tableau c_cc d�finit les caract�res de contr�le pour la fin de fichier, le caract�re stop, etc... Les valeurs par d�faut pour les caract�res de contr�le sont d�finies dans <asm/termios.h>. Les modes possibles sont d�crits dans la page de manuel de termios(3). La structure termios contient un champ c_line (discipline de ligne), qui n'est pas utilis� sur les syst�mes conformes � POSIX.

2.3 Fa�ons de lire sur les p�riph�riques s�rie

Voici trois fa�ons de lire sur les p�riph�riques s�rie. Le moyen appropri� doit �tre choisi pour chaque application. Lorsque cela est possible, ne lisez pas les cha�nes caract�re par caract�re. Lorsque j'utilisais ce moyen, je perdais des caract�res, alors qu'un read sur la cha�ne compl�te ne donnait aucune erreur.

Entr�e canonique

C'est le mode de fonctionnement normal pour les terminaux, mais peut �galement �tre utilis� pour communiquer avec d'autres p�riph�riques. Toutes les entr�es sont trait�es lignes par lignes, ce qui signifie qu'un read ne renverra qu'une ligne compl�te. Une ligne est termin�e par d�faut avec un caract�re NL (ACII LF), une fin de fichier, ou un caract�re de fin de ligne. Un CR (le caract�re de fin de ligne par d�faut de DOS et Windows) ne terminera pas une ligne, avec les param�tres par d�faut.

L'entr�e canonique peut �galement prendre en charge le caract�re erase, d'effacement de mot, et de r�affichage, la traduction de CR vers NL, etc...

Entr�e non canonique

L'entr�e non canonique va prendre en charge un nombre fix� de caract�re par lecture, et autorise l'utilisation d'un compteur de temps pour les caract�res. Ce mode doit �tre utilis� si votre application lira toujours un nombre fix� de caract�res, ou si le p�riph�rique connect� envoit les caract�res par paquet.

Entr�e asynchrone

Les deux modes ci-dessus peut �tre utilis� en mode synchrone ou asynchrone. Le mode synchrone est le mode par d�faut, pour lequel un appel � read sera bloquant, jusqu'� ce que la lecture soit satisfaite. En mode asynchrone, un appel � read retournera imm�diatement et lancera un signal au programme appelant en fin de transfert. Ce signal peut �tre re�u par un gestionnaire de signal.

Attente d'entr�e depuis de multiples sources

Cela ne constitue pas un mode d'entr�e diff�rent, mais peut s'av�rer �tre utile, si vous prenez en charge des p�riph�riques multiples. Dans mon application, je traitais l'entr�e depuis une socket TCP/IP et depuis une connexion s�rie sur un autre ordinateur quasiment en m�me temps. L'exemple de programme donn� plus loin attendra des caract�res en entr�e depuis deux sources. Si des donn�es sur l'une des sources deviennent disponibles, elles seront trait�es, et le programme attendra de nouvelles donn�es.

L'approche pr�sent�e plus loin semble plut�t complexe, mais il est important que vous vous rappeliez que Linux est un syst�me multi-t�che. L'appel syst�me select ne charge pas le processeur lorsqu'il attend des donn�es, alors que le fait de faire une boucle jusqu'� ce que des caract�res deviennent disponibles ralentirait les autres processus.


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:16