none
Gestionnaire d'irq depuis une app écrite en C sous Visual C++ 2008 RRS feed

  • Question

  • Bonjour,

    Mon arrivée sur le forum est assez récente, je ne sais pas si je poste au bon endroit. Si ce n'est pas le cas, dites le moi et indiquez moi comment tranférer ce post sur le bon forum. Toutes mes excuses pour ceci...

    Je suis en DUT GEII, et je réalise un projet tuteuré, qui consiste à simuler sur un PC un transgerbeur de palettes, pour notre salle de TP automatismes. Ce programme existe déjà, mais tourne sur un vieux 286 qui commence à dérailler sévèrement, et sous Dos. Je ne dispose pas du code source de ce programme. J'ai donc pour objectifs de recréer un programme équivalent sous Windows, avec le même style d'interface graphique que le programme d'origine mais gérée par la SDL, le programme doit communiquer avec l'automate grâce à une carte PCI4400 (de chez RTD USA). L'interface est terminée, les palettes bougent comme il faut (je simule l'automate au clavier). Mais problème, le pilote de la carte est prévu pour Win98 (donc en mode protégé 16 bits) et la SDL utilisée est incompatible avec ce mode. Nous avons cependant trouvé le moyen d'installer le pilote sous Windows 2000 et Windows XP, le hic, c'est que le pilote permet de déclarer un gestionnaire pour les interruptions générées par la carte, mais sous Windows 98, sous Windows XP (comme sous 2000), on a un bel écran bleu avec ces fonctions (normal...). On a testé la lecture et l'écriture depuis la carte, sans gérer les interruptions de la carte, donc en effectuant un "hook" des entrées/sorties digitales qui nous interressent (en fait, on boucle sur une fonction qui lit et écrit sur la carte, en continu). Ca fonctionne, mais il y a un risque qu'on rate un évènement, car lorqu'il en arrive un (par exemple une entrée de la carte s'active), on met à jour l'affichage, et durant ce laps de temps (bien que court), s'il se passe quelque chose sur l'entrée de la carte et que ce quelque chose dure moins longtemps que la mise à jour de l'interface, on rate ce qu'il s'est passé. L'idéal serait donc de pouvoir déclarer à Windows qu'une fonction de mon programme doit être appelée à chaque interruption générée par la carte, et cette fonction ferait le tri des évènements et permettrait de gérer l'automate en temps réel. Or, ceci devrait se faire en mode user, l'application s'exécutant en ce mode, j'ignore quelle méthode utiliser (et donc quelles fonctions) pour y parvenir. Par avance, je vous remercie de votre aide.
    mardi 12 janvier 2010 12:17

Réponses

  • Bonjour,

    Pour avoir accès aux interruptions irq il faut écrire un pilote, car Windows ne donne pas la possibilité d’accès a irq en mode utilisateur. Pour écrire le pilote, il faut utiliser le DDK (Driver Development Kit) pour votre version de Windows, qui est gratuit.

    Cordialement,

    Alex

     

     


    Alex Petrescu - MSFT
    • Proposé comme réponse Alex Petrescu mercredi 13 janvier 2010 10:08
    • Marqué comme réponse Alex Petrescu jeudi 14 janvier 2010 08:38
    mercredi 13 janvier 2010 10:07

Toutes les réponses