[Hi-tech pic c] Problème USART en mode RX
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

[Hi-tech pic c] Problème USART en mode RX



  1. #1
    Tannite

    [Hi-tech pic c] Problème USART en mode RX


    ------

    Hello les amis Futura,

    J'ai besoin d'un peu d'aide pour un programme en C (Avec Hi-tech c / version pro)

    J'ai besoin de communiquer avec un device en mode série, mon code marche nikel (en mode interruption) mais toujours est limité à 96 caractères pas possible de recevoir plus que ça .

    Plateforme c'est PIC : 16F876
    Langage : C ANSI / Compilateur HI-Tech (PRO Mode) V9.81)

    Voici le code (la partie de réception)

    Code:
    #define rxbuffsize	96
    
    void Write_RXBuff(void)
    {
    	if ((RCSTA & 0b00000110) == 0)
    	{
        	RXBuff[wptr] = toupper(RCREG);
    		//putch(RXBuff[wptr]);
    		wptr++;
    		if (wptr > (rxbuffsize -1))
    			wptr = 0;
    	}
    	else  /* There is an error! */
    	{
    		CREN = 0;
    		CREN = 1;
    	}
    	
    }
    Quand je passe le buffeur de réception à 97 caractères j'ai ce message d'erreur :
    Code:
    could not find space (97 bytes) for variable _RXBuff
    Pourrez-vous m'expliquer un peu, de base je suis informaticien donc pas de trop de connaissances en MCU

    Merci d'avance

    -----
    Dernière modification par Tannite ; 12/10/2013 à 16h21.

  2. #2
    remy01

    Re : [Hi-tech pic c] Problème USART en mode RX

    Bonjour,
    je n'utilise pas le 16F876, mais tu n'as peut-être pas assez de RAM pour augmenter la taille de ton buffer ?
    A+ ....Rémy.

  3. #3
    Tannite

    Re : [Hi-tech pic c] Problème USART en mode RX

    Hello remy01,

    Merci pour votre réponse !

    Je viens de regarder les caractéristiques du 16F876 sur Wikipedia
    http://fr.wikipedia.org/wiki/16F876
    Ce qui m’embête c'est 368 octets de RAM

    Le but final du programme c'est de décoder des trames PDU d'un modem GSM
    Bref, j'envoie une commande de type AT+... et j’aurais derrière le retour du modem, une trame supérieur à 200 caractères dans mon cas.

    Absolument ce type de traitement est possible même avec un 16F628 ...

    Je reste toujours ouvert a toute proposition mais avec même environnement.

    Merci bien

  4. #4
    vincent66

    Re : [Hi-tech pic c] Problème USART en mode RX

    Bonsoir
    Et si vous essayez de définir le buffer à 128 ou 256 bytes que se passe-t-il ?
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  5. A voir en vidéo sur Futura
  6. #5
    Tannite

    Re : [Hi-tech pic c] Problème USART en mode RX

    Bonsoir Vincent,

    Merci pour l'aide !

    En fait avec une valeur > 96 (le 128 par exemle)
    J'ai toujours ce message d'erreur "could not find space (128 bytes) for variable _RXBuff"

    Cordialement

  7. #6
    r4ph

    Re : [Hi-tech pic c] Problème USART en mode RX

    Il semble que le compilateur ne trouve pas assez de place dans la RAM pour y caser un tableau de plus de 96 bytes. Le 876 en possède 368, en totalité. Tu en utilise surement pour d'autre variables. Je pense aussi qu'en mode debug certaines variables sont crées par le compilateur. A confirmer avec la doc. Donc prends un PIC qui possède plus de RAM ou bien réduit le nombre d'autres variables si tu le peux... Bien évidement, n'utilise pas de variables en RAM pour des constantes mais bien des const... ou des #define. Tu pourrais peut-être aussi utiliser l'EEPROM, bien que le temps d’accès soit un peu plus long.

  8. #7
    Tannite

    Angry Re : [Hi-tech pic c] Problème USART en mode RX

    Bonjour à tous et un GRAND merci pour l'aide !

    Imaginons par exemple un simple programme de réception sans trop de variable ....
    Avons nous le droit d’écrire ce petit programme de demo ?

    Code:
    #include <pic.h>
    #include <htc.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include "stdio.h"
    
    
    void main(void)
    {
    
    char msg[97];
    
    
    
    }
    => Mon compilateur (pro ) sort en erreur : could not find space (97 bytes) for variable _msg

    Merci

  9. #8
    paulfjujo

    Re : [Hi-tech pic c] Problème USART en mode RX

    bonjour,
    Je n'ai pas le meme PIC ni le Hitech C
    mais un rapide test sous C18 avec un 18F452 donne ceci

    Code:
    #include <p18f452.h>
    #pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
    
    char *p;
    
    void main(void) 
    {
    char msg[97];
    p=msg;
    while(1) ;
    }
    Tableau declaré dans le main .. pointeur = 0x500

    maintenant si je declare le tableau en variable globale à l'exterieur du main

    Code:
    #include <p18f452.h>
    #pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
    
    char msg[97];
    char *p;
    
    void main(void) 
    {
    p=msg;
    while(1) ;
    }
    Tableau declaré dans le main .. pointeur = 0x0080

    maintenant en definition le debut de stockage du tableau
    Code:
    #include <p18f452.h>
    #pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG = OFF
    #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
    #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF, WRTB = OFF,WRTC = OFF, WRTD = OFF
    #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF, EBTRB = OFF
    
    char msg[97];
    char *p;
    
    #pragma udata bank1=0x100
    char msg[97];
    #pragma
    
    void main(void) 
    {
    p=msg;
    while(1) ;
    }
    Tableau declaré dans le main .. pointeur = 0x100


    S'il reste effectivement suffisament de RAM dispo, il y a peut etre moyen
    de loger au bon endroit ton tableau..
    en evitant qu'il soit à cheval entre 2 bank.

  10. #9
    paulfjujo

    Re : [Hi-tech pic c] Problème USART en mode RX

    OUps!!
    Tableau declaré dans le main .. pointeur = 0x500
    Tableau en dehors du main .. pointeur = 0x0080
    Tableau declaré dans bank1 .. pointeur = 0x0100

Discussions similaires

  1. USART Rx problème
    Par amrouch dans le forum Électronique
    Réponses: 4
    Dernier message: 27/05/2012, 19h11
  2. Probleme USART 16f887
    Par invite591e1a94 dans le forum Électronique
    Réponses: 1
    Dernier message: 29/01/2011, 16h15
  3. Probleme usart pic 18f4620
    Par invite52e85ae4 dans le forum Électronique
    Réponses: 2
    Dernier message: 27/05/2010, 08h20
  4. configuration usart mode synchrone
    Par invite15441e30 dans le forum Électronique
    Réponses: 7
    Dernier message: 16/05/2010, 10h06
  5. Probleme USART PIC16F877
    Par invite2d9e7c03 dans le forum Électronique
    Réponses: 4
    Dernier message: 27/08/2009, 10h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.