bonjour,
Je dois réaliser un projet pour terminer mes etudes et je bloque sur un probleme de vitesse d'ecriture et de lecture des buffers:
Je developpe en JAVA sous Eclipse (j'ai débuté il y a 2-3 mois) et je communique avec une carte sur laquelle est implanté un Spartan III de Xilinx et un composant permettant de transformer une liaison serie en liaison USB le CP2101. Mon FPGA envoie en permanence les octets : 0,1,2,3,...,13, 0,1,.....(ce qui me permet de tester ma communication)
Le système fonctionne tres bien a la base: j'envoie et je recois mes données a la vitesse de 921600 bauds pour une frequence de 82 304 Hz environ (je pense avoir atteint la limite max du débit). Donc au final, la comm s'effectue via USB mais je ne vois que de la liaison serie.
Ce qui ne fonctionne pas: je ne stocke pas toutes les valeurs sur mon fichier texte. Il y a des paquet de 512 valeurs (ou un multiple de 256 valeurs) qui partent a la poubelle !!!
Alors sur une reception de 10sec je recois environ 788 000 valeurs (au lieu de 823 040) donc on peut penser que ce n'est rien mais je ne peux pas me permettre d'en perdre...
De plus je dois gerer une interface graphique qui, si elle est lancée, me pourri ma communication ce qui a pour consequence de perdre la moitiée des valeurs !!!!
j'ai donc plusieurs questions aux plus professionnels que moi
* quelle est la vitesse max d'ecriture sur un fichier texte d'un programme JAVA?
*Quel serait le flux le plus efficace pour le stockage? (ce sont des octets uniquement et attention pas des caracteres)?
(J'utilise
private BufferedInputStream buffer_read;
buffer_read = new BufferedInputStream(sPort.getInputStream(),4096) )
en faisant varier la taille j'obtiens des resultats tres diff:
buffer de 100 => stockage de 177 501 valeurs
buffer de 512 => stockage de 698 369 valeurs
buffer de 1024 => stockage de 616 449 valeurs
buffer de 1 000 000 => stockage de 786 289 valeurs
je lit a partir d'un thred et RS232 n'en n'est pas un mais possede une methode que j'appelle :
mesure = rs232.read_int();
tampon.write(mesure+" ");
*comment allouer plus de ressources a la tache qui sauvegarde les donnees et comment faire pour eviter q'une tache type affichage graphique (j'utilise JfreeChart) ne perturbe pas cette premiere?
*J'ai fais des tests global de mon projet meme avec pertes de donnees et j'ai l'impression qu'il a du mal a suivre... il rame tout simplement... comment faire pour que ce ne soit plus le cas? y a t-il des methodes (la majorité de mes .java sont des thread) spécifiques pour gagner en puissance?
Merci bcp a ceux qui prendront le temps de lire et repondre a mes questions !
PS: je ne peux joindre le fichier fait car le serveur le bloque et comme il est gros je peux pas le mettre tel quel (sauf si vous avez une sol ^^)!
Partager