我是用STM32F103RBT6最小开发板系统,从串口输入两个字符型数据,在转换成double型后,与程序中设置好的两个double型数据进行比较,如果两个都相等,则向串口助手输出yes,否则输出比较结果。
程序如下:
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "my.h"
char gps_name[6]={48},gps_date[100]={48};
int main(void)
{
int i,j;
char gps_time[11]={48},gps_weidu[9]={48},gps_jingdu[10]={48};
double weidu,jingdu,weidu1=25.1903,jingdu1=110.2487;
SystemInit();
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
delay_ms(10);
while(1)
{
if(gps_date[11]=='A') //判断数据有效性,数据有效
{
for(i=13,j=0;i<20;i++,j++) //提取纬度信息
gps_weidu[j]=gps_date;
for(i=25,j=0;i<33;i++,j++) //提取经度信息
gps_jingdu[j]=gps_date;
weidu=str_to_double(gps_weidu); //字符型转换为double型
jingdu=str_to_double(gps_jingdu);
printf("%f\t%f\t",weidu,weidu1);
printf("%f\t%f\t",jingdu,jingdu1);
if((weidu>weidu1)&&(jingdu>jingdu1))
printf("fall back,to the left\n");
else if((weidu>weidu1)&&(jingdu<jingdu1))
printf("fall back,to the right\n");
else if((weidu<weidu1)&&(jingdu>jingdu1))
printf("go ahead,to the left\n");
else if((weidu<weidu1)&&(jingdu<jingdu1))
printf("go ahead,to the right\n");
else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu<jingdu1))
printf("to the right\n");
else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu>jingdu1))
printf("to the left\n");
else if((weidu>weidu1)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001))
printf("fall back\n");
else if((weidu<weidu1)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001))
printf("go ahead\n");
else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001))
printf("OK\n");
}
}
}
[/mw_shl_code]
接收到的weidu与weidu1相比较,即使两者相等,即weidu=25.1903,weidu1=25.1903,得到的判断结果却是weidu>weidu1,而程序却能正确判断jingdu==jingdu1。采用了直接比较相等,取大于负数小于正数两种判断方法也都没用,使用Vistual C模拟输出结果又能正确比较,这是STM32F103的问题吗? |