Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2937 connectés 

  FORUM HardWare.fr
  Programmation
  C

  select() : ordre de priorité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

select() : ordre de priorité

n°1575660
azubal
Posté le 15-06-2007 à 17:09:35  profilanswer
 

Bonjour, j'utilise select dans mon programme sur une socket et sur un /dev/ttyS.
Le programme se charge de transmettre les données recu d'un coté, de l'autre coté (et vice versa).
 
Voici mon code :  
 

Code :
  1. while (1) {
  2.  tv.tv_sec = 0;
  3.  tv.tv_usec = 5000L;
  4.  FD_ZERO(&readfds);
  5.     FD_SET(tty_fd, &readfds);
  6.  FD_SET(s_server, &readfds);
  7.  FD_SET(s_cli, &readfds);
  8.  rSelect = select(MAX(MAX(s_server, s_cli), tty_fd) + 1, &readfds, NULL, NULL, &tv);
  9.     if (rSelect == -1)
  10.   exit(EXIT_FAILURE);
  11.  if (!rSelect && poll_ir) {
  12.   pollIR(); // écrit sur tty_fd
  13.   poll_ir = 0;
  14.   continue;
  15.  }
  16.  if (FD_ISSET(tty_fd, &readfds)) {
  17.   readIRAndSendToSocket(); //lis tty_fd et écrit sur s_cli
  18.   poll_ir = 1;
  19.   continue;
  20.  }
  21.  if (FD_ISSET(s_server, &readfds)) {
  22.   s_cli = accept(s_server, 0, 0);
  23.   continue;
  24.  }
  25.  if (FD_ISSET(s_cli, &readfds)) {
  26.   readSocketAndSendToTTYS(&s_cli); // lis s_cli et écrit sur tty_fd
  27.   continue;
  28.  }
  29.    }


 
quand select arrive en timeout, la fonction PollIR() est appelé, elle envoie une commande sur le port COM. Quand le port COM envoie la reponse, select appelle readIRAndSendToSocket().
Cependant, si entre temps des données sont accessible en lecture par la socket, select va appeler readSocketAndSendToTTYS(); et apres ca je ne recevrai jamais plus la réponse du port COM et comme le flag poll_ir est a 0, la boucle pollIR() est bloqué :/.
 
Je ne comprends pas pourquoi select ne m'informe pas que des données sont en attente sur le port com :/


Message édité par azubal le 15-06-2007 à 17:14:10
mood
Publicité
Posté le 15-06-2007 à 17:09:35  profilanswer
 

n°1580368
nORKy
Grmmph...
Posté le 28-06-2007 à 14:23:09  profilanswer
 

voici ce qui me saute aux yeux moi :
Si tu mets des continue partout, si tu passe dans un if, forcement, tu passeras jamais dans les suivant.
Donc, si tu passes dans readSocketAndSendToTTYS(); tu ne passeras pas dans readIRAndSendToSocket();

n°1580533
azubal
Posté le 28-06-2007 à 18:03:31  profilanswer
 

Je passerai dedans a l'itération suivante..
En faite ce code marche tres bien sur mon PC.  
Mais c'est lorsque je le passe sur un système embarqué (sur une foxboard) que je rencontre le problème..
Je me demande si c'est un problème de conception ou si c'est un problème plus bas niveau sur la carte...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  select() : ordre de priorité

 

Sujets relatifs
[MySQL] Procédure stockée : parcourir les résultats d'un SELECT ?boucle for a l'interieur d'un select case possible en vb6?[RESOLU]
[RÉSOLU] requête MySQL select prochains évènementsPlusieurs Widgets sur un QFrame. Ordre d'affichage de ceux ci. (pinup)
[Resolu] Ordre du résultat en fonction d'une clause in.[ORACLE] Problème execution requête SELECT
[Resolu/VBA] Priorité des applicationsModifier ordre des lignes dans JTable (PAS DE TRI)
Changer une balise select en JS[Mysql] Changer l'ordre des champs d'une table
Plus de sujets relatifs à : select() : ordre de priorité


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR