Go Down

Topic: Utilisation de la bibliothèque Serial (Read 5028 times) previous topic - next topic

B@tto

115 200 c'est lent si on compare à d'autres modes de transmission, si on résonne à l'échelle d'un micro 8-bit 16 mhz, ça commence à être pas mal.

Pour la limiation à 64 octets c'est normal, voir hardware/arduino/cores/arduino/HardwareSerial.cpp :

Code: [Select]
// Define constants and variables for buffering incoming serial data.  We're
// using a ring buffer (I think), in which head is the index of the location
// to which to write the next incoming character and tail is the index of the
// location from which to read.
#if (RAMEND < 1000)
  #define SERIAL_BUFFER_SIZE 16
#else
  #define SERIAL_BUFFER_SIZE 64
#endif


SERIAL_BUFFER_SIZE peut-être augmenter, tout en sachant que c'est autant de RAM de "perdue"

Autre point à souligner, le problème m'est arrivé plusieurs fois. Toujours mettre un delay() (5 ms suffisent normalement) après un Serial.available() afin de laisser le temps à la transmission de se terminer. Si votre traitement est plus rapide que la transmission d'un caractère (particulièrement vrai à faible vitesse), vous traiterez des bouts seulement. Et c'est encore plus vrai avec des transmissions de longues chaines
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

nulentout

Chic chic chic, tout est démystifié.
Riche de tous ces enseignements je vais pourvoir avancer dans mon apprentissage du C avec les limites propres à Arduino.
Merci les copains.

piif


Il faut bien réaliser un truc, la liaison série c'est une tortue.
A 115200 bauds, au mieux (c'est à dire si rien ne vient interférer avec le programme qui envoie les données) il arrive un caractère toutes les 100µs. En 100µs un microcontrolleur qui tourne à 16MHz (soit environ 63ns par instruction) a le temps de dérouler quelques instructions quand même.
Entre l'arrivée de 2 caractères tu as le temps de vider le buffer de réception.


Alors ça, ça explique des trucs louches que j'avais eu y'a un moment. J'avais pas fait le calcul, c'est vrai que c'est pas si énorme que ça 115000 en fait :-)
Merci pour le tuyau.

Go Up