TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 24 de Enero de 2010, 20:46:05

Título: Repetir líneas de código con macro
Publicado por: migsantiago en 24 de Enero de 2010, 20:46:05
Hola

Digamos que tengo estas funciones:

Código: [Seleccionar]
void pulso1()
{
   output_drive(BUSGC);
   delay_us(1);
   output_float(BUSGC);
   delay_us(3);
}

void pulso0()
{
   output_drive(BUSGC);
   delay_us(3);
   output_float(BUSGC);
   delay_us(1);
}

Y quisiera llamarlas muy seguido pero velozmente. Lo normal que hace el compilador es que ejecuta un goto y luego otro goto para regresar o un call-return si soy varios lugares desde donde se llaman.

Me interesa que no haya retrasos en tiempo debidos al call o al goto. Se me ocurre que en vez de que el programa salte a las funciones, mejor que el compilador integre la función una y otra vez en el flujo del programa, sin importar si desperdicio rom.

Sé que usando macros se le hace saber al compilador que en vez de que salte a la función, que la inserte en el código. Es que los us que tarda en saltar me complican el programa. ¿Cómo uso una macro para lograrlo?

Espero haberme dado a entender.

Gracias.
Título: Re: Repetir líneas de código con macro
Publicado por: jfh900 en 24 de Enero de 2010, 21:01:22
Prueba el siguiente código:

En las definiciones:

#define Pulso(_Del1, _Del2) output_drive(BUSGC); delay_us(_Del1); output_float(BUSGC); delay_us(_Del2);

Y para usarlo:

Pulso(1,3)
Pulso(3,1)

Un saludo
Título: Re: Repetir líneas de código con macro
Publicado por: BrunoF en 24 de Enero de 2010, 21:03:28
Si mal no he entendido, en la palabra reservada "inline" encontrarás lo requerido...
Título: Re: Repetir líneas de código con macro
Publicado por: migsantiago en 24 de Enero de 2010, 21:17:43
Gracias amigos, ambas soluciones me son válidas.  :mrgreen:
Título: Re: Repetir líneas de código con macro
Publicado por: RICHI777 en 24 de Enero de 2010, 21:51:34
Hola, la palabra reservada inline no es parte del ANSI C.

Saludos !
Título: Re: Repetir líneas de código con macro
Publicado por: BrunoF en 24 de Enero de 2010, 22:03:28
¿Cómo que no?

ANSI C99 la tiene, y yo siempre la uso en diversos compiladores de C++ también.

http://en.wikipedia.org/wiki/Inline_function#Language_support
Título: Re: Repetir líneas de código con macro
Publicado por: RICHI777 en 24 de Enero de 2010, 22:09:07
En el estandart C++ si existe, en el X3J11 no existe. De todos los compiladores C para micros que use, pocos la soportan.

Saludos !
Título: Re: Repetir líneas de código con macro
Publicado por: BrunoF en 24 de Enero de 2010, 22:13:50
Pero una cosa es un compilador C para micro, y otra cosa es ANSI C. Precisamente vos mencionaste ANSI C, y en ANSI C99, que es el actual, exíste.
Título: Re: Repetir líneas de código con macro
Publicado por: migsantiago en 24 de Enero de 2010, 22:14:10
No hay problema si no es ANSI, uso CCS.  :mrgreen: