Autor Tema: Las cosas raras del compilador ¿A alguien le ha ocurrido?  (Leído 2685 veces)

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

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Las cosas raras del compilador ¿A alguien le ha ocurrido?
« en: 06 de Marzo de 2008, 15:57:39 »
Buenas a todos,

Pongo esto aqui para ver si a alguien le ha ocurrido, porque no tiene logica ninguna, resulta que yo hago esto en mi codigo:

Código: C
  1. char consAck_rs232[7] ={0xFF 0x02 0x04 0x06 0x56 0x02 0x03};
  2.  
  3. for(i=0;i<strlen(consAck_rs232);i++){
  4.      fputc(consAck_rs232[i],Canal_PC);
  5. }
Y misteriosamente que es lo que recibo por consola ????? pues esto...... tachan !!!

ff 02 04 06 56 02 03 21 c1 07 62 01 0e

¿De donde leches saca el PIC los últimos valores?

He visto cosas raras, pero a esto no le veo absolutamente ninguna explicación.

Editado por Nocturno: he modificado el mensaje para poner el código en formato C, porque salía en cursiva y se perdía info.
« Última modificación: 06 de Marzo de 2008, 16:32:35 por un Moderador »
__El conocimiento humano pertenece al mundo__

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #1 en: 06 de Marzo de 2008, 18:08:49 »
Quizas las constantes en flash ocupen dos bytes

Código: C++
  1. for(i=0;i < strlen(consAck_rs232) / 2 ; i++){



Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #2 en: 06 de Marzo de 2008, 18:14:23 »
Lo mas probable es que strlen() cuente los caracteres desde el primero hasta el primer NULL ó '\0' ó 0x00 que se encuentre y que éste sea el posterior al valor 0e.

Coloca char consAck_rs232[8] ={0xFF 0x02 0x04 0x06 0x56 0x02 0x03 0x00}; y prueba de nuevo ...

ó haz el bucle for(i=0;i<7;i++).

De todas formas puedes tener problemas debido a que son constantes.

Puedes también usar sizeof(consAck);
« Última modificación: 06 de Marzo de 2008, 18:21:37 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #3 en: 06 de Marzo de 2008, 19:46:07 »
Premio para don Diego.

La función StrLen mide cadena y una cadena siempre termina en cero (\0), como tu cadena de caracteres no termina en cero, pues sigue enviando caracteres.

Por contra SizeOf devuelve la longitud del objeto en memoria, en este caso es válido por que cada caracter ocupa un byte osease coincide el tamaño del objeto con el espacio ocupado en memoria.

Por cierto lo que has echo es un puntero descontrolado, en Windows eso te hubiera originado una bonita ventana azul con el mensaje "Excepción grave...."

Un saludo
« Última modificación: 06 de Marzo de 2008, 19:48:14 por jfh900 »
* 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 jnavarro

  • PIC10
  • *
  • Mensajes: 33
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #4 en: 06 de Marzo de 2008, 19:48:57 »

Hay que ver las cosas con las que se encuentra uno, nunca te aocstarás sin saber algo más :)

Bueno pues mañana en llegar probaré con el SizeOf.

Gracias por contestar !! Salu2   :-/
__El conocimiento humano pertenece al mundo__

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #5 en: 07 de Marzo de 2008, 04:00:34 »

Premio para don Diego.


Venga, saca la caja de las medallas, que a mi me gusta una roja con cinta blanca. ja, ja, ja  :D :D :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #6 en: 08 de Marzo de 2008, 18:10:37 »
Don Diego, una no, si no varias  :D :D :D :D:



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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #7 en: 08 de Marzo de 2008, 18:31:22 »
No seas Speedy Gonzalez, vamos a esperar a que el amigo jnavarro confirme que ya funciona.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #8 en: 10 de Marzo de 2008, 07:12:16 »

Siento el retraso, el viernes tuve que salir y no pasé al final por el laboratorio.

Acabo de probarlo, y funciona a la perfección con SizeOf, la sentencia queda al final:  :-)

   if(!strncmp(bufferRecepWC, consAck_rs232, SizeOf(consAck_rs232))){

   }

¡¡¡ Mis felicitaciones Don Diego !!! Has dado a la primera, es exactamente eso.  :-/
__El conocimiento humano pertenece al mundo__

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #9 en: 10 de Marzo de 2008, 11:45:15 »
Otra manera usando el strlen hubiese sido declarando el array de la siguiente manera:
char consAck_rs232[] ="\xFF\x02\x04\x06\x56\x02\x03";
El array al estar encerrado entre "" le asigna automaticamente el NULL al final.
Saludos

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #10 en: 10 de Marzo de 2008, 13:47:14 »
Claro, estas declarando una cadena y en "C" todas las cadenas se terminan con "0x00".

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: Las cosas raras del compilador ¿A alguien le ha ocurrido?
« Respuesta #11 en: 10 de Marzo de 2008, 14:08:49 »
Como comentario final, el uso del sizeof genera código mas optimo, ya que el indice se resuelve en tiempo de compilación, por el contrario el uso del srtlen y cadena hace mas prolija la definicion,ya que no tengo que acordarme el NULL.
Saludos !
PD. Ahora deberiamos cambiar el titulo del post y poner "Las cosas raras del programador" jejeje es un chiste :P