Autor Tema: pasar a una función datos como: funcion("hola")  (Leído 3452 veces)

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

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
pasar a una función datos como: funcion("hola")
« 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  :-/ :-/

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: pasar a una función datos como: funcion("hola")
« Respuesta #1 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í  :?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pasar a una función datos como: funcion("hola")
« Respuesta #2 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!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: pasar a una función datos como: funcion("hola")
« Respuesta #3 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");

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: pasar a una función datos como: funcion("hola")
« Respuesta #4 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.
"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 miquel

  • PIC12
  • **
  • Mensajes: 69
Re: pasar a una función datos como: funcion("hola")
« Respuesta #5 en: 05 de Septiembre de 2013, 15:18:53 »
Con CCS 4.114 funciona!

Saludos,

Miquel

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: pasar a una función datos como: funcion("hola")
« Respuesta #6 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 ...

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: pasar a una función datos como: funcion("hola")
« Respuesta #7 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.
"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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: pasar a una función datos como: funcion("hola")
« Respuesta #8 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. }

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: pasar a una función datos como: funcion("hola")
« Respuesta #9 en: 06 de Septiembre de 2013, 04:29:36 »
Jeje, esto cada vez se parece más al BASIC  :D

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: pasar a una función datos como: funcion("hola")
« Respuesta #10 en: 07 de Septiembre de 2013, 02:55:29 »
EXELENTES amigos muchas gracias, siempre se aprende algo nuevo..... gracias.....

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: pasar a una función datos como: funcion("hola")
« Respuesta #11 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


 

anything