USB/Serie ATmega8U2 : Charge CPU PC à 100%

Hello

Je rencontre un souci actuellement en communicant avec un Arduino MEGA 2560 Rev 2 via la lib QtSerialPort ou QSerialDevice (C++, Qt): il suffit que l'arduino envoie quelques données pour que la charge CPU du PC monte à 100% (ou disons 25% car 4 coeurs) et redescende à 0 de temps en temps.
Le souci apparait uniquement avec l'Arduino (pas d'autres versions testées) et sous Windows, d'autres convertisseurs (FTDI, PL2303) ne posent aucun souci.

J'en ai parlé avec le créateur de la lib Qt que j'utilise et apparemment ça pourrait venir du driver utilisé par l'Arduino.

Je n'ai pas trouvé d'autres drivers et essayé de les réinstaller également, sans succès.

Est-ce que le problème pourrait être examiné pour déterminer si oui ou non le souci est du côté driver ?

Je ne sais pas si c'est le meilleur endroit pour ce genre de problème, n'hésitez pas à me donner une autre "adresse" si besoin ! Peut-être le forum anglais ?

Merci d'avance ! :slight_smile:

Architecture: Win 7 64bits, Core i7

Bonjour,

Je n'ai jamais vu un tel probléme :astonished:
(J'ai la même config : win64 + cpu i7)

Si tu utilise un programme comme terminalBpp est ce que ça fait la même chose ?
Les drivers utilisé par l'arduino sont fourni de base par windows (drivers ACM CDC).

A mon avis tu as un probléme de configuration quelque pars.
Regarde avec usbdeview comment est configuré tes pilotes usb pour la carte arduino :wink:

Hello

En plus google ne m'a rapporté qu'un seul souci de ce genre, et le problème semblait venir du convertisseur utilisé. (pas d'Arduino)
J'ai essayé avec d'autre logiciels sans aucun soucis. (terminalBpp et Coolterm)
Lorsque tu dis "même config", ce n'est pas aussi avec un soft Qt je pense ?

J'ai également pu essayer sur un autre PC avec Win7 et mon logiciel et j'ai le même souci. Par contre sous Win XP aucun problème...
Je vais tenter avec une machine virtuelle si j'ai le temps.

Je joins un screen de ce que me donne USVDeview, pour moi tout m'a l'air ok... :stuck_out_tongue:

Une board REV3 va être achetée pour voir si ça s'arrange, mais je ne serais plus là pour tester moi même (en stage actuellement).

Bizarre tout ça, et embêtant. On n'a que des machines avec Win7 ici, il faut que ça marche :stuck_out_tongue:

Merci pour ton aide.

BBenj:
Lorsque tu dis "même config", ce n'est pas aussi avec un soft Qt je pense ?

Oui je parle juste niveau hardware, pas software.

BBenj:
Je joins un screen de ce que me donne USVDeview, pour moi tout m'a l'air ok... :stuck_out_tongue:

Tout est bon du côté des drivers ... bizarre !

BBenj:
Bizarre tout ça, et embêtant. On n'a que des machines avec Win7 ici, il faut que ça marche :stuck_out_tongue:

Si tu as le temps essaye de mettre à jour le contrôleur usb :
http://arduino.cc/en/Hacking/DFUProgramming8U2
(ça pourrait peut être résoudre le probléme)

Yep!

Perso, pour avoir développer une appli Qt+python communiquant avec un mega1280 en série (usb), je n'ai pas eu ce problème (bon je n'utilisais pas Qtserial).

Il faudrait regarder comment tu gères tes buffers/threads et voir si tu laisses ton programmes se reposer ou pas.

Un programme qui bouffe 100% du cpu est un programme qui réclame constamment des ressources systèmes et qui a certainement des problèmes dans la gestion des tâches et utilisation des ressources systèmes.

C'est le B-A-BA et un challenge constant du programmeur.

@+

Zoroastre.

J'ai finalement changé de librairie de gestion du port série, et je n'ai pas de soucis avec. J'ai néanmoins eu d'autres nouvelles du développeur de l'autre lib avec un bout de code à changer, je vais donc tester si sa solution fonctionne. Je préfère sa lib, donc j'aimerais bien que ça fonctionne :stuck_out_tongue:

@skywodd Je ne vais donc pas tenter la màj, pas que je pense la louper, mais pour moi ça ne viens pas de là et je n'aurais de toute façon pas le temps de le faire. Merci quand même pour l'idée.

@zoroastre Sauf que là, c'est bien la lib et pas mon code :grin: J'ai déboggué la lib et il s'avère qu'une fonction gérant un évènement du port série est appelée en boucle dès que des données sont reçues. Je fais des essais avec le dev de la lib pour tenter de régler ça.

Bonne nuit... :slight_smile:

J'ai eu ce souci sous VB6 (à la rigueur, peu importe la plateforme de développement...) : lors d'une comm série, j'avais une boucle style "while not serial_in...", qui prenait 100% du temps CPU tant qu'on était dans la boucle. il m'a suffit de coller un "DoEvents" (qui rend la main à l'OS) dans le while pour résoudre la chose. peut-être un truc du genre dans la lib?

BBenj:
@zoroastre Sauf que là, c'est bien la lib et pas mon code :grin: J'ai déboggué la lib et il s'avère qu'une fonction gérant un évènement du port série est appelée en boucle dès que des données sont reçues. Je fais des essais avec le dev de la lib pour tenter de régler ça.

Ça c'est le genre de bug c*n par excellence :grin:
Bon donc de toute évidence c'est un bug purement software, l'arduino n'y est donc pour rien :stuck_out_tongue:

BBenj:
Bonne nuit... :slight_smile:

Les développeurs ne dorme pas, ils passent en vieille prolongé 8)

Les développeurs ne dorme pas, ils passent en vieille prolongé

Chacun ses goûts, mais moi je préfère les jeunes. :smiley:

68tjs:

Les développeurs ne dorme pas, ils passent en vieille prolongé

Chacun ses goûts, mais moi je préfère les jeunes. :smiley:

De même :grin:

Super_Cinci:
J'ai eu ce souci sous VB6 (à la rigueur, peu importe la plateforme de développement...) : lors d'une comm série, j'avais une boucle style "while not serial_in...", qui prenait 100% du temps CPU tant qu'on était dans la boucle. il m'a suffit de coller un "DoEvents" (qui rend la main à l'OS) dans le while pour résoudre la chose. peut-être un truc du genre dans la lib?

Bah en fait là, c'est une fonction qui est appelée en boucle par la boucle d'événements, donc c'est pas aussi simple... malheureusement :stuck_out_tongue: