CCS C Gps kütüphanesi derleme hatası neden oluyor?

Başlatan samedkutuk, 27 Aralık 2019, 01:51:17

samedkutuk

Arkadaşlar Merhabalar
GPS Neo-M7 serisi GPS kullanıyorum CCS C de derliyorum fakat verdiği hatayı çözemedim daha önce karşılaşanlar yardımcı olabilir mi ?

// GPS Library for CCS PIC C compiler
// http://simple-circuit.com/



#define _GPRMC_  1
#define _GPGGA_  2
#define _OTHER_  3

#include <stdint.h>
#include <stdlib.h>
#include <string.h>


int1 GPRMC_ok 0GPGGA_ok 0;
uint8_t char_number 0SentenceType 0Term;
char sentence[6], rawTime[11], rawDate[7], rawSpeed[6], rawCourse[6], rawSatellites[3],
     
rawLatitude[13], rawLongitude[13], rawAltitude[7], buffer[12];

void stringcpy(char *str1char *str2int1 dir 0) {
  
uint8_t chr 0;
  do {
    
str2[chr dir] = str1[chr];
  } while(
str1[chr++] != '\0');
}

int1 GPSRead() {
  
uint8_t c getc();

  switch(
c) {
    case 
'\r':  // sentence end
      
if(SentenceType == _GPRMC_)
        
GPRMC_ok 1;
      if(
SentenceType == _GPGGA_)
        
GPGGA_ok 1;
      if(
GPRMC_ok && GPGGA_ok) {
        
GPRMC_ok GPGGA_ok 0;
        return 
1;
      }
      break;

    case 
'$'// sentence start
      
Term char_number 0;
      break;

    case 
',':  // term end (new term start)
      
buffer[char_number] = '\0';
      if(
Term == 0) {
        
stringcpy(buffersentence);
        if(
strcmp(sentence"GPRMC") == 0)
          
SentenceType _GPRMC_;
        else if(
strcmp(sentence"GPGGA") == 0)
               
SentenceType _GPGGA_;
             else
               
SentenceType _OTHER_;
      }

      
// Time
      
if(Term == && SentenceType == _GPRMC_) {
        
stringcpy(bufferrawTime);
      }

      
// Latitude
      
if((Term == 3) && (SentenceType == _GPRMC_)) {
        
stringcpy(bufferrawLatitude1);
      }
      
// Latitude N/S
      
if((Term == 4) && (SentenceType == _GPRMC_)) {
        if(
buffer[0] == 'N')
          
rawLatitude[0] = '0';
        else
          
rawLatitude[0] = '-';
      }

      
// Longitude
      
if((Term == 5) && (SentenceType == _GPRMC_)) {
        
stringcpy(bufferrawLongitude1);
      }
      
// Longitude E/W
      
if((Term == 6) && (SentenceType == _GPRMC_)) {
        if(
buffer[0] == 'E')
          
rawLongitude[0] = '0';
        else
          
rawLongitude[0] = '-';
      }

      
// Speed
      
if((Term == 7) && (SentenceType == _GPRMC_)) {
        
stringcpy(bufferrawSpeed);
      }

      
// Course
      
if((Term == 8) && (SentenceType == _GPRMC_)) {
        
stringcpy(bufferrawCourse);
      }

      
// Date
      
if(Term == && SentenceType == _GPRMC_) {
        
stringcpy(bufferrawDate);
      }

      
// Satellites
      
if((Term == 7) && (SentenceType == _GPGGA_)) {
        
stringcpy(bufferrawSatellites);
      }

      
// Altitude
      
if((Term == 9) && (SentenceType == _GPGGA_)) {
        
stringcpy(bufferrawAltitude);
      }
      
Term++;
      
char_number 0;
      break;

    default:
      
buffer[char_number++] = c;
      break;
  }

  return 
0;
}

uint8_t GPSSecond() {
  return ((
rawTime[4] - '0') * 10 + (rawTime[5] - '0'));
}
uint8_t GPSMinute() {
  return ((
rawTime[2] - '0') * 10 + (rawTime[3] - '0'));
}
uint8_t GPSHour() {
  return ((
rawTime[0] - '0') * 10 + (rawTime[1] - '0'));
}

uint8_t GPSDay() {
  return ((
rawDate[0] - '0') * 10 + (rawDate[1] - '0'));
}
uint8_t GPSMonth() {
  return ((
rawDate[2] - '0') * 10 + (rawDate[3] - '0'));
}
uint8_t GPSyear() {
  return ((
rawDate[4] - '0') * 10 + (rawDate[5] - '0'));
}

float parse_rawDegree(char *term_) {
  
float term_value atof(term_)/100;
  
int16_t term_dec term_value;
  
term_value -= term_dec;
  
term_value  term_value 5/term_dec;
  return 
term_value;
}

float Latitude() {
  return 
parse_rawDegree(rawLatitude);
}

