之前写的乱七八糟一大堆5


关于数据的类型转换

int/int32 -> double/float

主要思想:先扩大1000倍,用数据时再缩小1000倍 (1000倍可视情况而定,100倍或者10000倍等)

 

其中涉及强制转换

/* 9541 read */
res95 = rt_device_read(sm95_dev, 0, &sm95_data, 2);
if(res95 == 0)
{
   rt_kprintf("read data failed! result is %d \n", res95);
   rt_device_close(sm95_dev);
   return;
}
else
{      
   /****写法一可以实现完整转换*******************************************/
   sm9541_p = sm95_data[0].data.baro; //!
   sm9541_t = sm95_data[1].data.temp;
   LOG_I("sm9541 fetch pressure is %f, %d\r\n",
         sm9541_p / 1000,
         sm95_data[0].timestamp);
   LOG_I("sm9541 fetch temperature is %f, %d\r\n",          
         sm9541_t / 100,
         sm95_data[1].timestamp);
   /*****************************************************************/
}
?
/* 3041 read */        
res30 = rt_device_read(sm30_dev, 0, &sm30_data, 2);
if(res30 == 0)
{
   rt_kprintf("read data failed! result is %d \n", res30);
   rt_device_close(sm30_dev);
   return;
}
else
{
   /****写法二无法实现真正完整转换*****************************************/
   sm3041_p = sm30_data[0].data.baro / 1000; //!
   sm3041_t = sm30_data[1].data.temp / 100;
   LOG_I("sm3041 fetch pressure is %f, %d\r\n",
         sm3041_p,
         sm30_data[0].timestamp);
   LOG_I("sm3041 fetch temperature is %f, %d\r\n",          
         sm3041_t,
         sm30_data[1].timestamp);
   /******************************************************************/
}      
?