Autor Tema: Punteros y CCS C  (Leído 3741 veces)

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

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Punteros y CCS C
« en: 05 de Marzo de 2008, 08:09:07 »
Buenas, estoy modificando unas funciones que vienen del compilador Hitec, para el compilador CSS, y tengo el siguiente problema con la funcion que muestro:


cons char linea[10]="1234567890"

main()
{
....
funcion (linea);
...
}

void funcion (char *s)
{

while (*s)
       funcion1(*s++);

}

el problema me surge cuando se ejecuta funcion, no entra en el bucle while, es como si *s fuera siempre FALSE.

Desconozco si Hitec no funciona de la misma manera que CSS en cuanto a esta asignacion y test sobre un puntero, pero deberia de ceñirse a el uso de C.

¿Alguna idea?

Saludos.

Editado título por Redpic: Cambiado CSS (Hojas de estilo en cascada) por CCS C (Custom Computer Services C)
« Última modificación: 05 de Marzo de 2008, 17:42:56 por un Moderador »
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Punteros y CSS
« Respuesta #1 en: 05 de Marzo de 2008, 08:43:58 »
Que yo sepa, un While solo funciona con valores digitales (0 y 1, True o False), pero de un char que comprueba???
Esto que pones realmente funciona en Hitec?? :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Punteros y CSS
« Respuesta #2 en: 05 de Marzo de 2008, 09:17:01 »
Buenas,

Segun el programador de la funcion original, si, yo me estoy limitando a traducir las funciones que necesito para CSS. Supongo que el while busca un NULL que seria lo inmediatamente similar al FALSE, porque al *s apunta a un caracter......

si finalmente no encuentro la solucion, tendre que hacer yo la funcion rastreando la cadena de caracteres y delimitando el maximo....

Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Punteros y CSS
« Respuesta #3 en: 05 de Marzo de 2008, 16:06:44 »
Que yo sepa, un While solo funciona con valores digitales (0 y 1, True o False), pero de un char que comprueba???

Según entiendo cualquier valor se puede evaluar en un while, en este caso cuaquier valor del char diferente de cero se tomará como true.

Saludos,

Diego.
Pereira - Colombia

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Punteros y CSS
« Respuesta #4 en: 05 de Marzo de 2008, 16:58:45 »
Y si metes al While un valor signed int con valor negativo que pasa??? :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Punteros y CCS C
« Respuesta #5 en: 05 de Marzo de 2008, 17:59:14 »
dhmejia Tiene razón. El cero se considera como FALSE y cualquier otro valor como TRUE. De echo se puede implementar como:

#define FALSE 0
#define TRUE !FALSE

Y si metes al While un valor signed int con valor negativo que pasa??? :mrgreen:

Devuelve TRUE

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 RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Punteros y CCS C
« Respuesta #6 en: 06 de Marzo de 2008, 00:40:13 »
Correcta la definicion de jfh900 !, no entra en el while porque el valor que evalua es "1"y que es distinto de NULL o FALSE, que es el primer valor del array linea, como dije en muchos temas, esto es "C" y cualquier compilador que se digne de llamarse asi lo debe cumplir, llamese CCS o Hitech, si esto no se cumple que se ponga otro nombre y que  deje de confundir a tanta gente...como veo seguido aca...yo aprendi a programar en C, no en Borland C, Microsoft C o Watcomm C, despues las extensiones de cada implementacion ok, pero yo se C.
Saludos !

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Punteros y CCS C
« Respuesta #7 en: 06 de Marzo de 2008, 07:20:14 »
Gracias a todos, creo que desistire de la funcion y programare otra. Ya veo que CSS no utiliza correctamente los punteros y no es puramente C.

No entra en el while porque *s es siempre FALSE, o asi lo interpreta.

Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Punteros y CCS C
« Respuesta #8 en: 06 de Marzo de 2008, 08:13:01 »
Buenas, estoy modificando unas funciones que vienen del compilador Hitec, para el compilador CSS, y tengo el siguiente problema con la funcion que muestro:


cons char linea[10]="1234567890"

main()
{
....
funcion (linea);
...
}

void funcion (char *s)
{

while (*s)
       funcion1(*s++);

}

el problema me surge cuando se ejecuta funcion, no entra en el bucle while, es como si *s fuera siempre FALSE.


Perdon, ahora profundizando un poco en definiciones de datos, la notacion para declarar un array de contantes en memoria es asi:

Citar
BYTE CONST TABLE [10]= {9,8,7,6,5,4,3,2,1,0};

Creo que el compilador interpreta tu primer numero como un solo entero largo (no encuentra las comas) y el resto como ceros...
Una pregunta:
Este programa asi como lo pones aqui fue compilado sin errores?? :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Punteros y CCS C
« Respuesta #9 en: 06 de Marzo de 2008, 08:16:14 »
No entra en el While porque la sintaxis no lo permite, aparentemente no se permite punteros a constantes.
De la ayuda del CCS.

Citar
How can a constant data table be placed in ROM?

--------------------------------------------------------------------------------

The compiler has support for placing any data structure into the device ROM as a constant read-only element.  Since the ROM and RAM data paths are separate in the PIC®, there are restrictions on how the data is accessed.  For example, to place a 10 element BYTE array in ROM use:

BYTE CONST TABLE [10]= {9,8,7,6,5,4,3,2,1,0};

and to access the table use:

x = TABLE ;

OR

x = TABLE [5];

BUT NOT

ptr = &TABLE ;

In this case, a pointer to the table cannot be constructed.

Similar constructs using CONST may be used with any data type including structures, longs and floats.

Note that in the implementation of the above table, a function call is made when a table is accessed with a subscript that cannot be evaluated at compile time.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Punteros y CCS C
« Respuesta #10 en: 06 de Marzo de 2008, 08:41:46 »
Perdon ha sido un error, la definicion correcta del array de caracteres es:


cons char linea[]="1234567890"

Gracias por la correccion e informacion MGLSOFT

Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Punteros y CCS C
« Respuesta #11 en: 06 de Marzo de 2008, 08:46:49 »
Y ahora te funciona??? :lol: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Punteros y CCS C
« Respuesta #12 en: 06 de Marzo de 2008, 09:07:01 »
No soy tan rapido, estoy en el curro, y esto es un proyecto que tengo en casa....  :-)

Esta tarde si tengo un ratito le pego un repaso con la informacion suministrada y os comento

Muchas gracias. :-/
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
Re: Punteros y CCS C
« Respuesta #13 en: 16 de Marzo de 2008, 05:49:19 »
Perdon por la tardanza, he estado haciendo otras funciones para la aplicacion que estoy diseñando.

Como bien comentais no puedo direccionar un puntero a un char en un array de constante, y probe a copiar el array a uno en RAM. De esta manera si funciona.  :-)

Gracias por todo.

Saludos.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P