Autor Tema: Repetir líneas de código con macro  (Leído 2218 veces)

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Repetir líneas de código con macro
« 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.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Repetir líneas de código con macro
« Respuesta #1 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Repetir líneas de código con macro
« Respuesta #2 en: 24 de Enero de 2010, 21:03:28 »
Si mal no he entendido, en la palabra reservada "inline" encontrarás lo requerido...
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Repetir líneas de código con macro
« Respuesta #3 en: 24 de Enero de 2010, 21:17:43 »
Gracias amigos, ambas soluciones me son válidas.  :mrgreen:

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Repetir líneas de código con macro
« Respuesta #4 en: 24 de Enero de 2010, 21:51:34 »
Hola, la palabra reservada inline no es parte del ANSI C.

Saludos !

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Repetir líneas de código con macro
« Respuesta #5 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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Repetir líneas de código con macro
« Respuesta #6 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 !

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Repetir líneas de código con macro
« Respuesta #7 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Repetir líneas de código con macro
« Respuesta #8 en: 24 de Enero de 2010, 22:14:10 »
No hay problema si no es ANSI, uso CCS.  :mrgreen: