Autor Tema: DIRECTIVAS CCS  (Leído 1216 veces)

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

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
DIRECTIVAS CCS
« en: 08 de Febrero de 2017, 23:19:54 »
Saludos
es posible evaluar una variable con las directivas, a mi por intuicion y algo de experiencia se me ocurre asi pero no sale

   #if (n==1)
      #DEFINE PT PT1
   #elif
      #define PT PT2
   #endif
   Fprintf(PT,"holaa mundo PT2");

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:DIRECTIVAS CCS
« Respuesta #1 en: 09 de Febrero de 2017, 09:20:39 »
si se puede, el tema esta en que eso ocurre unicamente en el momento de compilacion y no en runtime (a medida que el codigo se ejecuta)

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:DIRECTIVAS CCS
« Respuesta #2 en: 09 de Febrero de 2017, 19:31:50 »
si comprendo, pero hay alguna manera de definir el stream con una variable

algo asi?

   if (n==1)
      STRCPY(PT,"PT1")
   ELSE IF(N==2)
      STRCPY(PT,"PT2")
   END IF

   Fprintf(PT,"holaa mundo ");

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:DIRECTIVAS CCS
« Respuesta #3 en: 10 de Febrero de 2017, 08:56:48 »
En forma de codigo, se analiza en runtime, todo el codigo se carga dentro del micro.

Código: C
  1. int n = 1;
  2.  
  3.    if(n==1)
  4.    {
  5.       Fprintf(PT1,"holaa mundo ");
  6.    }
  7.    else if(N==2)
  8.    {
  9.       Fprintf(PT2,"holaa mundo ");
  10.    }

   
Directivas, La diferencia es que N no es una variable, es una constante, la otra es que solo compila y carga el codigo de cual corresponda en el micro.

Código: C
  1. #define N 1
  2.  
  3. #IF N == 1
  4.       Fprintf(PT1,"holaa mundo ");
  5. #ELIF N == 2
  6.       Fprintf(PT2,"holaa mundo ");
  7. #ENDIF

Ejemplo de codigo, suponete este codigo

Código: C
  1. #define N 1
  2.  
  3.       output_bit(PIN_A0,1);
  4. #IF N == 1
  5.       Fprintf(PT1,"holaa mundo ");
  6. #ELIF N == 2
  7.       Fprintf(PT2,"holaa mundo ");
  8. #ENDIF
  9.       output_bit(PIN_A0,0);

En el micro solo se quedaria, (se omite el fprintf de PT2 ):

Código: C
  1. output_bit(PIN_A0,1);
  2.       Fprintf(PT1,"holaa mundo ");
  3.       output_bit(PIN_A0,0);


PD:
No se que tipo de clase sea el "STREAM" de los printf, tal ves sea un int, o algo interno a CCS, pero no creo que sea un string como para que puedas copiarlo asi.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:DIRECTIVAS CCS
« Respuesta #4 en: 10 de Febrero de 2017, 11:11:32 »
ok gracias , tendre que usar la primera opcion, ya que el usuario va a elegir por medio de un menu como va a trabajar.
lo que estaba buscando era simplificar el codigo, pero ni modo, lo bueno es que memoria me sobra