Autor Tema: esta funcion no me recibe constantes  (Leído 2211 veces)

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

Desconectado palermo

  • PIC10
  • *
  • Mensajes: 24
esta funcion no me recibe constantes
« en: 03 de Junio de 2006, 22:52:02 »
Hola muchachos !!!

...,tengo un inconveniente con la siguiente funcion:
Código: [Seleccionar]
void escribirTexto(char text[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(text);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, text[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
}

si la llamo de la siguiente manera, el compilador me dice q todo esta bien y funciona correctamente:
Código: [Seleccionar]
char nom[]="palermo";
escribirTexto(nom,0);

...,pero si intento hacer lo siguiente:
Código: [Seleccionar]
char conts nom[]="palermo";
escribirTexto(nom,0);

...,o hacer:
Código: [Seleccionar]
escribirTexto("palermo",0);

el compilador ccs me dice q hay un error y q a esa funcion no se le pueden
pasar datos constantes sino solo se le pueden pasar variables.

mi pregunta es:
¿como modifico la funcion para q tambien pueda recibir constantes?

GRACIAS !!!

Desconectado djpalas

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 595
    • Microtronic
Re: esta funcion no me recibe constantes
« Respuesta #1 en: 04 de Junio de 2006, 06:04:31 »
Buenas compañero!!

Podrias hacer una sobrecarga de funciones y no tendría que darte fallos. Más o menos podria ser así:

Código: [Seleccionar]

/*Prototipo de funciones*/
void escribirTexto (char *, EEPROM_ADDRESS);
void escribirTexto (char conts *, EEPROM_ADDRESS);

/*Funciones*/
void escribirTexto(char text[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(text);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, text[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
}

void escribirTexto(char conts text[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(text);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, text[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
}

Ahora mismo no tengo el CCS para comprobarlo, porque ultimamente utilizo Keil para los Infineon C515-L.

saludos y espero que te sirva  :-)

Saludos desde Cádiz, España
Web personal: http://www.microtronic.es

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: esta funcion no me recibe constantes
« Respuesta #2 en: 04 de Junio de 2006, 06:10:42 »
Saludos! ¿Es asi como lo tienes en el programa? es que esta mal escrito, aunque no se si sera al ponerlo aqui

char const nom[]="palermo";

He estado mirando en el manual de CCs y especifica la longitud ademas, si no te va intentalo poniendo la longitud a ver que pasa
Saludos desde Córdoba, españa

Desconectado palermo

  • PIC10
  • *
  • Mensajes: 24
Re: esta funcion no me recibe constantes
« Respuesta #3 en: 04 de Junio de 2006, 11:49:50 »
kain... asi lo tengo en el programa y funciona perfectamente.

dj... nada, asi me dice q tambien esta mal escrito.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: esta funcion no me recibe constantes
« Respuesta #4 en: 04 de Junio de 2006, 11:57:44 »
Este compilador no admite sobrecarga de funciones.

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 palermo

  • PIC10
  • *
  • Mensajes: 24
Re: esta funcion no me recibe constantes
« Respuesta #5 en: 06 de Junio de 2006, 02:19:33 »
muchachos, cabie un poco as cosas, pero sigo teniendo el mismo problema:
Código: [Seleccionar]
void escribirTexto(char text[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(text);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, text[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
   return;
}


void escribirTexto2(char const texto2[], EEPROM_ADDRESS dir){
   escribirTexto(texto2,dir);
   return;
}


void holaMundo(){
   escribirTexto2("Hola mundo",0);  //Aqui me dice el compilador q es una mala expresion
   return;
}


¿compañeros, q esta pasando?

...,lo unico q quiero es poder hacer un metodo q pueda recibir una constante
como parametro para mandarle a escribir un texto en una memoria...
¿eso es mucho pedirle al compilador?

Desconectado djpalas

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 595
    • Microtronic
Re: esta funcion no me recibe constantes
« Respuesta #6 en: 06 de Junio de 2006, 12:05:38 »
Buenas!!
Prueba con este código a ver si te vale, no lo puedo comprobar porque no tengo el CCS instalado.

Código: [Seleccionar]
void escribirTexto(char texto[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(texto);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, texto[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
   return;
}


void escribirTexto2(char const texto[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(texto);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, texto[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
   return;
}


void holaMundo(){
   escribirTexto2("Hola mundo",0);  //Aqui me dice el compilador q es una mala expresion
   return;
}

Pero una duda, finCadena la tienes declarada como una constante o una variable global, no?


Saludos desde Cádiz, España
Web personal: http://www.microtronic.es

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: esta funcion no me recibe constantes
« Respuesta #7 en: 06 de Junio de 2006, 12:27:35 »
Pues no sirve, ya que todo parámetro pasado a una función se pasa mediante una variable interna, y los valores constantes por definición se pasan por valor, con lo que el compilador no lo admite.

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 djpalas

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 595
    • Microtronic
Re: esta funcion no me recibe constantes
« Respuesta #8 en: 06 de Junio de 2006, 19:11:32 »

Pues no sirve, ya que todo parámetro pasado a una función se pasa mediante una variable interna, y los valores constantes por definición se pasan por valor, con lo que el compilador no lo admite.

Un saludo.

Me puesto a mirar el manual de programación del CCS (Apartado 7 DEFINICION DE FUNCIONES) cito textualmente
Citar
Una característica no muy corriente, se ha añadido al compilador para ayudar a evitar los
problemas creados por el hecho de que no pueden crearse punteros a constantes de cadenas.
Una función que tiene un parámetro de tipo char aceptará una constante de cadena. El
compilador generará un bucle que llama a la función una vez para cada carácter de la cadena.

Por lo que podrias probar este código
========================
Código: [Seleccionar]
void escribirTexto(char texto[], EEPROM_ADDRESS dir){
   int tam=0,i=0;
   tam=strlen(texto);
   for(i=0; i<tam; i++){
      WRITE_EXT_EEPROM( dir++, texto[i] );
   }
   WRITE_EXT_EEPROM( dir++, finCadena );
   return;
}


void escribirTexto2(char texto, EEPROM_ADDRESS dir){
   WRITE_EXT_EEPROM( dir++, texto);
}


void holaMundo(){
   escribirTexto2("Hola mundo",0);  //Aqui me dice el compilador q es una mala expresion
   return;
}

La función void escribirTexto2(char texto, EEPROM_ADDRESS dir) segun lo anterior el propio compilador creara un bucle para enviar caracter a caracter.

Espero que te pueda servir de ayuda.

Saludos desde Cádiz, España
Web personal: http://www.microtronic.es

Desconectado palermo

  • PIC10
  • *
  • Mensajes: 24
Re: esta funcion no me recibe constantes
« Respuesta #9 en: 07 de Junio de 2006, 01:23:19 »
amigos, ay dice claramente q:
Citar
El compilador generará un bucle que llama a la función una vez para cada carácter de la cadena.
y asi no sirve...

-------------------------------------------
me imagino q ya todos conecen la tipica funcion:
printf("Hola mundo !!!");
...,si se dan cuanta, lo q se le manda es una constante de texto y el compiador no
pone problema para nada.

...,bueno, asi mismo, es lo unico q yo quiero hacer. Es solo una funcion q
reciba una constante de texto como parametro:
escribirTexto("Hola mundo !!!");

-------------------------------------------
muchachos, yo pense q era comun q los q programaban pic's en c
en algun momento de su vida, habian echo uso de una funcion
con estas caracteristicas...

¿acaso no es normal q una funcion pueda recibir un texto constante como paramtro?
...asi como: printf("hola mundo !!!");









 

anything