Appel d'une routine via IRQ_9
Salut :lol: ,
J'ai un problème Hard au niveau de l'interruption Timer sur une carte PC. Pour palier à ce problème je souhaite utiliser l'interruption IRQ_9. l'IRQ_9 correspond d'après ma doc tech. au n° d'IT 0x71. Je souhaite donc employé la fonction "setvec()", mais je comprend pas tout a fais son fonctionnement malgrès l'aide de C++ builder :cry: .
Si quelqu'un peu m'aider ou m'orienté :D
Merci.
Re: Appel d'une routine via IRQ_9
Citation:
Envoyé par mickael777
J'ai un problème Hard au niveau de l'interruption Timer sur une carte PC. Pour palier à ce problème je souhaite utiliser l'interruption IRQ_9. l'IRQ_9 correspond d'après ma doc tech. au n° d'IT 0x71. Je souhaite donc employé la fonction "setvec()", mais je comprend pas tout a fais son fonctionnement malgrès l'aide de C++ builder
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
____________________________
¦_dos_getvect, _dos_setvectÌ
¦getvect, et setvect Ì <DOS.H>
____________________________
Renvoie l'adresse contenue dans le vecteur d'interruption
spécifiée ou la modifie.
Déclaration:
_ void interrupt (*getvect(int interruptno))();
_ void setvect(int interruptno, void interrupt (*isr) ( ));
_ void interrupt(*_dos_getvect(unsigned interruptno)) ();
_ void _dos_setvect(unsigned interruptno, void interrupt (*isr) ());
Description:
_ _dos_getvect et getvect lisent la valeur du vecteur interruptno et la
renvoient comme un pointeur FAR sur une fonction d'interruption.
_ _dos_setvect et setvect forcent la valeur du vecteur interruptno avec isr,
(un pointeur FAR donnant l'adresse d'une fonction).
Tous les processeurs de la famille 80x86 possèdent un jeu de vecteurs
d'interruption numérotés de 0 à 255. La valeur sur quatre octets de chaque
vecteur est une adresse, l'emplacement de la fonction d'interruption.
Argument ¦ Description
-------------Ï-------------------------------------------------------------
interruptno ¦ Vecteur d'interruption (entre 0 et 255). Le contenu est
¦ l'adresse d'une fonction d'interruption.
isr ¦ Pointeur FAR donnant l'adresse de la nouvelle interruption.
L'adresse de la routine C ne peut être transmise que si la fonction a été
déclarée de type interrupt.
Si vous prenez les prototypes déclarés dans DOS.H, il suffit de passer
l'adresse de la fonction à setvect ou _dos_setvect , quel que soit le modèle
mémoire.
Valeur Renvoyée:
_ getvect et _dos_getvect renvoient la valeur sur 4 octets
trouvée dans le vecteur interruptno.
_ setvect et _dos_setvect ne renvoient rien.
Portabilité:
+ DOS Ð UNIX Ð ANSI C Ð C++ Seul +
¦ Oui ¦ ¦ ¦ ¦
+-----¤------¤--------¤----------+ |
<Non standard>
D'abord, c'est pas sûr que ton système te laisse jouer avec cette fonction...
En admettant que ce soit permi, il suffit de définir un nouveau handler d'interruption (fonction sans paramètres avec mot clé 'interrupt') et de passer l'adresse de cette fonction à setvect() avec le bon numéro de vecteur d'interruption.
Rien de compliqué. Il est préférable de bloquer les IT pendant la manip (disable() enable())