TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 24 de Enero de 2010, 20:46:05
-
Hola
Digamos que tengo estas funciones:
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.
-
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
-
Si mal no he entendido, en la palabra reservada "inline" encontrarás lo requerido...
-
Gracias amigos, ambas soluciones me son válidas. :mrgreen:
-
Hola, la palabra reservada inline no es parte del ANSI C.
Saludos !
-
¿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
-
En el estandart C++ si existe, en el X3J11 no existe. De todos los compiladores C para micros que use, pocos la soportan.
Saludos !
-
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.
-
No hay problema si no es ANSI, uso CCS. :mrgreen: