TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: japifer_22 en 05 de Septiembre de 2013, 05:14:35

Título: pasar a una función datos como: funcion("hola")
Publicado por: japifer_22 en 05 de Septiembre de 2013, 05:14:35
Estimados buenas noches,
     requiero de su conocimiento una vez mas, resulta que estoy en un código y requiero pasar datos a una función de dos formas. Una es por medio de char dato[]="hola"; que da como resultado funcion(dato); y esto sale bien, pero la otra forma que requiero no me sale, y es funcion("hola").
Un pedazo de código de lo que requiero seria:

Código: [Seleccionar]
char dato[]="hola";

void funcion(char *ptr)
{
    Aquí proceso........por ejemplo
    printf("se proceso bien dato: %s", ptr);
}

void main(){
......
    funcion(dato); //--> Esto se procesa bien, pero lo que quiero es que se pueda hacer es.......
    funcion("hola amigos TODOPIC");
.......
}


espero que me entiendan y puedan ayudar.
Saludos a todos  :-/ :-/
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: RedPic en 05 de Septiembre de 2013, 05:29:27
japifer_22, si usas CCS C lamentablemente no te lo permite. Te obliga a crear la variable y pasarle a la función su puntero. El CCS C es así  :?
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: gera en 05 de Septiembre de 2013, 09:38:59
japifer_22, si usas CCS C lamentablemente no te lo permite. Te obliga a crear la variable y pasarle a la función su puntero. El CCS C es así  :?

Lo cual es lógico, ya que no podés apuntar a una posición de memoria en ROM. Primero tenés que crear una variable en RAM y luego apuntarla.
Saludos!!
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: japifer_22 en 05 de Septiembre de 2013, 13:44:18
hola gracias por responder. y me queda claro entonces.. pero la duda esta que en strcpy si se puede hacer esto.......strcpy(dato,"hola");
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: BrunoF en 05 de Septiembre de 2013, 13:49:48
Creo recordar que desde hace ya bastante tiempo el CCS comenzó a soportar punteros a constantes.

Incluso buscando el anuncio de esta mejora, di con esto:

http://www.ccsinfo.com/content.php?page=flexconst

Así que también dependerá de la versión de CCS que puedas (o no) hacer lo que preguntas.

Saludos.
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: miquel en 05 de Septiembre de 2013, 15:18:53
Con CCS 4.114 funciona!

Saludos,

Miquel
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: RedPic en 05 de Septiembre de 2013, 17:23:44
Con CCS 4.114 funciona!

Saludos,

Miquel

Pues mira lo que me dice mi CCS C 4.140, lo de siempre que no se puede crear un puntero a una constante ...

(http://publi.garcia-cuervo.net/Pointer_to_a_constant.png)
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: BrunoF en 05 de Septiembre de 2013, 18:29:57
no lo he usado, pero creo que tienes que habilitar "el truco":

#device PASS_STRINGS=IN_RAM

Saludos.
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: RedPic en 06 de Septiembre de 2013, 03:59:49
no lo he usado, pero creo que tienes que habilitar "el truco":

#device PASS_STRINGS=IN_RAM

Saludos.

Muy cierto amigo BrunoF.

He colocado el #device PASS_STRINGS=IN_RAM al principio del programa y las dos formas de llamar a funcion() han funcionado correctamente (CCS S v.4.140)  :mrgreen:

Código: CSS
  1. #device PASS_STRINGS=IN_RAM
  2.  
  3. void funcion(char *ptr)
  4. {
  5.     // Aquí proceso........por ejemplo
  6.     printf("se proceso bien dato: %s\r\n", ptr);
  7. }
  8.  
  9. void call(){
  10.    char dato[]="hola";
  11.  
  12.    funcion(dato); //--> Esto se procesa bien, pero lo que quiero es que se pueda hacer es.......
  13.    funcion("Hola amigos TODOPIC");
  14.  
  15. }

(http://publi.garcia-cuervo.net/puntero_a_constante.png)
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: Nocturno en 06 de Septiembre de 2013, 04:29:36
Jeje, esto cada vez se parece más al BASIC  :D
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: japifer_22 en 07 de Septiembre de 2013, 02:55:29
EXELENTES amigos muchas gracias, siempre se aprende algo nuevo..... gracias.....
Título: Re: pasar a una función datos como: funcion("hola")
Publicado por: miquel en 07 de Septiembre de 2013, 17:41:53
Hola RedPic!!

Cuando me decia que funcionaba con CCS 4.114 era incluyendo el:  #device PASS_STRINGS=IN_RAM

Por lo que he leido parece ser que en versiones mas antiguas este "truco" no funciona.

Saludos,

Miquel