float Longitude() {
  return 
parse_rawDegree(rawLongitude);
}

float Altitude() {
  return 
atof(rawAltitude);
}

uint8_t Satellites() {
  return 
atoi(rawSatellites);
}

float Speed() {
  return (
atof(rawSpeed) * 1.852);
}

float Course() {
  return 
atof(rawCourse);
}


aldığım hata ise şu şekilde;


samedkutuk

tunahanfıtlamak

evet aynı sorunu bende almıştım yardımcı olacak yok mu arkadaşlar.

samedkutuk

arkadaşlar yok mu gerçekten daha önce bu sorunla karşılaşan ?
samedkutuk

fide

Getc string tipinde bir karakter veri alır. Tanımlamaya yukarı alıp ilk önce karakteri alıyor mu ona bakın, sonra unsigned int tipine dönüştürürsünüz.

Programın tamamını çalıştırmak yerine parça parça ve ne yapıldığını anlamaya çalışarak ilerleyin.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

samedkutuk

@fide    Ama zaten Getc() CCS C nin bir fonksiyonu neden bunu ben tekrar tanımlayayım ki
Aldığı veriyi aynı yerde tip değişimi yapıyor
yanlış olan ne?
samedkutuk

fide

Casting olayı c'de yapılıyor ama ccs c bazı yönleriyle c dilinde farklı. Mesela case sensitive değil.

Diğer bir nokta işleminiz ve seri port ayarlarına dair tanımlama yok.
Kullandığınız kütüphaneyi import ettiğiniz satırlar da...

 Getc, getch ve getchar fonksiyonları aynı fonksiyonlar. Tavsiyem seri port ayarlarında seri porta gps, comm vb bir isim verip c=fgetc(gps) gibi bir tanımlama ile tekrar deneyin.

Ccs c'de seri port en kolay okunan port olmakla birlikte belki de en çok sıkıntı çıkaran port olabilir.

Gpsten veri alma kısmını çözmeden bir karakter üzerinden işlem yapmanız zor.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

tyildizak

28 Aralık 2019, 06:06:58 #6 Son düzenlenme: 28 Aralık 2019, 18:00:35 tyildizak Sebep: imla
Alıntı yapılan: samedkutuk - 27 Aralık 2019, 01:51:17Arkadaşlar Merhabalar
GPS Neo-M7 serisi GPS kullanıyorum CCS C de derliyorum fakat verdiği hatayı çözemedim daha önce karşılaşanlar yardımcı olabilir mi ?



Sitede verilen ve buraya yapıştırdığınız "GPS_Lib.c" yine aynı sitede verilen .c dosyası ile hatasız derleniyor. Include tanımlarında eksik olabilir.




.

samedkutuk

Alıntı yapılan: fide - 27 Aralık 2019, 18:00:15Casting olayı c'de yapılıyor ama ccs c bazı yönleriyle c dilinde farklı. Mesela case sensitive değil.

Diğer bir nokta işleminiz ve seri port ayarlarına dair tanımlama yok.
Kullandığınız kütüphaneyi import ettiğiniz satırlar da...

 Getc, getch ve getchar fonksiyonları aynı fonksiyonlar. Tavsiyem seri port ayarlarında seri porta gps, comm vb bir isim verip c=fgetc(gps) gibi bir tanımlama ile tekrar deneyin.

Ccs c'de seri port en kolay okunan port olmakla birlikte belki de en çok sıkıntı çıkaran port olabilir.

Gpsten veri alma kısmını çözmeden bir karakter üzerinden işlem yapmanız zor.


 #include <gps.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <gps_lib.c>
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,parity=N,stop=1)

char gelen_bilgi=0;



#int_rda
void kesme(void)
{
 
output_toggle(pin_b7);
 
gelen_bilgi=getchar();
 
printf(gelen_bilgi);
}

void main()
{
enable_interrupts(int_rda);
enable_interrupts(global);
printf("******GPS BİLGİ EKRANINA HOŞGELDİNİZ*******");
   while(
TRUE)
   {
      
//TODO: User Code
   
}

}
Seri haberleşme ayarlarını yaptım başka ne ayar yapmam gerekiyor ki ?
samedkutuk

samedkutuk

Alıntı yapılan: tyildizak - 28 Aralık 2019, 06:06:58Sitede verilen ve buraya yapıştırdığınız "GPS_Lib.c" yine aynı sitede verilen .c dosyası ile hatasız derleniyor. Include tanımlarında eksik olabilir.




.

kütüphane tanımlamalarım sizinki ile aynı evet sizde derlemiş ama bende neden derlemiyor anlamadım
Mutlaka küçük bir noktayı atlıyorum ama nereyi
samedkutuk

samedkutuk

