Interruption en C

sdiri_med Messages postés 18 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 31 octobre 2010 - 31 oct. 2010 à 20:40
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 31 oct. 2010 à 22:28
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

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 oct. 2010 à 22:28
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
0
Rejoignez-nous