Bonjour,
J'ai un ptit problème de lecture sur l'UART d'un pic 16f877.
J'ai une fonction qui me permet de lire l'entrée de l'uart.
Dans l'ensemble ça fonctionne plutôt bien sauf lorsque le flux d'informations reçues sur l'UART est trop important.
Tout d'abord voila les fonctions de réception :
Donc j'utilise du C et le compilateur hi-tech.Code://reception d'un caractere unsigned char getch() { /* retrieve one byte */ while(!RCIF) /* on attend des données */ continue; return RCREG; } //lecture de l'usart jusqu'a depassement de la taille indiquée ou retour chariot void string_in(char * s, int taille){ int i=0; while(i<taille){ s[i]=getch(); if(s[i]=='\r' || s[i]=='\n') { s[i]='\0'; break; } i++; } }
Mon pic est interconnecté au PC et un programme dans ce genre tourne :
En gros, après chaque lecture sur l'UART on fait clignoter une led mais si j'envoie une forte quantité de données (plusieurs lignes de moins 70 caractères) le PIC se fige.Code:#define sizeS 70 char s[sizeS]; void main(void){ while(1){ string_in(s,sizeS); Clignote_LED(); } }
Je pense que le problème vient de la fonction string_in(s,sizeS) mais je ne sais pas où...
Connaissez-vous des contraintes de limite de réception?
Une interruption de dépassement de mémoire peut être?
merci de votre aide.
bye.
-----