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

  FORUM HardWare.fr
  Programmation
  C

  Thread ou autre solution?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Thread ou autre solution?

n°834190
barucca
Posté le 27-08-2004 à 14:38:33  profilanswer
 

Bonjour!! :)
 
Je suis toujours sur la création d'un petit logiciel embarqué, et je dois faire en sorte de scruter en permanence le port série afin de reagir lorsque quelque chose arrive dessus, mais en même temps je dois réaliser d'autres fonction.. en gros le "scrutage" du port serie doit etre comme une tache de fond... faut-il pour ceci créer un thread ou y a t'il d'autres solutions??  
 
si on doit faire un thread, comment fait-on pour le créer et l'utiliser???
 
 
Merci!! :)
 
 
ps: je suis sous windows et je code sous turbo C++ ;)
 
barucca


Message édité par barucca le 27-08-2004 à 14:39:01
mood
Publicité
Posté le 27-08-2004 à 14:38:33  profilanswer
 

n°834193
Taz
bisounours-codeur
Posté le 27-08-2004 à 14:39:29  profilanswer
 

oui crée un thread. c'est quoi ta plateforme ?

n°834194
jagstang
Pa Capona ಠ_ಠ
Posté le 27-08-2004 à 14:39:52  profilanswer
 
n°834200
barucca
Posté le 27-08-2004 à 14:43:25  profilanswer
 

je suis sous windows .. merci pour le lien, je vais voir, mais j'avais deja regarde et je trouve que c'est pas tres bien expliqué et souvent les exemples sont sous linux... je ne sais pas si c'est different pour windows ou pas.. :/


Message édité par barucca le 27-08-2004 à 14:43:47
n°834239
barucca
Posté le 27-08-2004 à 15:10:57  profilanswer
 

euh.. question bete... ou puis-je telecharger pthread.h?? apparemment je l'ai pas sur mon ordi.. sinon savez vous où il est sensé se trouver sur l'ordi???

n°834253
blackgodde​ss
vive le troll !
Posté le 27-08-2004 à 15:19:41  profilanswer
 

tu peux utiliser un portage des pthreads (posix threads) sous windows
http://sources.redhat.com/pthreads-win32/
 
ou utiliser directement l'api windows
http://msdn.microsoft.com/library/ [...] hreads.asp


Message édité par blackgoddess le 27-08-2004 à 15:20:01

---------------
-( BlackGoddess )-
n°834256
barucca
Posté le 27-08-2004 à 15:21:59  profilanswer
 

arf... en fait je me suis mal exprimée :(.... le programme que je fais doit fonctionner sous un environnement dos.... c'est toujours possible ou pas du tout?? si oui avec quoi?

n°834466
cris56
Posté le 27-08-2004 à 18:43:33  profilanswer
 

lol ! non c'est trop vieux dos, pas de multitache
 
bienvenu dans le present :D

n°834655
barucca
Posté le 27-08-2004 à 21:12:36  profilanswer
 

lol.. ben j'ai pas trop de choix sinon ca serait pas celui la c'est sur!! ;) donc pas de thread sous dos?? en fait je ne fais que charger l'exe sur le module en dos, je programme sous windows avec turbo C++..

n°834664
yannick_fr​ere
Posté le 27-08-2004 à 21:26:36  profilanswer
 

Et avec les interruptions ? Sous Dos, ça serait élégant ça non ?
 
Dès qu'un truc arrive sur le port série, le programme s'interrompt, on exécute ce qu'il faut exécuter pis le programme reprend ! Pas besoin de scruter en permanence comme cela !

mood
Publicité
Posté le 27-08-2004 à 21:26:36  profilanswer
 

n°834683
barucca
Posté le 27-08-2004 à 21:48:01  profilanswer
 

j'y avais pas pensé..... pkoi pas!! :) je vais chercher des infos la dessus!! :) merci!! ;)


Message édité par barucca le 27-08-2004 à 21:48:35
n°834702
printf
Baston !
Posté le 27-08-2004 à 22:02:44  profilanswer
 

yannick_frere a écrit :

Et avec les interruptions ? Sous Dos, ça serait élégant ça non ?
 
Dès qu'un truc arrive sur le port série, le programme s'interrompt, on exécute ce qu'il faut exécuter pis le programme reprend ! Pas besoin de scruter en permanence comme cela !


 
Plus qu'élégant, c'est indispensable :D

n°836102
barucca
Posté le 30-08-2004 à 08:27:15  profilanswer
 

salut! :)
 
je ne sais pas trop comment faire avec les interruptions... imaginons que l'interruption int86 soit dans la fonction comm_in, comment je peux faire pour réaliser en même temps ma fonction d'analyse : analyse_trame et la fonction comm_in??
 
en gros, il faudrait que même quand j'analyse ma trame la port série soit "scruté" da facon a réagir s'il reçoit quelque chose...
 
 
merci!! :)


Message édité par barucca le 30-08-2004 à 08:41:04
n°836157
Ace17
Posté le 30-08-2004 à 09:59:26  profilanswer
 

He ben fais l'analyse et la reception dans deux threads différents

n°836158
barucca
Posté le 30-08-2004 à 10:01:49  profilanswer
 

ben justement si j'ai bien compris les interruptions c'est pour pas utiliser de thread car le module de reception est sous DOS, non??


Message édité par barucca le 30-08-2004 à 10:02:43
n°836163
Ace17
Posté le 30-08-2004 à 10:09:46  profilanswer
 

Ha oui exact, au temps pour moi, je m'étais fié au premier post.
http://www.beyondlogic.org/serial/serial1.htm#30


Message édité par Ace17 le 30-08-2004 à 10:13:37
n°836714
lsdYoYo
gravity powered
Posté le 30-08-2004 à 15:42:55  profilanswer
 

barucca a écrit :

ben justement si j'ai bien compris les interruptions c'est pour pas utiliser de thread car le module de reception est sous DOS, non??


En fait, tu as 2 problèmes  :sweat: !
- Il est *obligatoire* de traiter l'interruption déclenchée lors de chaque réception de caractère (COM1 : IRQ 4 - Int 0x0C / COM2 : IRQ 3  - Int 0x0B). Les fonctions offertes par l'Int 0x14 sont inutilisables en pratique. Ceci compris, soit tu écris toi-même la routine de traitement de l'interruption, soit tu recherches une bibliothèque de fonction.
- Le traitement de l'interruption n'est pas suffisant ! Lorsque le CPU sous DOS se trouve en traitement d'interruption, il faut faire très attention à ce que l'on fait. Beaucoup de traitements sont interdits sous peine de planter le PC (ou bien la machine virtuelle DOS de Windows). Sous interruption on se contente généralement de stocker les caractères reçus dans un buffer (fifo) pour le traitement par la boucle principale du programme.
 
En (très) simplifié, le programme ressemblerait à ça :

Code :
  1. .../...
  2. #include "serial.h"   //Header de la bibliothèque
  3. .../...
  4. void main(void)
  5. {
  6. SERIAL Handle;
  7. char buff[81];
  8. int nbr;
  9. Handle = ComOpen(1, 9600, 8, 'S', 1);    //(1)
  10. while(1)    //(2)
  11.     {
  12.      nbr = ComRead(Handle, buf, sizeof(buf) -1);  //(3)
  13.      traite_com(buf, nbr);
  14.      .../...
  15.      if(xxxx)                //(4)
  16.         ComWrite(buf, nbr);
  17.      .../...
  18.      autres_taches();        //(5)
  19.     }
  20. }


Les noms "serial.h, SERIAL, ComOpen(), ...etc." sont fictifs. Je ne sais pas comment ils s'appelleront dans la bibliothèque que tu aura trouvée en finale (soyons optimistes !).
L'exemple montre que :
(1) On initialise le port série. Cette fonction installe un gestionnaire pour les interruptions
(2) Boucle principale du soft (quelque part, il faudra un "break" ou un "exit()" )
(3) A chaque passage dans la boucle, on vérifie si des caractères sont en attente (mémorisés par le gestionnaire d'interrupt)
(4) Sur une condition de ton soft, tu émets des caractères (buf et nbr à affecter dans ton soft)
(5) Les autres tâches de ton soft sont exécutées ici.
N.B : Les autres taches ne doivent jamais garder le contrôle trop longtemps sinon le buffer interne de réception des caractères risque de déborder !
 
En conclusion, écrire "à la main" un gestionnaire d'interrupt est assez balaise (l'adresse donnée par Ace17 en donne une idée) et je recommande de chercher des fonctions déjà écrites.
Qqu'un sait où en trouver ?


---------------
If I want to fail and succeed, which I have done ?
n°836839
_darkalt3_
Proctopathe
Posté le 30-08-2004 à 17:04:16  profilanswer
 

j'en ai un sous dos, mais pour rs485 ecrit avec mes mimines - c'est pas super super; cela dit, il n'y a que peu de différence avec le rs422, et il fonctionne (testé).
 
Si ça interesse...

n°837047
barucca
Posté le 30-08-2004 à 19:59:36  profilanswer
 

ben je veux bien , tout exemple est bon a prendre!! :)


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

  Thread ou autre solution?

 

Sujets relatifs
Handle de shell avec posix threadsolution pour page web multilangage
(Javascript) Proteger son code source, Script Encoder...la solution?[C#] Passer des paramètres à un Thread ? [Résolu]
que tout le monde lise ce thread et vite!rouvrir le thread
cherche solution pour faire défiller du textException in thread "main" java.lang.NoClassDefFoundError
Undefined variables : meilleure solution ?Pour quelles applications avez vous besoin de thread ?
Plus de sujets relatifs à : Thread ou autre solution?


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