TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: IngRandall en 15 de Abril de 2013, 12:48:51

Título: Metodo como puntero
Publicado por: IngRandall en 15 de Abril de 2013, 12:48:51
Hola amigos del foro, no se si el titulo este bien escrito, esto me lo enseño fidodido18, lo que vamos a hacer es pasar un metodo como puntero, entonces si es un programa donde tenemos varios uart, para no preguntar por cual uart vamos a enviar la informacion, con el mismo codigo pasamos el metodo por el que va a salir y listo, vamos a un ejemplo:

Código: [Seleccionar]
void (*uart_actual)(const char *string);

void U1S(const char *string){
    while(*string != '\0')
    {
        while(!UARTTransmitterIsReady(UART1));

        UARTSendDataByte(UART1, *string);

        string++;

        while(!UARTTransmissionHasCompleted(UART1));
    }
}

void U2S(const char *string){
    while(*string != '\0')
    {
        while(!UARTTransmitterIsReady(UART2));

        UARTSendDataByte(UART2, *string);

        string++;

        while(!UARTTransmissionHasCompleted(UART2));
    }
}

int main(void){
     configuraciones_del_pic();

     uart_actual=U1S;

     uart_actual("\r\nOK\r\n");//sale por el Uart 1

     uart_actual=U2S;

     uart_actual("\r\nOK\r\n");//sale por el Uart 2

     while(1);
}

Con este código podemos probar, así no tendríamos que aumentar las lineas de código, por ejemplo cuando usamos varios uart.

La verdad no conocía este método, pero me ha servido mucho, muchas gracias a fidodido18 por la información.
Título: Re: Metodo como puntero
Publicado por: RICHI777 en 15 de Abril de 2013, 17:34:38
Bienvenido la programación orientada a objetos !!!

Saludos !
Título: Re: Metodo como puntero
Publicado por: migsantiago en 16 de Abril de 2013, 21:18:08
Hola IngRandall

Sí, los apuntadores a funciones son muy buenos. Yo al principio siempre les daba la vuelta y hacía cosas con switches o arreglos normales. Ahora los uso mucho por la simplicidad que tienen.

Te paso otro tip... puedes definir un apuntador a función como un tipo.

Código: [Seleccionar]
/* Creas el tipo */
typedef void(*Enviar_UART_T)(const char *string);

/* Defines algunas funciones que cumplen con el tipo */

void UART1_Text(const char *string)
{
   while(*string++)
      Hacer_Algo(1);
}

void UART2_Text(const char *string)
{
   while(*string++)
      Hacer_Algo(2);
}

void UART3_Text(const char *string)
{
   while(*string++)
      Hacer_Algo(3);
}

void UART4_Text(const char *string)
{
   while(*string++)
      Hacer_Algo(4);
}


void main(void)
{
   /* Ahora creas un arreglo de apuntadores a funciones */
   Enviar_UART_T Funciones_Text[4] = {UART1_Text, UART2_Text, UART3_Text, UART4_Text};

   /* Pasan x cosas en tu programa, i te indica por dónde mandar datos */
   i = 3;
   
   /* Recibes una instrucción para mandar datos por la UART indicada por i */
   (*Funciones_Text[i])("Enviando status!!");
}

Saludos :D
Título: Re: Metodo como puntero
Publicado por: PalitroqueZ en 16 de Abril de 2013, 21:31:31
en la programación de videojuegos se le da mas utilidad, como el uso de punteros anidados, una variable que apunta a otra que apunta a otra, etc