Autor Tema: Separar long en dos int  (Leído 2027 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Separar long en dos int
« en: 14 de Julio de 2006, 07:37:32 »
Hola, me gustaria saber si se puede separar un long en dos int en CCS.

Gracias.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Separar long en dos int
« Respuesta #1 en: 14 de Julio de 2006, 08:26:06 »
  long val
  int pLow, pHigh;

  pLow  = val;
  pHigh = val>>8;

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: Separar long en dos int
« Respuesta #2 en: 14 de Julio de 2006, 08:34:15 »
Muchas gracias, es justo lo que necesitaba.

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Separar long en dos int
« Respuesta #3 en: 18 de Julio de 2006, 16:54:03 »
Hola Pepe necesito hacer lo mismo que es separa un long en dos datos bytes. Pero me preguntaba si te funciono bien lo que respondio RedPic. No es por desconfiar claro pero me gustaria saber si te funciono

Es evidente que funcionara. pero mas vale
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Separar long en dos int
« Respuesta #4 en: 18 de Julio de 2006, 17:42:27 »
¡¡¡ Hombres de poca fé !!! ¿¿¿ por qué dudáis ???

A mi me funciona perfectamente ...  :(

Código: C
  1. void write_eeprom_16bits(int address, long* val){
  2.    int pLow, pHigh;
  3.    printf("write_eeprom_16bits( address=%u, val=%lx)\r\n",address,val);
  4.    pLow  = val;
  5.    pHigh = val>>8;
  6.    printf("write_eeprom( address=%u, val=%x)\r\n",address,pHigh);
  7.    write_eeprom(address,pHigh);
  8.    delay_ms(12);
  9.    ++address;
  10.    printf("write_eeprom( address=%u, val=%x)\r\n",address,pLow);
  11.    write_eeprom(address,plow);
  12.    delay_ms(12);
  13. }
  14.  
  15. long read_eeprom_16bits(int address){
  16.    int  pLow, pHigh;
  17.    long result;
  18.    printf("read_eeprom_16bits( address=%u)\r\n",address);
  19.    pHigh  = read_eeprom(address);
  20.    printf("read_eeprom( address=%u) = %x\r\n",address,pHigh);
  21.    ++address;
  22.    pLow  = read_eeprom(address);
  23.    printf("read_eeprom( address=%u) = %x\r\n",address,pLow);
  24.    result=(pHigh<<8);
  25.    result+=pLow;
  26.    return result;
  27. }



Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Separar long en dos int
« Respuesta #5 en: 18 de Julio de 2006, 19:34:36 »
Y por que no utilizar las funciones que trae el propio CCS, make8, para separar los bytes que se quieran y make16 y make32 para la operación contraria.

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: Separar long en dos int
« Respuesta #6 en: 18 de Julio de 2006, 19:52:53 »
Si, Jesús, es muy bueno utilizar los elementos que un compilador te pone a tu disposición ...  :P

pero si alguien me pregunta cómo hacer algo que es trivial en C (usar el operador shift << ) prefiero hacerlo paso a paso y lo mas estandar posible para que nuestro amigo sepa qué está haciendo y como y porqué.

Como ves lo he descrito en mi ejemplo de esa forma, incluso con una monitorización mediante printf para que pueda ver los resultados intermedios. Prefiero hacerlo así antes que tirar de una función específica del compilador, o incluso de una librería de utilidad como puede ser la eeprom_int como apareció en otro hilo, que sería como utilizar una caja negra que hace lo que te hace falta.

Pretendo así que nuestros amigos no solo solucionen su problema concreto sino que además aprendan algo de C que nunca viene mal.  :mrgreen:
« Última modificación: 18 de Julio de 2006, 19:54:34 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Separar long en dos int
« Respuesta #7 en: 18 de Julio de 2006, 20:20:40 »
Totalmente de acuerdo Diego. Pero no hay que olvidar las funciones existentes, muchas veces no se utilizan por que se desconocen. Lo importante es saber como. por que y para que se utilizan las funciones y los comandos y uno elegir el que mas le convenga en cada caso. Por cierto no pongo en duda tus inestimables explicaciones y ejemplos educativos que son enormemente interesantes y aclaratorios y que espero sigamos contando con ellos. Y puestos a pedir podriamos comparar el código generado por el shift y el generado por el make8, haber si realmente merece la pena de usarlo o directamente utilizamos el metodo tradicional.

Un saludo.
« Última modificación: 18 de Julio de 2006, 20:26:15 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 pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Separar long en dos int
« Respuesta #8 en: 19 de Julio de 2006, 11:36:47 »
RedPic No creas que no tengo fe en ti. Si se que eres una persona que sabe un buen de los micros gracias por replicar el post y ya nunca volvere a dudar de ti .... jeeee . Gracias por ayudarme a ser un poco menos ignorante .............Gracias  Hombre

 :-)El Rock es Cultura :-)
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)