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

Assembleur Discussion :

Détourner des IRQ sous Windows


Sujet :

Assembleur

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut Détourner des IRQ sous Windows
    Je ne connais pas du tout le moded protégé, est il possible sous windows comme sous DOS de détourner des interruptions ?


    Blustuff.

  2. #2
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Salut,

    tous est possible... mais ca risque de faire certaines chose non desire !

    tu desire developper tes propre int sous Win ? quelle version ca a une grand importance !

    • Win 9x
      Win NT, 2000, XP ?


    a+

    JB

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    ben mon code doit etre le plus portable possible a priori. mais a priori ca a pas trop l'air prevu pour ca. On m'a fait comprendre qu'en fait c'etait pas possible et que windows pouvait fonctionner qu'en asynchrone. (Je veux pas creer des ints, mais détourner des ints) Moi je demandait pas grand chose, que windows traite ses !RQs et qu'il donne le contrtole a une fonction utilisateur a la fin de l'interruption.
    Je comprends pas, comment fait DirectInput pour fonctionner en mode Buffered ?? C'est l'hardware qui buffered tout ou alors DirectInput demande a Windows de mettre les donénes dans un tampon et il les recuperes ensuite dans un prog utilisateur ?


    Blustuff

  4. #4
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    oups sous Windows,

    bon en principe les fonctions DirectTruc rend apres l'appel des infos...

    je ne comprend pas vraiment ce que tu desire...

    tu desire bien detourner une interruption logiciels pour y loger une autre ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    en gros j'aurais vboulmu creer comme sous DOS, cad par ex. détourner le l'int du timer. Si tu veux mieux comprendre, je programme un émulateur x86. Pour emuler le timer du pc, je peux pas me permettre d'arreter l'emulation pour verifier si il faut que j'emule un appel a l'int 08h. Alors j'aurais voulu pouvoir détourner une interruption windows pour que si necessaire j'interrompe l'emulation pour emuler une IRQ
    (euh je sais pas si je suis clair)


    Blustuff.

  6. #6
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Blustuff
    en gros j'aurais vboulmu creer comme sous DOS, cad par ex. détourner le l'int du timer.
    j'ai deja fait ca voici (plus bas) un petit code:

    Si tu veux mieux comprendre, je programme un émulateur x86. Pour emuler le timer du pc, je peux pas me permettre d'arreter l'emulation pour verifier si il faut que j'emule un appel a l'int 08h.
    l'int 8... c'est pas top! je ne comprend pas le fonctionnement de ton emulateur... tu emule ou tu controle l'execution sur le processeur ?

    Alors j'aurais voulu pouvoir détourner une interruption windows pour que si necessaire j'interrompe l'emulation pour emuler une IRQ(euh je sais pas si je suis clair)
    OK, mais pourquoi passer par l'assembleur ?

    il existe des fonctions de gestion des timer en C sous Windows:

    j'ai utilise il y a quelques annees ce genre de fonction :

    SetTimer et KillTimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if( V.Var_Etat_suivi_automatique == ok )
    {
      V.Var_Etat_asuivi = ok ;
      CheckMenuItem(hMenu,  4400 ,  0x0000 |  0x0008 );
      lpfnMyTimerProc = (TIMERPROC)MakeProcInstance( (FARPROC)MyTimerProc , hInst);
      ActiveTimer = SetTimer( hwnd, IniTimer , FlipTime , lpfnMyTimerProc);}
      else
    {
      V.Var_Etat_asuivi = NULL ;
      CheckMenuItem(hMenu,  4400 ,  0x0000 |  0x0000 );
      sprintf(szBuff,"Le suivi n'est pas actif");
      SetWindowText( hwnd, szBuff );  // Imprime dans le titre de la fenetre
      KillTimer( hwnd, ActiveTimer);  // tue le timer  ActiveTimer =  0L ;
    }
    c'est amplement suffisant (c'etait pour controler des acces synchro a des moteurs pas a pas via le port //)

    a+

    JB

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Houla, c'est pas lent ca l'utilisation des timers Windows ??? (Il faut traiter les messages pour que TimerProc soit appelé non ?) Et ca n'a pas une tès bonne resolution (ms je crois ?)
    J'emule totalement, instruction par instruction.


    Blustuff

  8. #8
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    en effet ca fonctionne au niveau des ms sans trop de derive(a condition de ne par charger le processeur avec d'autre grosse taches...
    voir sur le site de MicroSoft:
    la declaration est sans appel en ms !
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers/TimerReference/TimerFunctions/SetTimer.asp
    mais il existe peut etre une solution regarde ca:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Timers.asp
    mais autrement, j'ai decrit la modification de l'IRQ0:
    http://www.developpez.net/forums/viewtopic.php?t=38443
    mais est ce applicable sous Windows...
    j'ai des doutes !
    a+
    JB

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    merci :) mais je sait déja detourner les IRQs, c'est pas ca le pbl. Mais pour que TimerProc soit appelé il faut que quelque part il y ait traitement des messages. Utiliser les Timers serait bien plus long que l'utilisation d'un compteur de performance je crois.

    (Ce problème a été abordé dans une autre de mes questions sur le forum)


    Blustuff.

  10. #10
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    il ne te reste que le mode protege... et la gestion des tes propres timers, genre de compteurs!

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Moui, sinon autre question e nrapport avec les IRQ :

    J'ai vu qu'il y a des priorités pour les IRQ, mais je n'ai pas de precision dessus. Comment ca marche en fait ? Si une IRQ de priorité plus importante est en cours de traitement, les autres IRQ sont ignorées ? mises de coté ? Et est-ce qu'il y a une table pour les priorité ? comment on sait quelle IRQ a plus d'importance qu'une autre ?


    Blustuff.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    merci beaucoup, ca explique déja un point, mais ca nexplique pas ce qui se passe lorsque une IRQ esrt appellée alors qu'une dede priorité plus elevée est en cours de traitement. (Elle est mise dee coté temporairment pour etre appelée plus tard ?)

    Blustuff.

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut D'ou l'intérêt de la priorité.
    Citation Envoyé par Blustuff
    merci beaucoup (...) ce qui se passe lorsque une IRQ est appellée alors qu'une de priorité plus elevée est en cours de traitement.
    En fait ta phrase est mal formulée.
    Une interruption matérielle (IRQ) est un évènement extérieur au microprocesseur, il peut y avoir plusieurs sources d'interruptions, comme c'est le cas sur architecture x86 il y a un contrôleur d'interruption. Le rôle du contrôleur d'interruption est donc de gérer les différentes sources d'IRQ en fonction des priorités qui leur ont été affectées par programmation ou bien intrinsèquement par câblage.
    Donc (pour en revenir à ta question) une interruption de niveau N est en cours de traitement si une interruption de niveau inférieur se présente celle-ci ne sera pas transmise au micro par le contrôleur d'IT car son niveau est inférieur au niveau courant. Le mécanisme est quasiment le même lorsque le micro gère lui même les ITs et qu'il possède plusieurs niveaux de priorité.
    Voilou, est-ce plus clair ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    oui, sauf que si l'irq est de la même priorité il se passe quoi ? Donc en pratique si on appuie sur une touche du clavier tant que 20h n'est pas envoyé sur le port 20h l'int 08h ne sera pas appelé par l'IRQ0 ? (si j'ai bien tout compris, j'espère que je dit pas trop n'importe quoi). A moins que ce soit le contraire, tant que 20h ne sera pas envoyé après appel de l'int 08h appelé par l'IRQ0, il sera impossible ded traiter les informations venant du clavier ?


    Blustuff

  15. #15
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 16
    Points : 22
    Points
    22
    Par défaut IRQ de même niveau
    Citation Envoyé par Blustuff
    oui, sauf que si l'irq est de la même priorité il se passe quoi ? Donc en pratique si on appuie sur une touche du clavier tant que 20h n'est pas envoyé sur le port 20h l'int 08h ne sera pas appelé par l'IRQ0 ? (si j'ai bien tout compris, j'espère que je dit pas trop n'importe quoi). A moins que ce soit le contraire, tant que 20h ne sera pas envoyé après appel de l'int 08h appelé par l'IRQ0, il sera impossible ded traiter les informations venant du clavier ?
    Si l'IRQ est de même niveau elle n'est donc pas plus prioritaire.
    C'est en effet vrai qu'il faille acquitter l'IRQ au niveau du contrôleur avec le outportb 20h,20h (si ma mémoire est bonne car c'est vieux tout ça).

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    merci.

    Mais en fait j'ai toujours pas compris si l'IRQ 0 a une priorité plus forte ou plus faible que l'IRQ1 ??? Parce que le shema est pas très clair, j'ai pas compris dans quel sens vont les priorités

    Blustuff

Discussions similaires

  1. Urgent : heure des logs sous Windows 2003 Server
    Par sergent.rock dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 26/12/2005, 17h50
  2. [Sécurité] Execution des include() sous windows/Linux
    Par secteur_52 dans le forum Langage
    Réponses: 27
    Dernier message: 14/11/2005, 18h50
  3. Des Chmods sous Windows (incensé?)
    Par sloshy dans le forum Windows
    Réponses: 10
    Dernier message: 25/08/2005, 09h37
  4. Routines de gestion des ports sous Windows XP
    Par wiccanhelios dans le forum Windows
    Réponses: 2
    Dernier message: 14/11/2003, 08h02
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

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