Autor Tema: Funciones - Paso de paramtros - Retorna parametros  (Leído 2312 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Funciones - Paso de paramtros - Retorna parametros
« en: 09 de Julio de 2009, 14:58:24 »
hola Amigos

En el uso de la version de CCS C v4.088, estoy implementado funciones, en la resolucion de un programa.

El problema me surge cuando quiero mediante una funcion pasarle el valor de unos pulsadores , esta misma funcion me devuelve un valor nuevo para una variable global.

en main.c tengo la funcion principal y en fun.c las funciones.
en el principal incluyo fun.c con #include <fun.c>

en el programa principal tengo definidos, P1 al P2, asi mismo le tengo definidos las cabeceras de las funciones, no se si hacen falta, corrijanme creo que no hacen flalta,no estoy seguro.

entes del programa principal pongo la cabecera de la funcion:


dentro del programa principal llamo a las funciones asi:
int in_config(int P1, int P2);
in_config(P1, P2);


funcion:
Código: CSS
  1. ...
  2. ...
  3. ..
  4. #define P1 PIN_A0
  5. #define P2 PIN_A1
  6. #define P3 PIN_A2
  7. #define P4 PIN_A3
  8. ...
  9.  
  10.  
  11. main()
  12. {
  13. ...
  14. in_config(int P1,int P2);
  15. ...
  16.  
  17. }
  18.  
  19.  
  20. ..
  21. .
  22. int in_config(int P1,int P2)
  23.   {
  24.    int mdconf; //$$importante declarar global a 0
  25.    if(P1==1 &&P2==1)   //si pulsadores a 1
  26.     {
  27.      delay_ms(3000);     // espero 3 segundos
  28.      if(P1==1&&P2==1)    //si estan a 1, activo menu
  29.       {
  30.        mdconf=1;     //variable ON(1)/off(0) COMO CONFIGURACION
  31.       }
  32.        return(mdconf); //cambio de la variable global
  33.     }
  34. .
  35. ..
  36. ...



El problema es que me tira un monton de errores :
expecting a...

*declaration
*indentifier

alguien sabe decirme...

Un saludo
« Última modificación: 09 de Julio de 2009, 15:40:17 por pajaro »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #1 en: 09 de Julio de 2009, 15:07:54 »
Hola, fijate si asi se funciona:

Código: C
  1. in_config( P1, P2 );

Saludos !

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #2 en: 09 de Julio de 2009, 15:22:58 »
Se debería implementar así:

Código: C
  1. #define P1 PIN_A0
  2. #define P2 PIN_A1
  3.  
  4. int in_config(int1 a,int1 b){
  5.    int mdconf;
  6.    if(a==1 && b==1){
  7.    ....
  8.    return(mdconf);
  9. }
  10.  
  11.  
  12. void main{
  13.    in_config(input(P1),input(P2));
  14.    ....
No contesto mensajes privados, las consultas en el foro

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #3 en: 09 de Julio de 2009, 16:08:02 »
hola amigos
lo probe pero me sigue dando errores, la funcion la tengo en un archivo dentro del proyecto, dentro de fun.c
el cual lo incluyo en mi main poniendolo en cabecera #include <fun.c>.

me da error de declaracion y de identificador.
seguro que es una tonteria pero no doy con este error.
si defino un pulsador

#define P1 PIN_A0

esto es un entero verdad?,
un entero de 1 bit, por que cuando paso el cursor por encima de la funcion me lo marca como un int8

no doy con el error.
alguna idea.

Un saludo y gracias por sus aportes



Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #4 en: 09 de Julio de 2009, 16:27:01 »
Que errores exactamente te indica? Yo acabo de probar el ejemplo que coloque y no hubo problemas.

Al colocar #define P1 PIN_A0 le indica al compilador que al encontrar el texto P1 lo reemplace por PIN_A0, que a su vez este definido como 40 por ejemplo para el 16F84.
No contesto mensajes privados, las consultas en el foro

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #5 en: 09 de Julio de 2009, 18:27:34 »
hola Suky

el compilador es CCS C v4.088
el pic16F877A.
dentro del proyecto tengo : main.c y fun.c
dentro del main #Include <fun.c>
defino #define P1 PIN_A0
defino variable global
int mdconf; //sera cambiada durante la ejecucion de la funcion y persistira hasta que otra funcion le cambie el valor(esto no lo probe por esos malditos errores..).

defino la cabecera de la funcion a usar (posiblemente no haga falta, este paso por hacer uso del "include" )
int in_config(int1 a,int1 b);

dentro de la funcion principal la llamo:
 main()
{
...
..
in_config(P1, P2);  //no le pongo input(P1), por que me da más errores
}


///los errores son el 1 de error 28 y 3 de error 43, y me los da en la propia linea dentro del main.


un saludo
« Última modificación: 09 de Julio de 2009, 18:32:47 por pajaro »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #6 en: 09 de Julio de 2009, 19:13:20 »
Borra int in_config(int1 a,int1 b); dentro de main.

Y debes usar input(PIN_Ax), porque es la función que te lee el estado del pin, sino te colocará un 40 en el caso del RA0.-
« Última modificación: 09 de Julio de 2009, 19:18:32 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #7 en: 10 de Julio de 2009, 11:57:39 »
Borra int in_config(int1 a,int1 b); dentro de main.

Y debes usar input(PIN_Ax), porque es la función que te lee el estado del pin, sino te colocará un 40 en el caso del RA0.-

Hola Amigos

La funcion in_config(int P1,int P2) es una función que verifica si el pulsador P1 y el pulsador P2 estan pulsados, o eso intento, es decir estan a 1, si es asi espera 5 segundos y si aun  estan a pulsados cambia de estado una varibles, que es la que retorna esta funcion.

asi que por una parte tenemos como entrada el estado de dos pulsadores y como salida el cambio de estado de una variable.

parece simple verdad, pues mi compilador no lo entiende.

Un saludo.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #8 en: 10 de Julio de 2009, 12:38:05 »
Como ya te dije, eso ya lo probé! Adjunta los 2 archivos para ver donde estan los errores. :wink:
No contesto mensajes privados, las consultas en el foro

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #9 en: 10 de Julio de 2009, 17:52:51 »
Hola amigos

Amigo Suky por fin descubri el "maldito" error que me generaba tantos erroes, un paranteses de más invisible a mis ojos en la caberara de la propia funcion. Gracias por tu ayuda.
ahora va perfecto., lo unico el  retardo del simulador de proteus, a ver si cuando lo pase a la placa no hace esas cosas.

Proseguiremos con el salto de obstaculos, jejeje a ver que es lo proximo...jejeje
Un saludo

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #10 en: 13 de Julio de 2009, 14:32:35 »
Hola amigos

estoy intentado tener acceso a 3 variables, tipo caracter constante, estube leyendo varios post,
recuerdo en uno que se hacian de una argucia, para poder leerlas, ya que este tipo de variables se guardan en la rom.

Si las declaro como variable ocupan mucho pero si que las coge, el caso es declararlas como constantes, y leerlas en la rom.
yo lo estoy intentando desde una función, el caso es que si las declaro dentro de la propia funcion no me pone trabas, pero si la declaro globales y desde una funcion intento pasarlas me da el error que no se se puede apuntar una constante o algo asi, tambien hay post que dicen que con arreglos los del ccs han actualizado las cosas y que ahora no hace falta hacer cosas raras para añadir cadenas, encontre algunos post en asm, pero prefiero C.

He probado a montar con proteus un circuito y pasarle el *.hex pero no logro dar con la forma de poder ver en el simulador con la rom del pic, en elmodo debug aparece algo pero todoesta ffff.

Alguien sabe a ciencia cierta como se puede leer de la rom en el manual pone algo de #rom addres y
en algunos post tambiem pone algo de #rom const char pero aun no di con el pos de hace una semana.

En otros ponia  write_eeprom (address, value) y para leerla value = read_eeprom (address), la foto era de un  mono que metio los dedos en el enchufe.


Alguien puede echarme un poco de luz

Un Saludo.

(----- P E N D I E N T E    D E       R E S O L V E R       P R O B L E M A  ------ )



« Última modificación: 15 de Julio de 2009, 12:17:49 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Funciones - Paso de paramtros - Retorna parametros
« Respuesta #11 en: 15 de Julio de 2009, 12:28:30 »
hola amigos

Que calor hace esta tarde, pero que calor!...

Tengo implementada una función (la de debajo), la cual llamo desde otra:

Código: CSS
  1. ..
  2. ...
  3. int pulsa_Px(int px,int py,int pospulx,int pospuly,int n)
  4.   {
  5.   printf(lcd_putc,"Dentro de funcion \n");
  6.    while(py==0)
  7.     {printf(lcd_putc,"Dentro de while \n");
  8.     if(px==1)
  9.      {printf(lcd_putc,"Dentro de if \n");
  10.       //delay_ms(200);
  11.       n=n+1;
  12.       lcd_gotoxy(pospulx,pospuly);
  13.       printf(lcd_putc,"%02u",n);
  14.      }
  15.     }
  16.     printf(lcd_putc,"salio de while \n");
  17.    
  18.     return(n);
  19.   }
  20.  ..
  21. ....

el caso es que al simularla en proteus 7, no me reconoce si pulso boton
por la lectura del LCD se que entra en el while pero ahi se queda,
en el bucle while entra pero no lo hace en el if,
tampoco me deja salir del while por lo que deduzco que no me reconoce los pulsadores.

¿A que es debido esto.?

Un saludo.


..