Saludos,Quiero hacer esto, pero no se como enviar el negativo.
#include <stdio.h>
#include <stdint.h>
void main(){
int port=4;
int32_t lat_x=(6.3456*1000000);
int32_t logx=(-75.5666*1000000);
int id=1;
printf("mac tx cnf %u %x%lx%lx%\r\n",port
,id
,lat_x
,logx
); }
Necesito enviar coordenadas gps por el protocolo lora, solo puede ser en HEX.
Creo que es sobre CONVERT Microchip to IEEE-754.
Pero no tengo ni idea como se hace
Ya tengo la respuesta
Funciones
int32 f_PICtoIEEE(float f)
{
int16 c[2];
memcpy((int8*)c
, ((int8*)&f
)+3, 1); memcpy((int8*)c
+1, ((int8*)&f
)+2, 1); memcpy((int8*)c
+2, ((int8*)&f
)+1, 1); memcpy((int8*)c
+3, ((int8*)&f
) , 1); c[1] = ((c[1] >> 1) & 0x7F80) + (c[1] & 0x7F) + ((c[1] & 0x80) << 8);
return ((int32)c[1] << 16) | c[0];
}
float f_IEEEtoPIC(int32 f)
{
float ret;
int16 temp;
memcpy(&temp
, ((int8*)&f
)+2, 2); temp = ((temp << 1) & 0xFF00) + (temp & 0xFF);
if(bit_test(f, 31)) // Test the sign bit
temp |= 0x0080;
else
temp &= 0xFF7F;
memcpy(((int8*)&ret
)+3, ((int8*)&f
) , 1); memcpy(((int8*)&ret
)+2, ((int8*)&f
)+1 , 1); memcpy(((int8*)&ret
)+1, ((int8*)&temp
) , 1); memcpy(((int8*)&ret
) , ((int8*)&temp
)+1, 1);
return ret;
}
void main() {
while(1) {
fprintf( lora
, "Example test..\n\r" );
float32 f=0.1234;
int32 ieeeValue;
float32 myFloat;
ieeeValue = f_PICtoIEEE(f);
myFloat = f_IEEEtoPIC(ieeeValue);
fprintf( lora
, "Float: %0.4f\n\r", myFloat
); fprintf( lora
, "HEX IEEE: %LX\n\r", ieeeValue
);
fprintf( lora
, "\n\r\n\r GPS..\n\r\n\r" ); float32 lat=6.3456;
int32 lat_ieee;
int32 log_ieee;
// Values IEEE
lat_ieee = f_PICtoIEEE( lat);
log_ieee
= f_PICtoIEEE
( log); fprintf( lora
, "HEX IEEE: %LX\n\r", lat_ieee
); // 40CB0F28 fprintf( lora
, "HEX IEEE: %LX\n\r", log_ieee
); // C2972219
break; //
}
}
Aquí se puede validar
https://babbage.cs.qc.cuny.edu/ieee-754.old/32bit.html https://www.h-schmidt.net/FloatConverter/IEEE754.html http://www.ignogantes.net/envio-de-datos-en-punto-flotante-desde-el-pic-al-computador-y-viceversa/