Autor Tema: Metodo como puntero  (Leído 1525 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Metodo como puntero
« 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.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Metodo como puntero
« Respuesta #1 en: 15 de Abril de 2013, 17:34:38 »
Bienvenido la programación orientada a objetos !!!

Saludos !

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Metodo como puntero
« Respuesta #2 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

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Metodo como puntero
« Respuesta #3 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
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything