贴上程序,主要是返回值temp,我设定为float, 函数f_myfunc_get_temp(int16_t data)返回值也设定为 float,打印设定为%6.2f,输出0.00;设定为%d输出为1102577664;如果把函数 f_myfunc_get_temp(int16_t data)设定为int,也就是int f_myfunc_get_temp(int16_t data),打印%d输出是正确的,但只是整型
程式中红色字体计算出来的小数点部分好像被省略掉了,奇怪的
我用debug看,也是这样
,
int16_t f_myfunc_find_ntc(u16_t data)
{
u16_t start, mid, end;
u16_t dat;
start = 0;
end = 110;
if ((data > 3986) || (data < 767))
{
return 0xffff;
}
while (start <= end)
{
mid = (end + start)/2;
dat = ntc[mid];
if (data > dat)
{
end = mid - 1;
}
else
{
start = mid + 1;
}
}
return mid;
}
float f_myfunc_get_temp(int16_t data)
{
int index = 0;
double temp = 0.05;
index = f_myfunc_find_ntc(data);
if (0xffff == index) // 数据格式不正确
{
return 0xffff;
}
if (ntc[index] == data) // 正好相等
{
temp = index-30;
}
else
{
if (ntc[index] < data)
{
temp = (index-1) -30 + (float)((data-ntc[index-1]) / (ntc[index]-ntc[index-1]));
}
else
{
temp = index - 30 + (float)((data-ntc[index]) / (ntc[index+1]-ntc[index]));
}
}
return temp;
}
int main(void)
{
/* USART1 config */
USART1_Config();
/* enable adc1 and config adc1 to dma mode */
ADC1_Init();
while (1)
{
float P = 35.55;
ADC_ConvertedValueLocal =ADC_ConvertedValue; // 读取转换的AD值
printf("\r\n f_myfunc_get_temp is %6.2f℃\r\n",f_myfunc_get_temp(ADC_ConvertedValueLocal));
Delay(0xffffee); // 延时
}