1089Fermer1091
ZerosquareLe 06/10/2015 à 22:53
Après les bugs hardware, après les bugs software, ce coup-ci c'est un bug de conception...

Explication : sur les PICs 16Fxxx/18Fxxx, si on ne lit pas les octets reçus sur le port série assez vite, le buffer de réception finit par être rempli et ça active un flag d'erreur. Jusque là, aucun souci.

Tant qu'on ne remet pas à zéro manuellement ce flag, on ne peut plus recevoir d'octets. Et comment on remet à zéro le flag ? Non pas en lisant simplement les octets dans le buffer (comme pour les autres conditions d'erreur), mais en désactivant puis réactivant le récepteur série.

Vous voyez le bug ? Moi je ne l'avais pas vu, et visiblement les mecs de Microchip non plus...

Le problème c'est que si au moment où on désactive/réactive le récepteur, il y a un octet en cours de réception, ce dernier n'est pas simplement perdu, il est corrompu sans avertissement. (À vrai dire, je pense que c'est même pire, et qu'une séquence de plusieurs octets peut être corrompue s'il n'y a pas de pause entre les octets consécutifs, mais je n'ai pas testé).

Conclusion : c'est un bug de conception et il n'y a rien à faire top