Autor Tema: string como parámetro  (Leído 2051 veces)

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

Desconectado dongustavo

  • PIC10
  • *
  • Mensajes: 22
string como parámetro
« en: 24 de Agosto de 2013, 12:45:12 »
Hola,


- uso un PIC18
- compilador XC18

Tengo esta función:

void MLCD_WriteString(unsigned char * string)
{
while(*string)
  {
  MLCD_WriteChar(*string++);
  }
}



Si la llamo así funciona OK:
byte tempCHAR[3];


tempCHAR[0]='4';
tempCHAR[1]=0;
MLCD_WriteString(tempCHAR);

Si la llamo así no funciona:

MLCD_WriteString("4");   //Warning [2054] suspicious pointer conversion



Necesito poder pasarle a la función tanto variables en RAM como tempCHAR como "variables" en ROM como "4"...


Comentarios bienvenidos...

Saludos!







Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: string como parámetro
« Respuesta #1 en: 24 de Agosto de 2013, 13:23:25 »
Tu función espera un puntero, no puedes pasarle un valor fijo o una variable.
Otra cosa son las matrices, yo suelo pasarlas como un puntero al primer elemento de la matriz, pero si te compila y funciona poniendo solo el nombre de la matriz, supongo que es equivalente.


Prueba algo así:
const unsigned char variable ="4";
MLCD_WriteString (&variable);

De esta manera estás pasando un puntero, que apunta a la variable estática "variable" almacenada en flash, que contiene el valor "4", prueba con comillas simples o dobles, ahora mismo no recuerdo si funciona con una u otra o ambas. Si le quitas el "const" será una variable en RAM.


PD: corrijo, es "const" y no "static" para que la variable esté almacenada en flash.
Yo no he utilizado el "const", porque cuando he necesitado guardar algo en flash, ha sido en una dirección concreta, y entonces he utlizado algo como esto:
unsigned int __attribute__ ((space(prog), address(0x9D005010))) Reservada_1 = 0xFFFFFFFF; // Direccion reservada para usos varios

« Última modificación: 24 de Agosto de 2013, 15:00:48 por planeta9999 »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: string como parámetro
« Respuesta #2 en: 24 de Agosto de 2013, 13:38:41 »
Para mi esta correcta la forma de llamarlo.

Citar
MLCD_WriteString("4");   //Warning [2054] suspicious pointer conversion

El warning seguramente será porque el C string esta definido como char a secas osea signedado.

Código: C
  1. MLCD_WriteString(( unsigned char * ) "4");

De esta manera el warning posiblemente desaparezca.

Pero esto ni implique que funcione, podría ser ( no soy un experto en arquitectura PIC ) que tenga que ver con el tema de acceder a datos en Flash ...

Saludos !

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: string como parámetro
« Respuesta #3 en: 24 de Agosto de 2013, 14:28:21 »
Hola,


- uso un PIC18
- compilador XC18

Tengo esta función:

void MLCD_WriteString(unsigned char * string)
{
while(*string)
  {
  MLCD_WriteChar(*string++);
  }
}



Si la llamo así funciona OK:
byte tempCHAR[3];


tempCHAR[0]='4';
tempCHAR[1]=0;
MLCD_WriteString(tempCHAR);

Si la llamo así no funciona:

MLCD_WriteString("4");   //Warning [2054] suspicious pointer conversion



Necesito poder pasarle a la función tanto variables en RAM como tempCHAR como "variables" en ROM como "4"...


Comentarios bienvenidos...

Saludos!




  Podría decirse que tengo una función que cumple una tarea similar, pero está definida de manera diferente y me permite pasarle ambos tipos de parámetro.
  La utilizaba anteriormente con HiTech C y ahora la estoy utilizando con XC8 sin problemas.

Código: C
  1. void WriteStrLcd (const char *palabra)
  2.   {
  3.     while (*palabra)
  4.       WriteByteLcd ((*palabra++),1);
  5.   }

  Observa que en la definición dice "const char *palabra" como si fuera un puntero a una constante. De todas maneras permite llamarla de las siguientes maneras sin ningún problema.

Código: C
  1. unsigned char frecuenciatxt[16];
  2. WriteStrLcd("   Generador   ");
  3. itoa(frecuenciatxt, alfa, 10);
  4. WriteStrLcd(frecuenciatxt);
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: string como parámetro
« Respuesta #4 en: 24 de Agosto de 2013, 16:48:57 »
Podes probar con el cast que indica RICHI777, y sino hace otra función como indica AngelGris.  ;-)
No contesto mensajes privados, las consultas en el foro


 

anything