Salut,
J'ai un problème assez inattendu. J'utilise un interface can sur USB qui crée une uart virtuelle. En clair, tout les messages circulant sur le bus can sont envoyés sur cette uart sous forme de chaines, il faut ensuite les décoder. On peut aussi envoyer des messages sur le bus can, mais il faut d'abord les réencoder sous forme de chaines.
Le driver en python marche plutôt bien, mais quand la communication est très chargée, je perds des octets en réception. L'uart est à 115200 bauds, le driver est une encapsulation de la classe serial avec un thread pour la réception, et dans ce thread j'ai un time.sleep(0.001) à chaque fois que le tampon de réception est vide. Sans le sleep, je ne perds aucun octet, mais la conso du thread est quasiment 20% de la cpu.
Et là, je m'aperçois dans le gestionnaire de périphériques que la taille max du buffer en réception est 4096 et que j'y suis par défaut. Quelqu'un à une idée pour augmenter ce buffer ou diminuer le temps minimum du sleep?
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 def canReceiver(self): """ this is a thread dedicated to messages reception""" while self.running: if self.gateway.inkey(): car = self.gateway.getchar() if car == '': # a timeout has occured self.incoming = '' else: self.incoming += car if car == miStick_uart.UART_NEWLINE: # line completed self.parseIncoming(self.incoming.strip()) self.incoming = '' time.sleep(0.001) self.can_reader._Thread__stop() self.stopping = False
Pfeuh
Partager