Accélérer une boucle

Accélérer une boucle - C++ - Programmation

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

Bonjour, voici mon petit programme en C++ pour envoyer des signaux sur mon port //.  
Le problème vient que les diodes en sortie clignotent pas assez vite pour que justement on ne voye pas que elles clignotent.
Voici le code source de mon programme... Comment accélérer l'envoie des signaux ?
Si vous avez une idée merci ;)
 

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


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

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

Reply

Marsh Posté le 20-01-2005 à 13:49:25    

En faisant des recherches, il s'avère que c'est impossible de plus accélérer un while, hormis de changer la puissance du CPU...
Vous confirmez ?


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

Marsh Posté le 20-01-2005 à 13:51:00    

virer les printf ??


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-01-2005 à 13:51:14    

Ca depends de ce que tu mets dans ta boucle....

Reply

Marsh Posté le 20-01-2005 à 13:57:46    

les printf en mème temps, sa doit pas consomer énormément...
Et le signal envoyé est difficilement plus léger...


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

Marsh Posté le 20-01-2005 à 14:01:46    

essaye quand meme sans printf et cout :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-01-2005 à 14:05:14    

si t'a un affichage sur la console : vire le !!!
 
ca ralentit tres tres fortement !
 
en plus ca ressemble a un joli melange de C et C++ tout ca non ?


Message édité par didier1809 le 20-01-2005 à 14:05:56

---------------
.
Reply

Marsh Posté le 20-01-2005 à 14:09:21    

clair, faut virer les printf et cout ..

Reply

Marsh Posté le 20-01-2005 à 14:10:09    

scull a écrit :

les printf en mème temps, sa doit pas consomer énormément...
Et le signal envoyé est difficilement plus léger...


 
détrompes toi ! un printf dans une longue boucle, ca te ralentit a mort !
 
fais un essai sans pour te rendre compte ...
 
edit : et merde 2 fois grillaid !


Message édité par fucky_fuck le 20-01-2005 à 14:10:40
Reply

Marsh Posté le 20-01-2005 à 14:10:36    

Bin déjà, c'est fait en C, alors bon, côté perfos spa trop ça :/


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-01-2005 à 14:10:36   

Reply

Marsh Posté le 20-01-2005 à 14:14:57    

Taiche a écrit :

Bin déjà, c'est fait en C, alors bon, côté perfos spa trop ça :/


qu'est ce qu'elle fou là la ligne 58 alors ??
 


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-01-2005 à 14:15:21    

et si tu veux que ce soit plus rapide, fait le en ASM :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-01-2005 à 16:33:59    

double erreur:
 
affi2 == affi2++;
 
pour incrémenter "affi2++" suffit, et en plus tu devais penser faire "affi2 = affi2++"

Reply

Marsh Posté le 20-01-2005 à 16:40:30    

et c'est quoi ces ; devant les printf ?


---------------
.
Reply

Marsh Posté le 20-01-2005 à 17:26:39    

ça fait joli.

Reply

Marsh Posté le 20-01-2005 à 17:48:50    

Oh, du C avec un cout, comme c'est beau :o

Reply

Marsh Posté le 22-01-2005 à 09:04:27    

KangOl a écrit :

et si tu veux que ce soit plus rapide, fait le en ASM :o


 
Nawak. Même en Basic ça devrait être assez rapide.
Le pb, ce sont les printf envoyés dans la ligne de commande, qui n'ont d'ailleurs pas grand intérêt puisqu'il envoie constamment la même chose. Donc il peut déjà formater ses chaines avant la boucle.
Mais même sans ça, il écrit ses traces dans un fichier (au lieu de la console), et ça devrait suffire.


Message édité par el muchacho le 22-01-2005 à 09:08:46
Reply

Marsh Posté le 22-01-2005 à 10:08:46    

[:mlc]

Reply

Sujets relatifs:

Leave a Replay

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