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++Builder Discussion :

routine d'interruption sous c++builder et Xp


Sujet :

C++Builder

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut routine d'interruption sous c++builder et Xp
    Bonjour,
    autrefois je développais des programmes avec gestion d'interruptions matérielles (clause interrupt, function GetIntVect, SetIntVect, etc... en Turbo C !). Ce n'est plus possible sous C++Builder avec win32.
    Quelqu'un s'est-il penché sur le problème ? Pour ma part je cherche à réagir en temps réel (ou presque) à un signal (impulsion 10ms) appliqué à un des bits du port parallèle d'un PC. Je désire en effet saisir les images d'une webcam en synchronisme avec ces impulsions. Le problème est en effet que la webcam prend du temps CPU et ne le lâche pas forcément où l'impulsion se présente, cette dernière étant scannée en boucle dans mon application et peut donc être "loupée"...
    Merci pour toute suggestion...
    Papougenet

  2. #2
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 123
    Points : 93
    Points
    93
    Par défaut
    Difficile de te proposer des solutions (en plus très en retard), mais je pencherais sur deux TThread : 1 s'occupe de récupérer les images webcam, l'autre scanne en permanence le port d'impulsion. Après il faut jouer sur les priorités des threads...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Il n'est jamais trop tard pour bien répondre ! Merci..
    Ce que tu me proposes a déjà été fait. Le problème est que le thread de scan du port parallele se charge aussi d'acquérir l'image webcam. Le thread principal est charger de la gestion genérale (GUI, connection caméra, handler, etc.)

    Entretemps j'ai essayé et réussi la gestion de l'IRQ7 dans un thread spécialisé, en utilisant le generateur de driver Windriver de Jungo. Ca marche, mais malheureusement j'ai utilisé un trial 30 jours et maintenant je n'ai plus rien ! La licence coûte beaucoup trop cher pour ce que je veux enfaire...

    Question : commentpeut-on jouer sur les priorités des thread ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 668
    Points : 25 466
    Points
    25 466
    Par défaut
    Effectivement, si tu tente un sleep(10), tu seras plus proche de 10750µs et 10995µs, ce qui est très mauvais ... utiliser un sleep(9) ça ne serait pas mieux, au bout d'un certains nombres d'itérations, tu aurais un décalage ...

    Même un sleep(1), c'est 1995µs minimum !

    Tu peux donc tenter le Sleep(0) qui durent en général 1µs !
    Tu boucles jusqu'à atteindre 10000µs +/- 1, tu lis ton port, tu reprends ton cycle de 10ms (peut-être retiré tout le temps de traitement du port)
    Mais encore une fois, tu risques de louper l'impulsion

    Même en changeant les priorités des Thread (voir SetThreadPriority et la gestion des Tokens Privileges qui sont associés)

    Pour les Interruptions, tu dois faire un driver *.sys effectivement, tu devrais voir la DLL Inpout32 de Logix4u, j'ignore si elle contient la gestion du signal, mais tu as le code, tu peux envisager de le modifier toi même !

    Si tu l'a déjà fait en TurboC, fait toi une petite DLL maison et utilise là dans ton programme C++Builder, cela oblige d'avoir deux outils différents mais c'est surement moins cher que ce WinDriver

    Peux-t-on passer une CallBack entre une DLL TC et EXE BCB, dois falloir jouer avec les types et les conventions d'appel ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut merci
    Merci pour cette nouvelle réponse.
    Mais là, franchement ça devient compliqué. Je suis a priori incapable de créer une DLL et encore moins un *.sys... J'y renonce et m'en tiens au polling. Mais tout de même, je me dis que tout cela est bien con de ne plus pouvoir faire ce que l'on faisait autrefois en 2 temps 3 mouvements ! En outre, je constate que le port parallèle a pratiquement disparu de l'offre PC et que les solutions de remplacement telles que le cable USB/parallèle sont inutilisables pour du développement de gestion E/S...

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut papougenet
    Pour commander une carte de puissance pour moteurs pas a pas j'ai utilise DLPOrt
    Un lien sur le site

Discussions similaires

  1. Debug de dll sous C++ Builder
    Par Négrier dans le forum C++Builder
    Réponses: 5
    Dernier message: 26/09/2005, 19h12
  2. Peut-on faire appel aux interruptions sous Windows ?
    Par lorenfar dans le forum Assembleur
    Réponses: 10
    Dernier message: 09/05/2005, 18h42
  3. Comment on connecte un modem sous C++ Builder?
    Par Snipeyes dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/01/2005, 20h21
  4. DLL sous C++ builder 6
    Par ovdz dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/08/2003, 14h15
  5. Les interruptions sous Windows et Linux
    Par Descartes dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 07/06/2003, 22h42

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