[PIC18F2550] langage C,MPLAB avec CCS - problème de tableau
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

[PIC18F2550] langage C,MPLAB avec CCS - problème de tableau



  1. #1
    inviteff826af6

    [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau


    ------

    Bonjour a tous,

    Je suis actuellement en train de perfectionner mon programme d'émission. Et je me confronte a un petit problème, j'aimerais rassembler deux fonctions qui font la même chose mais sur des variables differentes "tableau". Mais lorsque j'essaye j'ai une erreur.
    Je pense que je doit mal m'y prendre.

    La première fonction :
    Code:
    /*************************************************************************************************/
    // Fonction codage - passage du binaire en Manchester
    /*************************************************************************************************/
    void donnees_manchester(int X)
    {
    	int l=0;
    	for (l=0;l<X;l++)
    	{
    		//codage d'un 0 - front montant
    		if (bin[l]==0)									//si le bit vaut 0
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    		}
    		//codage d'un 1 - front descendant
    		else
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    		}
    	}
    }
    Et la deuxieme fonction :
    Code:
    /*************************************************************************************************/
    // Fonction codage - passage du binaire en Manchester
    /*************************************************************************************************/
    void donnees_manchester2(int X)
    {
    	int l=0;
    	for (l=0;l<X;l++)
    	{
    		//codage d'un 0 - front montant
    		if (bin2[l]==0)									//si le bit vaut 0
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    		}
    		//codage d'un 1 - front descendant
    		else
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    		}
    	}
    }
    Comme vous pouvez le voir la difference entre les deux fonction est minim. C'est pour cela que j'aimerais n'en faire qu'une seule. de cette forme la :
    Code:
    /*************************************************************************************************/
    // Fonction codage - passage du binaire en Manchester
    /*************************************************************************************************/
    void donnees_manchester2(int X,int Y[])
    {
    	int l=0;
    	for (l=0;l<X;l++)
    	{
    		//codage d'un 0 - front montant
    		if (Y[l]==0)									//si le bit vaut 0
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    		}
    		//codage d'un 1 - front descendant
    		else
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A1);					//mise a 1 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while ( get_timer1() < 50 )					//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A1);						//mise a 0 de la pin A1
    			}
    		}
    	}
    }
    Voila comment j'appelais les deux première fonction dans le main :
    Code:
    donnees_manchester2(compt_flag);	          //codage manchester du flag
    donnees_manchester(compt_bits);		//codage manchester des données
    Et voila comment j'aimerais que cela se fasse :
    Code:
    donnees_manchester(compt_flag,bin2[]);		//codage manchester du flag
    donnees_manchester(compt_bits,bin[]);		//codage manchester des donnees
    J'ai a ce moment la un message d'erreur qui me dit "a numeric expression must appear her". Lorsque je mets un indice dans le tableau "bin et bin2", MPLAB arrive a compiler mais le résultat est faux.

    Je pense que mon erreur doit venir dans l'utilisation des tableau... J'espère qu'en voyant ce pavé cela ne va pas vous découragé à lire car c'est une erreur qui me semble simple...

    Cordialement EtAlors!

    -----

  2. #2
    sdec25

    Re : [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau

    Salut,
    Si tu maîtrises bien les pointeurs tu verras que c'est presque la même chose (sinon un cours sur les pointeurs et tableaux te permettra de comprendre).
    En C une variable "tableau" est un pointeur sur le premier élément, par exemple :
    Code:
    int a;
    &a // pointeur sur la variable a
    
    int *p;
    //p : pointeur sur un int
    
    int a[10]; // tableau de 10 int
    //a : pointeur sur le premier élement du tableau
    //(a = &a[0])
    
    p = a; // p désigne le premier élément du tableau
    p[3]; // 4ème élément
    *(p+3); // idem
    p = &a[3]; // tableau de l'élément 4 au dernier
    p = a+3; // idem
    Donc si tu as un tableau int tab[x], il faut passer "tab" en paramètre tout simplement (tab est de type int*, int[] nomVar ou int nomVar[] je sais plus, en tout cas int* nomVar marche tout le temps).
    Dernière modification par sdec25 ; 08/04/2010 à 13h20.

  3. #3
    inviteff826af6

    Re : [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau

    Bonjour sdec25,

    J'ai suivi t'es recommandation sur les pointeur. Et grâce a toi j'ai réussi a faire ce que je voulais.

    Voici la fonction :
    Code:
    /*************************************************************************************************/
    // Fonction codage - passage du binaire en Manchester
    /*************************************************************************************************/
    void donnees_manchester(int X,int *tab)
    {
    	int l=0;
    	for (l=0;l<X;l++)
    	{
    		//codage d'un 0 - front montant
    		if (tab[l]==0)									//si le bit vaut 0
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while (get_timer1()<50)						//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A2);						//mise a 0 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while (get_timer1()<50)						//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A2);					//mise a 1 de la pin A1
    			}
    		}
    		//codage d'un 1 - front descendant
    		else
    		{
    			set_timer1(0);								//mise a 0 du timer1
    			while (get_timer1()<50)						//pendant 50 incrementation du timer
    			{
    				output_high(PIN_A2);					//mise a 1 de la pin A1
    			}
    			set_timer1(0);								//mise a 0 du timer1
    			while (get_timer1()<50)						//pendant 50 incrementation du timer
    			{
    				output_low(PIN_A2);						//mise a 0 de la pin A1
    			}
    		}
    	}
    }
    et sont appelé dans le main :
    Code:
    			donnees_manchester(compt_flag,bin2);		//codage manchester du flag
    			donnees_manchester(compt_bits,bin);			//codage manchester des données
    Je te remercie encore pour t'es conseils.

    Cordialement EtAlors!

Discussions similaires

  1. problème compilation code ccs avec mplab
    Par invite2adf9254 dans le forum Électronique
    Réponses: 2
    Dernier message: 01/06/2009, 10h57
  2. Problème d'Intégration CCS dans MPLAB
    Par Nappa dans le forum Électronique
    Réponses: 21
    Dernier message: 02/09/2008, 18h31
  3. CCS avec mplab
    Par sdow dans le forum Électronique
    Réponses: 0
    Dernier message: 10/02/2008, 18h52
  4. Problème MPLAB / CCS
    Par invitec4f3b95a dans le forum Électronique
    Réponses: 2
    Dernier message: 06/11/2007, 12h56
  5. Ccs Mplab
    Par inviteb679aa6a dans le forum Électronique
    Réponses: 2
    Dernier message: 29/08/2006, 22h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.