編譯后出現User\main.c(57): warning: #167-D: argument of type "char" is incompatible with parameter of type "char *"
強制類型轉換還是無法消除,請大佬指點
相關代碼如下:
NEMA_MSG gps;
while(1)
{
if(DMA_RxFlag)
{
DMA_RxFlag = 0;
GNRMC_Analysis(&gps,(uint8_t*)usart3_dma_buf);
HMI_Send_TxtIntVar("page0.t0",gps.utc.year);
HMI_Send_TxtIntVar("page0.t2",gps.utc.month);
HMI_Send_TxtIntVar("page0.t4",gps.utc.date);
HMI_Send_TxtIntVar("page0.t18",gps.utc.hour);
HMI_Send_TxtIntVar("page0.t19",gps.utc.min);
HMI_Send_TxtIntVar("page0.t20",gps.utc.sec);
HMI_SendTxDblvar("page0.t10", gps.longtitude/100000);
HMI_SendTxtStrVar("page0.t12",gps.E_W); //這句有警告
HMI_SendTxDblvar("page0.t13",gps.latitude/100000);
HMI_SendTxtStrVar("page0.t15",gps.N_S); // 這句有警告
HMI_SendTxDblvar("page0.t23",gps.speed/10000);
HMI_SendTxDblvar("page0.t25",gps.course/100);
}
}
/*GNRMC解析程序
gpsx:數據結構體
buf: 接收到是數據幀首地址指針
*/
void GNRMC_Analysis(NEMA_MSG *gpsx,uint8_t *buf)
{
uint8_t *p1,dx;
uint8_t posx; //第幾個逗號
uint32_t temp;
float rs;
p1 = (uint8_t*)strstr((const char *)buf,"GNRMC"); //獲取GNRMC數據幀幀頭指針
posx = NMEA_GetComma(p1,1);
if(posx != 0xff)
{
temp = NMEA_Str2Num(p1+posx,&dx)/NMEA_Pow(10,dx); //獲取UTC時間,去掉.后毫秒
gpsx->utc.hour = temp/10000;
gpsx->utc.min = (temp/100)%100;
gpsx->utc.sec = temp%100;
}
posx = NMEA_GetComma(p1,3); //緯度
if(posx != 0xff)
{
temp = NMEA_Str2Num(p1+posx,&dx);
gpsx->latitude = temp/NMEA_Pow(10,dx+2);//得到°
rs = temp%NMEA_Pow(10,dx+2);//得到 '
gpsx->latitude = gpsx->latitude*NMEA_Pow(10,5)+ (rs*NMEA_Pow(10,5-dx))/60;//轉換為°
}
posx = NMEA_GetComma(p1,4);
if(posx != 0xff) gpsx->N_S = *(p1+posx); //南緯北緯
posx = NMEA_GetComma(p1,5); //經度
if(posx != 0xff)
{
temp = NMEA_Str2Num(p1+posx,&dx); //獲取UTC時間,去掉.后毫秒
gpsx->longtitude = temp/NMEA_Pow(10,dx+2);//得到°
rs = temp%NMEA_Pow(10,dx+2);//得到 '
gpsx->longtitude = gpsx->longtitude*NMEA_Pow(10,5)+ (rs*NMEA_Pow(10,5-dx))/60;//轉換為°
}
posx = NMEA_GetComma(p1,6);
if(posx != 0xff) gpsx->E_W = *(char*)(p1+posx); //東經西經
posx=NMEA_GetComma(p1,7); //得到地面速率
if(posx!=0XFF)
{
gpsx->speed = NMEA_Str2Num(p1+posx,&dx);
if(dx<3) gpsx->speed*=NMEA_Pow(10,3-dx); //確保擴大1000倍
}
posx=NMEA_GetComma(p1,8); //得到航向
if(posx!=0XFF)
{
gpsx->course = NMEA_Str2Num(p1+posx,&dx);
if(dx<3) gpsx->speed*=NMEA_Pow(10,3-dx); //確保擴大1000倍
}
posx=NMEA_GetComma(p1,9); //得到UTC日期
if(posx!=0XFF)
{
temp=NMEA_Str2Num(p1+posx,&dx); //得到UTC日期
gpsx->utc.date=temp/10000;
gpsx->utc.month=(temp/100)%100;
gpsx->utc.year=2000+temp%100;
}
}
__packed typedef struct
{
DATE_TIME utc;
uint8_t N_S; //南緯北緯
double latitude; //緯度
char E_W; //東經西經
double longtitude; //經度
int16_t atitude; //海拔高度
double speed; //速度
double course; //航向
}NEMA_MSG;
|