@fide
@tyildizak
1 numaradaki gibi seri haberleşme tanımlayınca hata sayısı 2 ye düşüyor o da sanırım pointer adreisini bulamıyor
2 numaradaki gibi tanımlama yapınca haya çoğalıyor Uart1 diye tanııtılmasının ne gibi bir avantajı var zaten 1 tane uart var bu pıc de?



samedkutuk

tyildizak

Alıntı yapılan: samedkutuk - 28 Aralık 2019, 23:31:42kütüphane tanımlamalarım sizinki ile aynı evet sizde derlemiş ama bende neden derlemiyor anlamadım
Mutlaka küçük bir noktayı atlıyorum ama nereyi


Şu sayfanın sonlarına doğru 16F877A için verilmiş dosya ile derledim :  https://simple-circuit.com/pic16f877a-gps-clock-neo-6m-ccs-c/

Bu kodla mid range pic'lerde sorunsuz derlenir diye düşünüyorum. gps.h dosyanızı eklemediğiniz için kullandığınız seriyi bilemiyoruz, 18 ya da 24 serisi kullanıyorsanız bazı değişiklikler mutlaka gerekecektir.

samedkutuk

16f877A kullanıyorum onunla derleyemedim
Formda başka bir kütüphane buldum 18F serisi bir pıc ile derledim çözüldü sorun
Siz bu kütüphaneyi, kullandınız mı daha önce?

#include <string.h> 
#include <stdlib.h> 
typedef struct _DateTimeInfo 

   
int Day
   
int Month
   
int Year
   
int Hour
   
int Minute
   
int Second
DateTimeInfo
typedef struct _GPRMCInfo 

   
char Valid
   
DateTimeInfo DT
   
float Latitude
   
char N_S
   
float Longitude
   
char E_W
   
float Speed
GPRMCInfo
charStrnmCpy(char *s1char *s2size_t nsize_t m

   
int i
   
char *s
    
   for (
s=s1i=ns2+=ni<=mi++) 
      *
s++ = *s2++; 
   *
'\0'
    
   return 
s1

int StrFnd(char *schar csize_t st

   
int l
    
   for (
l=sts+=st ; *!= '\0' l++, s++) 
      if (*
== c
         return 
l
   return -
1

void GPRMC_decode(char *GPRMCStrGPRMCInfo *RMCInfo

   
int p1p2
   
char TempStr[16]; 
    
   
p1 StrFnd(GPRMCStr','0);      //find first comma 
   
if (p1 == 6
   { 
      
//check for valid packet: 
      
if ( (StrFnd(GPRMCStr'A'p1+1) == 18) && (GPRMCStr[0]=='$')) //valid? 
      

         
RMCInfo->Valid 'A'
          
         
//Get time 
         
p1 StrFnd(GPRMCStr','0);      //find first comma 
         
p2 StrFnd(GPRMCStr','p1+1);   //find next comma 
         
RMCInfo->DT.Hour atoi(StrnmCpy(TempStrGPRMCStrp1+1p1+2));   //hour 
         
RMCInfo->DT.Minute atoi(StrnmCpy(TempStrGPRMCStrp1+3p1+4)); //min 
         
RMCInfo->DT.Second atoi(StrnmCpy(TempStrGPRMCStrp1+5p1+6)); //sec 
          
         //Get latitude & direction 
         
p1 StrFnd(GPRMCStr','p2+1);   //find next comma 
         
p2 StrFnd(GPRMCStr','p1+1);   //find next comma 
         
RMCInfo->Latitude atof(StrnmCpy(TempStrGPRMCStrp1+1p2-1)); 
         
RMCInfo->N_S GPRMCStr[p2+1]; 
          
         
//Get longitude & direction 
         
p1 StrFnd(GPRMCStr','p2+1);   //find next comma 
         
p2 StrFnd(GPRMCStr','p1+1);   //find next comma 
         
RMCInfo->Longitude atof(StrnmCpy(TempStrGPRMCStrp1+1p2-1)); 
         
RMCInfo->E_W GPRMCStr[p2+1]; 
          
         
//Get speed 
         
p1 StrFnd(GPRMCStr','p2+1);   //find next comma 
         
p2 StrFnd(GPRMCStr','p1+1);   //find next comma 
         
RMCInfo->Speed atof(StrnmCpy(TempStrGPRMCStrp1+1p2-1)); 
          
         
//Get date 
         
p1 StrFnd(GPRMCStr','p2+1);   //find next comma 
         
p2 StrFnd(GPRMCStr','p1+1);   //find next comma 
         
RMCInfo->DT.Day atoi(StrnmCpy(TempStrGPRMCStrp1+1p1+2));  //dd 
         
RMCInfo->DT.Month atoi(StrnmCpy(TempStrGPRMCStrp1+3p1+4));//mm 
         
RMCInfo->DT.Year atoi(StrnmCpy(TempStrGPRMCStrp1+5p1+6)); //yy 
      

      else                                
//not valid 
      

         
RMCInfo->Valid 'V'
      } 
   } 
}
samedkutuk