10
votes

Comment développer la taille de la mémoire tampon de l'entrée de pysérien

Je veux communiquer avec le téléphone via un port série. Après avoir écrit une commande sur téléphone, j'ai utilisé ser.read (ser.inwaitting ()) pour obtenir sa valeur de retour, mais j'ai toujours reçu Total 1020 octets de caractères et En fait, les rendements souhaités sont censés être sur 50kb .

J'ai essayé de définir ser.dread (50000) , mais l'interprète se bloquera.

Comment développer la mémoire tampon d'entrée pour obtenir tous les retours à la fois?


1 commentaires

Peut-être un (//a>?


4 Réponses :


1
votes

Je suppose que vous lisez 1020 octets parce que c'est tout ce qu'il y a dans le tampon, ce que Ser.Inwaitting () revient. Selon le débit en bauds 50 Ko peut prendre un certain temps à transférer, ou le téléphone s'attend à quelque chose de différent de votre part. Handshaking?

Inspectez la valeur de Ser.inwaitting, puis le contenu de ce que vous sont recevez-vous pour les allumettes.


0 commentaires

3
votes

J'ai exactement le même problème, y compris la taille du tampon 1020 octets et n'a pas trouvé de moyen de changer cela. Ma solution a été de mettre en œuvre une boucle comme:

in_buff=''
while mbed.inWaiting():
    in_buff+=mbed.read(mbed.inWaiting())    #read the contents of the buffer
    time.sleep(0.11)     #depending on your hardware, it can take time to refill the buffer


0 commentaires

0
votes

PYSERIAL utilise les pilotes d'OS natifs pour la réception série. Dans le cas de Windows, la taille du pilote d'entrée est basée sur le pilote de périphérique.

Vous pourrez peut-être augmenter la taille dans les paramètres de votre gestionnaire de périphériques s'il est possible, mais il vous suffit de lire les données assez rapidement.


0 commentaires

6
votes

Si vous exécutez votre code sur la plate-forme Windows, vous devez simplement ajouter une ligne dans votre code.

ser.set_buffer_size(rx_size = 12800, tx_size = 12800)


1 commentaires

N'oubliez pas que cette commande est une recommandation au conducteur. Cela fonctionnera uniquement avec certains pilotes. En principe, cela devrait être indépendant de la plate-forme. J'ai travaillé avec des pilotes Windows qui ne prennent pas cette recommandation.