2016-06-21 11 views
-5

Ich versuche nur, eine Funktion "char * get_time_clk()" innerhalb einer if-Schleife aufzurufen. Ich arbeite im PIC24F Mikrocontroller. Das Problem ist, wenn ich versuche, innen anzurufen, wenn Schleife Mikrocontroller neu gestartet wird. Wenn ich die Funktion außerhalb der if-Schleife aufruft, funktioniert sie. Ich kann andere Funktionen als diese aufrufen. Was könnte das Problem sein?Ich kann keine Funktion innerhalb einer if-Anweisung aufrufen

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
char *get_time_clk(); 
int main() 
{ 
    init_processor(); //Initiate PIC 
    Delayms(15000); 
    printf("%s\n",get_time_clk());-----> **working here** 
while(1) 
    { 
     if(http_conn) 
       { 
        printf("%s\n",get_time_clk());------>**Not working** 
       } 
       . 
       . 
       . 

    } 
    return 0; 
    } 

char *get_time_clk() 
    { 
    int i,v=0,j=5,l=0,m=8,n=0,q=11,s=0; 
    char yr[5],mm[5],dd[5],time[10],sp_chr[2]="-",date_fr[20]; 
    uart3str("AT+CCLK?\r"); 
    Delayms(500); 
    int b,z=0; 
    for(b=19;b<=35;b++) 
    { 
     cur_time[z]=gprs_buffer[b]; 
     z++; 
    } 
    cur_time[z]='\0'; 
    strcat(real_time,cur_time); 
    for(i=0;i<=strlen(real_time);i++) 
     { 
     while(real_time[v]!='/') 
     { 
      yr[v]=real_time[v]; 
      v++; 
     } 

      while(real_time[j]!='/') 
      { 
       mm[l]=real_time[j]; 
       j++; 
       l++; 
      } 

      while(real_time[m]!=',') 
      { 
       dd[n]=real_time[m]; 
       m++; 
       n++; 
      } 

     } 

     yr[v]='\0'; 
     mm[l]='\0'; 
     dd[n]='\0'; 
     time[s]='\0'; 
     int c,d=0,e=0; 
     for(c=0;c<=strlen(real_time);c++) 
     { 
      c = c+11;e=c+8; 
      do 
       { 
        time[d] = real_time[c++]; 
        d++; 
       }while(c<=e); 
      time[d] = '\0'; 
      c=200; 
      c++; 
     } 
     snprintf(date_fr, sizeof(date_fr), "%s%s%s%s%s%s", yr, sp_chr, mm, sp_chr,dd," "); 
     strcat(date_fr,time); 
     return date_fr; 
     } 
+1

Was ist eine "if-Schleife"? – John3136

+0

@paisanco http_conn ist im Timer-Interrupt definiert – user6161

+0

Was ist 'cur_time'? Was ist 'real_time'? – LPs

Antwort

0

Ich überprüfe meine Funktion, es hat einige Fehler. Jetzt geht es. Danke ...

char * get_time_clk() 
{ 
clear(); 
memset(date_fr,0,sizeof(date_fr)); 
uart3str("AT+CCLK?\r"); 
Delayms(500); 
int dt=0; 
for(fori=0;fori<strlen(gprs_buffer);fori++) 
{ 
    if(gprs_buffer[fori]=='"') 
    { 
     fori=fori+1; 
     do 
      { 
       dt_tm[dt]=gprs_buffer[fori]; 
       dt++; 
      }while(gprs_buffer[++fori]!='"'); 
    } 
} 
dt_tm[dt]='\0'; //dt_tm=16/06/21,17:28:29+22 

int de=0; 
forj=0; 
do 
{ 
    dte[de]=dt_tm[de]; 
    de++; 
}while(dt_tm[++forj]!=','); 
dte[de]='\0'; //dte=16/06/21 
forj=forj+1; 

int tm=0; 
do 
{ 
    tme[tm]=dt_tm[forj]; 
    tm++; 
}while(dt_tm[++forj]!='+'); 
tme[tm]='\0'; //tme=17:28:29 

int yr=0,mn=0,dy=0,fork=0; 
    for(fork=0;fork<strlen(dte);fork++) 
    { 
     do 
     { 
      year[yr]=dte[fork]; 
      yr++; 
     }while(dte[++fork]!='/'); 
     fork=fork+1;       //Year 

     do 
     { 
      month[mn]=dte[fork]; 
      mn++; 
     }while(dte[++fork]!='/'); 
     fork=fork+1;       //Month 
     do 
     { 
      day[dy]=dte[fork]; 
      dy++; 
     }while(dte[++fork]!='\0'); 
                   //Day 
    } 
    year[yr]='\0'; 
    month[mn]='\0'; 
    day[dy]='\0'; 
    snprintf(chn_date, sizeof(chn_date), "%s%s%s%s%s%s%s",appnd_yr, year, sp_chr, month, sp_chr,day," "); 
    strcat(chn_date,tme); 
return chn_date; 
} 
Verwandte Themen