problème de boucle

problème de boucle - C++ - Programmation

Marsh Posté le 21-01-2005 à 10:34:37    

Bonjour à tous j'ai modifié un programme en y rajoutant une boucle (do, while) pour éclairer silmultanément 2 états sur le port parallèle, le probleme est que ma boucle est trop lente et on voi le clignotemen a l'oeuil nu des leds, pourriez-vous m'aidez pour accélérer ma boucle merci a tous  
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4. /* OBLIGATOIRE - NE PAS TOUCHER */
  5. /* Définitions des fonctions intégrées à la DLL inpout32.dll */
  6. typedef short _stdcall (*inpFunction)(short portaddr);
  7. typedef void _stdcall (*oupFunction)(short portaddr, short data);
  8. /* FIN DE LA ZONE OBLIGATOIRE */
  9. int main(void)
  10. {
  11.      /* OBLIGATOIRE - NE PAS TOUCHER */
  12.      HINSTANCE hLib;
  13.      inpFunction inp32;
  14.      oupFunction oup32;
  15.      /* FIN DE LA ZONE OBLIGATOIRE */
  16.      /* Les variables du programme */
  17.      short datasIn, datasOut;
  18.      int port;
  19.      /* OBLIGATOIRE - NE PAS TOUCHER */
  20.      /* Charge la libriairie */
  21.      hLib = LoadLibrary("inpout32.dll" );
  22.      if (hLib == NULL)
  23.      {
  24.           printf("ECHEC: LoadLibrary Failed !!!\n" );
  25.           return -1;
  26.      }
  27.      /* récupère les adresses des fonctions Inp32 et Out32 */
  28.      inp32 = (inpFunction)GetProcAddress(hLib, "Inp32" );
  29.      if (inp32 == NULL)
  30.      {
  31.           printf("ECHEC: GetProcAddress for Inp32 Failed !!!\n" );
  32.           return -1;
  33.      }
  34.      oup32 = (oupFunction)GetProcAddress(hLib, "Out32" );
  35.      if (oup32 == NULL)
  36.      {
  37.           printf("GetProcAddress for Oup32 Failed.\n" );
  38.           return -1;
  39.      }
  40.      /* FIN DE LA ZONE OBLIGATOIRE */
  41.      /* Début du programme de test */
  42.      /* Lecture des registres du port parallèle LPT1 (0x378 à 0x37F) */
  43.      for(port=0x378; (port<0x380); port++)
  44.      {
  45.           datasIn = inp32(port);
  46.           printf("Port LPT read 0x%03X = %04X\n", port, datasIn);
  47.      }
  48.      printf("\n" );
  49.      do
  50.      {
  51.      /* Ecriture sur le port parallèle */
  52.      port = 0x378;    /* registre DATA */
  53.      datasOut = 0x03; /* 0000 0001 */
  54.      oup32(port, datasOut);
  55.      ;printf("Port LPT write to 0x%X : datasOut=0x%2X\n", port, datasOut);
  56.      /* Lecture de vérification */
  57.      datasIn = inp32(port);
  58.      ;printf("Port LPT read 0x%03X = %04X\n", port, datasIn);
  59.      /* SHOOT AGAIN: Ecriture sur le port parallèle */
  60.      port = 0x378;    /* registre DATA */
  61.      datasOut = 0xC0; /* 10000000 */
  62.      oup32(port, datasOut);
  63.      ;printf("Port LPT write to 0x%X : datasOut=0x%2X\n", port, datasOut);
  64.      /* Lecture de vérification */
  65.      datasIn = inp32(port);
  66.      ;printf("Port LPT read 0x%03X = %04X\n", port, datasIn);
  67.      /* Fin du programme de test */
  68.       } while (1)   ;
  69.      /* OBLIGATOIRE - NE PAS TOUCHER */
  70.      /* libère la librairie */
  71.      FreeLibrary(hLib);
  72.      /* FIN DE LA ZONE OBLIGATOIRE */
  73.      return 0;
  74. }

Reply

Marsh Posté le 21-01-2005 à 10:34:37   

Reply

Marsh Posté le 21-01-2005 à 10:43:31    

Reply

Marsh Posté le 21-01-2005 à 10:51:36    

Multi ou c'est un exercice d'un prof  :??:

Reply

Marsh Posté le 21-01-2005 à 11:06:42    

en effet c un pro

Reply

Marsh Posté le 21-01-2005 à 11:06:58    

en effet c un proj

Reply

Marsh Posté le 21-01-2005 à 11:36:12    

et si t'enlèves les printf ça donne quoi ?
PS: dans le code OBLIGATOIRE - NE PAS TOUCHER il manque des FreeLibrary en cas d'échec de GetProcAddress.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 21-01-2005 à 11:45:09    

do while(1) vs while(1) c'est plus bourricot que kif-kif !
D'ailleurs, comment on en sors de cette boucle ?
comment on libere la Library ?

Reply

Marsh Posté le 24-01-2005 à 21:05:34    

ok je vous vous remercie tous cété les printf

Reply

Marsh Posté le 27-01-2005 à 13:17:33    

Salut,
 
juste comme ça... c'est possible d'allumer les deux en meme temps avec une seule instruction  oup32(port, datasOut) !?  non ? en combinant les 2 bits  00000001  et 10000000, genre : oup32(0x378;, 0xC3)  ?
 

Reply

Marsh Posté le 27-01-2005 à 13:20:53    

He bien c'est le but du programme, le but ultime étant d'allumer environ + de 20 dels. C'est pour cela que il nous faut accélérer notre boucle while ;) Afin d'éviter le clignotement


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed