Autor Tema: [SOLUCIONADO]Ayuda con una sentencia que no la entiendo  (Leído 1476 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
[SOLUCIONADO]Ayuda con una sentencia que no la entiendo
« en: 28 de Diciembre de 2014, 09:33:01 »
Hola a todos, pues trasteando con otros códigos que han hecho otras personas me he topado con uno que no lo comprendo a ver si alguien me lo explica.

La función desarrollada es esta:
Código: [Seleccionar]
XEE_RESULT XEEReadArray(DWORD address, BYTE *buffer, WORD length)
la sentencia es esta:
Código: [Seleccionar]
XEEReadArray(0x0000, (BYTE*)&NVMValidationStruct, sizeof(NVMValidationStruct));
se lo que hace la función y la entiendo, pero lo que no entiendo es esto.
Código: [Seleccionar]
(BYTE*)&NVMValidationStruct
¿por qué está ese (BYTE*) ahí precedido del operador de dirección al buffer?, ¿que es lo que hace?

« Última modificación: 28 de Diciembre de 2014, 19:04:51 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #1 en: 28 de Diciembre de 2014, 09:51:47 »
el byte ese se llama CAST (en ingles) no se explicarlo bien la palabra en español, pero digamos que lo que hace es convertirte los datos de un tipo a otro, simplemente se pone por si el NVMValidationStruct no es del tipo BYTE para que el compilador no de warning o error, si por ejemplo tienes un int de 16bits y lo metieses en esa funcion te daria error (o warning dependiendo del nivel) ya que estas metiendo un dato de 16bits en una funcion que acepta 8bits, si le pones ese (BYTE*) delante entonces esa funcion lo reconoce como 8bits y no da error.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #2 en: 28 de Diciembre de 2014, 10:16:33 »
  Pero en ese caso, al tener el *, ¿no estaría indicando que es un puntero de tipo byte que apunta a la dirección de NVMValidationStruct ?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #3 en: 28 de Diciembre de 2014, 10:49:43 »
si, justo como indica que requiere la funcion: XEEReadArray(DWORD address, BYTE *buffer, WORD length), necesita un dato tipo puntero y es lo que se le esta dando.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #4 en: 28 de Diciembre de 2014, 15:07:06 »
¿Y cómo puedes meter un dato de 16 bits en uno de 8 bits?, no entra, es como meter 1 litro de agua en un baso de 500cc.
ese dato transformado no estará completo, ¿no?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #5 en: 28 de Diciembre de 2014, 15:18:09 »
  Justamente para eso es el Cast, para tratar a la variable de 16 bits como si en realidad fuera de 8 bits. Creo que en ese caso toma los 8 bits menos significativos de la variable "int" para que quepan en la variable "byte"
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #6 en: 28 de Diciembre de 2014, 15:28:01 »
no se trata de meter un dato de 16 en uno de 8, el micro todos los datos los interpreta como 8bits (siendo un micro de 8 bits claro), la unica diferencia es que cuando tratamos con 16bits pues se hacen en varias operaciones. En el caso de esta funcion si tienes una variable o array de 16bits le estas dando la direccion de memoria (&) del puntero del array, y esta funcion interpreta esos datos como bytes, no se que hace la funcion, pero imaginemos que queremos poner ese array a 0, pues en este caso tendriamos una direccion de memoria la cual contiene 2 bytes por lo cual tendria que hacer 2 operaciones para poner ese int16 a 0.

Es muy sencillo pero explicarlo es algo complejo, sobretodo sin poner ejemplos.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Ayuda con una sentencia que no la entiendo
« Respuesta #7 en: 28 de Diciembre de 2014, 19:04:31 »
Ok, comprendido, muchas gracias
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...


 

anything