Interruption en C

Signaler
Messages postés
18
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
31 octobre 2010
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
salut tout l'monde
Je suis un peu pressé et stressé depuis quelque jour. je suis en train de développer une application TR en C sous turbo C++ pour faire des acquisitions des informations venant des capteurs pour commencer le prof ma donnée l’exemple du help de turbo C sur les fonctions getvect et setvect. Mais je n’arrive pas à comprendre le fonctionnement !
Pourriez-vous m’aidez s'il vous plait.
#include <stdio.h>
#include <dos.h>
#include <conio.h>
 
#define INTR 0X1C    /* est ce que  « 0X1C » c&#8217;est le numéro de l&#8217;interruption dans le vecteur des interruptions */ 
 
#ifdef __cplusplus /* selon mes recherche sur internet, __cplusplus  définie uniquement dans le cas d'une compilation C++  et on pourra utiliser cette chaîne de remplacement pour distinguer les parties de code écrites en C++ de celles écrites en C */
    #define __CPPARGS ... /* pourquoi cette instruction */
#else
    #define __CPPARGS /*si elle n&#8217;est pas défini alors en la définir maintenant mais elle sert a quoi */
#endif
Le grand problème et la :
void interrupt ( *oldhandler)(__CPPARGS); /*l&#8217;utilisation de la fonction interrupt et  différente de la déclaration dans le help du turbo C a cause du  (__CPPARGS); ! */
int count=0; /*la réinitialisation  du compteur appartient à la procédure void interrupt oldhandler ? Si oui pour quoi on n&#8217;utilise pas  accolades {} de la fonction void */
void interrupt handler (__CPPARGS)
{
/* increase the global counter */
   count++; // il est ou le temps!
 
/* call the old routine */
   oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
   oldhandler = getvect(INTR);
 
/* install the new interrupt handler */
   setvect(INTR, handler);
 
/* loop until the counter exceeds 20 */
   while (count < 20) /*comment se fait l'incrémentation selon quel critère ' je c'est qui'il comptepar l'instruction c++; mais je veux que la fonction dure 30 seconde*/
      printf("count is %d\n",count);
 
/* reset the old interrupt handler */
   setvect(INTR, oldhandler);
 
   return 0;
}
 

Cordialement.

1 réponse

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
INTR représente bien ici l'interruption détournée : l'interruption 0x1C est celle du timer (18,2 fois par seconde). oldhandler est un pointeur long sur une fonction et count est une globale

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question