Mémoire dans les PIC
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Mémoire dans les PIC



  1. #1
    cubitus_54

    Mémoire dans les PIC


    ------

    Bonjour,

    J'utilise un PIC 16F88 pour faire un petit "oscilloscope"
    pour avoir une vitesse d'acquisition plus grande j'avais envisagé de faire l'acquisition en RAM via une variable de 128 octets.
    A la compilation, j'ai le message d'erreur suivant :

    Error: No remaining RAM block (on target) big enough for 'FCV_ACQ' size:127 bytes
    RAM available:368 bytes, used:227 bytes (61.7%), free:141 bytes (38.3%),

    Pourquoi il ne veut pas ?

    -----

  2. #2
    pilatomic

    Re : Mémoire dans les PIC

    D’après la doc de ton PIC, les 368 octets de RAM sont répartis en 4 blocs ( ou "pages" ), de taille jusqu'à 128 octets. sauf que les premiers octets sont réservés pour des registres spéciaux. Impossible donc de créer un tableau de 128 octets contigus.

  3. #3
    cubitus_54

    Re : Mémoire dans les PIC

    Effectivement....

    J'ai scindé la mémoire en deux parties de 64 octets et la ca fonctionne

    Merci

    Nom : 84021.png
Affichages : 66
Taille : 40,2 Ko

  4. #4
    RISC

    Re : Mémoire dans les PIC

    Salut,

    Les banques de RAM sont de 128 octets max dans les PIC16 donc je pense que le compilateur ne peut mettre ton tableau / ta variable .
    Peux-tu faire voir ton code ?

    a+

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

    Re : Mémoire dans les PIC

    C'est du Flowcode V5, accessible aussi en C

    La fonction joindre un fichier ne semble pas fonctionner

  7. #6
    DAUDET78

    Re : Mémoire dans les PIC

    Citation Envoyé par cubitus_54 Voir le message
    La fonction joindre un fichier ne semble pas fonctionner
    Ca marche très bien .... si ton fichier a une bonne extension ! Si c'est un fichier lisible avec note.pad ....ajoute .TXT à la fin .
    J'aime pas le Grec

  8. #7
    cubitus_54

    Re : Mémoire dans les PIC

    Le fichier .zip de 11ko il ne veut pas

    sinon voici la fin du programme en C

    Code:
    #include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"
    
    //Implémentations Macro
    
    
    void FCM_Initialisation()
    {
    
    	#if 0 // Disabled code
    	//Code C
    	//Code C:
    	osccon=0x7E;/* 8MHz */
    
    
    	#endif // #if 0: Disabled code
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Init()
    	FCD_gLCD0_Init();
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Clear()
    	FCD_gLCD0_Clear();
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: SetForeColor(255, 128, 0)
    	FCD_gLCD0_SetForeColor(255, 128, 0);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Print("Scope", 90, 0, 0, 0)
    	FCD_gLCD0_Print("Scope", 5, 90, 0, 0, 0);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: SetForeColor(128, 128, 128)
    	FCD_gLCD0_SetForeColor(128, 128, 128);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: DrawLine(0, 80, 128, 80)
    	FCD_gLCD0_DrawLine(0, 80, 128, 80);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: DrawLine(0, 0, 0, 160)
    	FCD_gLCD0_DrawLine(0, 0, 0, 160);
    
    }
    
    
    void FCM_affichage()
    {
    
    	//Calcul
    	//Calcul:
    	//  x = 0
    	FCV_X = 0;
    
    	//Boucle
    	//Boucle: Boucle 64 fois
    	for (FCLV_LOOP1=0; FCLV_LOOP1<64; FCLV_LOOP1++)
    	{
    
    		//Calcul
    		//Calcul:
    		//  tmp = NOT acq1[x]
    		//  tmp = tmp >> 1
    		//  tmp = tmp + 16
    		FCV_TMP = ~FCV_ACQ1[FCV_X];
    		FCV_TMP = FCV_TMP >> 1;
    		FCV_TMP = FCV_TMP + 16;
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: Plot(x, tmp)
    		FCD_gLCD0_Plot(FCV_X, FCV_TMP);
    
    		//Calcul
    		//Calcul:
    		//  x = x + 1
    		FCV_X = FCV_X + 1;
    
    
    	}
    
    	//Calcul
    	//Calcul:
    	//  x = 0
    	FCV_X = 0;
    
    	//Boucle
    	//Boucle: Boucle 64 fois
    	for (FCLV_LOOP2=0; FCLV_LOOP2<64; FCLV_LOOP2++)
    	{
    
    		//Calcul
    		//Calcul:
    		//  tmp = NOT acq2[x]
    		//  tmp = tmp >> 1
    		//  tmp = tmp + 16
    		FCV_TMP = ~FCV_ACQ2[FCV_X];
    		FCV_TMP = FCV_TMP >> 1;
    		FCV_TMP = FCV_TMP + 16;
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: Plot((x+64), tmp)
    		FCD_gLCD0_Plot((FCV_X + 64), FCV_TMP);
    
    		//Calcul
    		//Calcul:
    		//  x = x + 1
    		FCV_X = FCV_X + 1;
    
    
    	}
    
    }
    
    
    void FCM_synchro()
    {
    
    	//Boucle
    	//Boucle: Tant que synch = 0
    	while (1)
    	{
    
    		//Boucle
    		//Boucle: Tant que tmp = 125
    		while (!(FCV_TMP == 125))
    		{
    
    			//Appel de la Routine Composant
    			//Appel de la Routine Composant: tmp=Lire_comme_Octet()
    			FCV_TMP = FCD_ADC0_ReadAsByte();
    
    
    		}
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: tmp=Lire_comme_Octet()
    		FCV_TMP = FCD_ADC0_ReadAsByte();
    
    		//Décision
    		//Décision: tmp > 125?
    		if (FCV_TMP > 125)
    		{
    
    			//Calcul
    			//Calcul:
    			//  synch = 1
    			FCV_SYNCH = 1;
    
    		} else {
    
    			//Calcul
    			//Calcul:
    			//  synch = 0
    			FCV_SYNCH = 0;
    
    		}
    
    
    		if ((FCV_SYNCH == 0) == 0) break;
    	}
    
    }
    
    
    void FCM_Acquisition()
    {
    
    	//Calcul
    	//Calcul:
    	//  x = 0
    	FCV_X = 0;
    
    	//Boucle
    	//Boucle: Boucle 64 fois
    	for (FCLV_LOOP3=0; FCLV_LOOP3<64; FCLV_LOOP3++)
    	{
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: acq1[x]=Lire_comme_Octet()
    		FCV_ACQ1[FCV_X] = FCD_ADC0_ReadAsByte();
    
    		//Calcul
    		//Calcul:
    		//  x = x + 1
    		FCV_X = FCV_X + 1;
    
    
    	}
    
    	//Calcul
    	//Calcul:
    	//  x = 0
    	FCV_X = 0;
    
    	//Boucle
    	//Boucle: Boucle 64 fois
    	for (FCLV_LOOP4=0; FCLV_LOOP4<64; FCLV_LOOP4++)
    	{
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: acq2[x]=Lire_comme_Octet()
    		FCV_ACQ2[FCV_X] = FCD_ADC0_ReadAsByte();
    
    		//Calcul
    		//Calcul:
    		//  x = x + 1
    		FCV_X = FCV_X + 1;
    
    
    	}
    
    }
    
    
    void FCM_lancement()
    {
    
    }
    
    
    
    void main()
    {
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
    
    
    	//Code Initialisation Interruption
    	option_reg = 0xC0;
    
    
    	//Appel d'une Macro
    	//Appel d'une Macro: Initialisation()
    	FCM_Initialisation();
    
    	//Boucle
    	//Boucle: Tant que 1
    	while (1)
    	{
    
    		//Boucle
    		//Boucle: Tant que BP = 1
    		while (1)
    		{
    
    			//Entrée
    			//Entrée: A2 -> BP
    			trisa = trisa | 0x04;
    			FCV_BP = ((porta & 0x04) == 0x04);
    
    
    			if ((FCV_BP == 1) == 0) break;
    		}
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: SetForeColor(0, 0, 0)
    		FCD_gLCD0_SetForeColor(0, 0, 0);
    
    		//Appel d'une Macro
    		//Appel d'une Macro: affichage()
    		FCM_affichage();
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: SetForeColor(0, 120, 255)
    		FCD_gLCD0_SetForeColor(0, 120, 255);
    
    		//Appel d'une Macro
    		//Appel d'une Macro: synchro()
    		FCM_synchro();
    
    		//Appel d'une Macro
    		//Appel d'une Macro: Acquisition()
    		FCM_Acquisition();
    
    		//Appel d'une Macro
    		//Appel d'une Macro: affichage()
    		FCM_affichage();
    
    		//Boucle
    		//Boucle: Tant que BP = 0
    		while (1)
    		{
    
    			//Entrée
    			//Entrée: A2 -> BP
    			trisa = trisa | 0x04;
    			FCV_BP = ((porta & 0x04) == 0x04);
    
    
    			if ((FCV_BP == 0) == 0) break;
    		}
    
    
    	}
    
    	mainendloop: goto mainendloop;
    }
    
    void MX_INTERRUPT_MACRO(void)
    {
    }

Discussions similaires

  1. Comment réduire la mémoire dans un espace de calcul les fonctions?
    Par extrazlove dans le forum Programmation et langages, Algorithmique
    Réponses: 21
    Dernier message: 31/05/2013, 18h13
  2. Réponses: 2
    Dernier message: 08/01/2012, 19h21
  3. PIC + Memoire
    Par petitnul12 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/01/2011, 01h11
  4. [PIC+GLCD] - Stockage d'images dans mémoire externe
    Par jorg1n dans le forum Électronique
    Réponses: 32
    Dernier message: 08/03/2010, 13h48
  5. Réponses: 12
    Dernier message: 31/07/2008, 12h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.