TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Juan_PIC en 12 de Enero de 2008, 13:07:59

Título: Orden de las funciones en un programa
Publicado por: Juan_PIC en 12 de Enero de 2008, 13:07:59
Hola, tengo una duda, grande para mi pero pequeña para ustedes :P

Tengo entendido que el C es un lenguaje estructurado, entonces si tengo este programa...

#include <16f877.h>
#device ICD=TRUE
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=20000000)
#define GREEN_LED PIN_A5
#define YELLOW_LED PIN_B4
#define RED_LED PIN_B5
#define PUSH_BUTTON PIN_A4
light_one_led(int led) {
output_high(GREEN_LED);
output_high(YELLOW_LED);
output_high(RED_LED);
switch(led) {
case 1 : output_low(GREEN_LED); break;
case 2 : output_low(YELLOW_LED); break;
case 3 : output_low(RED_LED); break;
}
}
wait_for_one_press() {
while(input(PUSH_BUTTON)) ;
while(!input(PUSH_BUTTON)) ;
}
main() {
while(TRUE) {
light_one_led(1);
wait_for_one_press();
light_one_led(2);
wait_for_one_press();
light_one_led(3);
wait_for_one_press();
}

Se ejecutan "light_one_led(int led)" y "wait_for_one_press()" antes de ejecutarse "main()" o el programa si o si ejecuta primero la funcion que se llame main?

Espero sus respuestas    :mrgreen:
Título: Re: Orden de las funciones en un programa
Publicado por: PalitroqueZ en 12 de Enero de 2008, 13:53:53
nop. en C se ejecuta PRIMERO siempre lo que hay dentro de la función Main

lo que pasa es que si llamas una función dentro del Main, tienes que estar antepuesto del Main, y por ello es que colocan las funciones antes. Otra alternativa (y que me parece elegante) es declarar las funciones y luego las pones después del Main (en el orden que quieras)

ej:

Código: C
  1. #include <16f877.h>
  2. #device ICD=TRUE
  3. #fuses HS,NOLVP,NOWDT,PUT
  4. #use delay(clock=20000000)
  5. #define GREEN_LED PIN_A5
  6. #define YELLOW_LED PIN_B4
  7. #define RED_LED PIN_B5
  8. #define PUSH_BUTTON PIN_A4
  9.  
  10. void light_one_led(int led) ;
  11. void wait_for_one_press() ;
  12.  
  13. void main() {
  14.    while(TRUE) {
  15.       light_one_led(1);
  16.       wait_for_one_press();
  17.       light_one_led(2);
  18.       wait_for_one_press();
  19.       light_one_led(3);
  20.       wait_for_one_press();
  21.    }
  22. }
  23. //**************************************
  24. void light_one_led(int led) {
  25.    output_high(GREEN_LED);
  26.    output_high(YELLOW_LED);
  27.    output_high(RED_LED);
  28.    switch(led) {
  29.       case 1 : output_low(GREEN_LED); break;
  30.       case 2 : output_low(YELLOW_LED); break;
  31.      case 3 : output_low(RED_LED); break;
  32.   }
  33. }
  34. //**************************************
  35. void wait_for_one_press() {
  36.    while(input(PUSH_BUTTON)) ;
  37.    while(!input(PUSH_BUTTON)) ;
  38. }

Título: Re: Orden de las funciones en un programa
Publicado por: Juan_PIC en 12 de Enero de 2008, 15:37:50
Ok muchisimas gracias PalitroqueZ!   :mrgreen:
Título: Re: Orden de las funciones en un programa
Publicado por: MGLSOFT en 12 de Enero de 2008, 22:12:23
Ademas de elegante, el hecho de declarar las librerias antes del main() permite que estas librerias esten dentro de archivos diferentes al del programa principal, evitando en programas muy largos, editar algo que no querias... :mrgreen:
Título: Re: Orden de las funciones en un programa
Publicado por: Nocturno en 13 de Enero de 2008, 04:30:35
Aunque sólo fuera por hacer los programas más inteligibles, debería ser obligatorio declarar las funciones antes de usarlas (y conste que yo no lo hago siempre).