witam.
Mam taki problem, przy próbie wyświetlania pól struktury, wychodzą błędy...weźmy pod młotek pierwsze 2 pola,
po wyświetleniu ich otrzymuje o dziwo perwsze pole + 2 dodatkowe znaki,
z drugim jest to samo wyświetla mi 4 znaki zamiast 2-ch.
Niby powinno być dla każdego pola znak zera dla ostatniego elementu i niby wpisuje to ostatnie 0 ale i tak coś jest nie tak,
proszę może ktoś przeanalizuje kod.
Najprawdopodobniej problem tkwi gdzieś w funkcji scopy(char*,char*).
Moze powinienem zapisywac w sposob analizujacy przecinki w buforze, może takie podejscie przyniesie lepsze efekty.
czy problem tkwi rzeczywiście tylko w wyświetlaniu, bo teoretycznie w tych polach znajdują się odpowiednie liczby tylko dziwne że sie wyświetla od razu następne pole....
jeśli wyświetlam np. pole ze środka to już naprawde jest dużo więcej danych (np. 15 znaków ) dla obszaru 2 bajtowego,
jak dopisuje zera ręcznie jak w funkcji main to wyświetla tylko nagłówek i dalej nic już nie widzi jakby wszędzie były te zera
jutro popracuje nad tym dalej, dzisiaj już naprawde nie widze żadnych błędów.
pzdr i dzięki za wszelkie sugestie
ps. celowo nie używam funkcji modyfikujących stringi z biblotek standardowych, testy z memcpy itp. strcpy przyniosły podobne złe efekty...
Mam taki problem, przy próbie wyświetlania pól struktury, wychodzą błędy...weźmy pod młotek pierwsze 2 pola,
po wyświetleniu ich otrzymuje o dziwo perwsze pole + 2 dodatkowe znaki,
z drugim jest to samo wyświetla mi 4 znaki zamiast 2-ch.
Niby powinno być dla każdego pola znak zera dla ostatniego elementu i niby wpisuje to ostatnie 0 ale i tak coś jest nie tak,
proszę może ktoś przeanalizuje kod.
Najprawdopodobniej problem tkwi gdzieś w funkcji scopy(char*,char*).
......
typedef struct {
BYTE gga_header[6]; // offset = 0
BYTE gga_time_h[2]; // offset = 6+1
BYTE gga_time_m[2]; // offset = 9+1
BYTE gga_time_s[2]; // offset = 12+1
BYTE gga_time_ts[4]; // offset = 15+1
.................... itd...
}_gga;
void scopy(char* skad, char* dokad, char ile){ // tutaj ten wskaźnik
//na char dokad mi się nie
//podoba ale powinno działać
for(ile; ile > 0x00; ile--){
*dokad = *skad;
dokad++;
skad++;
};
*dokad = 0; // tutaj niby dopisuje na końcu
// każdego pola to zero
};
.....
.....
void put_into_gga(BYTE* wsk,_gga* wsk_gps_data){
BYTE i;
BYTE flaga = 0x01;
BYTE* temp_wsk = wsk;
_gga* temp_wsk_gps_data = wsk_gps_data;
....
....
....
// memcpy(wsk,temp_wsk_gps_data->gga_header,6); //memcpy było tylko do testów i to
//samo sie działo
scopy(wsk, temp_wsk_gps_data -> gga_header, 6);
// memcpy(temp_wsk_gps_data->gga_header,wsk+7, 6);
scopy(wsk + 7, temp_wsk_gps_data -> gga_time_h, 2);
scopy(wsk + 9, temp_wsk_gps_data -> gga_time_m, 2);
scopy(wsk + 12, temp_wsk_gps_data -> gga_time_s, 2);
scopy(wsk + 15, temp_wsk_gps_data -> gga_time_ts, 4);
scopy(wsk + 20, temp_wsk_gps_data -> gga_latitude, 8);
.....
.....
/*****************FUNKCJA MAIN ******************/
int main(int argc, char *argv[])
{
_gga gps_data;
// w buforze jest całe zdanie "$GPGGA,152566.777,..............."
put_into_gga(&bufor[0], &gps_data);
/*tutaj już z palca prubuję dopisać te zera, ale wyświetla się taka kupa że mało, tzn. tylko header reszty już nie ma */
gps_data.gga_header[6]=0;
gps_data.gga_time_h[2]=0;
gps_data.gga_time_m[2]=0;
gps_data.gga_time_s[2]=0;
gps_data.gga_time_ts[4]=0;
gps_data.gga_latitude[8]=0;
gps_data.gga_NS[2]=0;
gps_data.gga_longtitude[9]=0;
gps_data.gga_EW[1]=0;
gps_data.gga_quality[1]=0;
gps_data.gga_satelite_quantity[2]=0;
printf("\n oto nasz naglowek: %s\n",gps_data.gga_header);
printf("\n godzina: %s:",gps_data.gga_time_h);
printf("%s:",gps_data.gga_time_m);
printf("%s:",gps_data.gga_time_s);
.....
.....
BYTE i=0;
while(gps_data.gga_header[i]!=0){
printf("%c",gps_data.gga_header[i]);
i++;
};
Moze powinienem zapisywac w sposob analizujacy przecinki w buforze, może takie podejscie przyniesie lepsze efekty.
czy problem tkwi rzeczywiście tylko w wyświetlaniu, bo teoretycznie w tych polach znajdują się odpowiednie liczby tylko dziwne że sie wyświetla od razu następne pole....
jeśli wyświetlam np. pole ze środka to już naprawde jest dużo więcej danych (np. 15 znaków ) dla obszaru 2 bajtowego,
jak dopisuje zera ręcznie jak w funkcji main to wyświetla tylko nagłówek i dalej nic już nie widzi jakby wszędzie były te zera
jutro popracuje nad tym dalej, dzisiaj już naprawde nie widze żadnych błędów.
pzdr i dzięki za wszelkie sugestie
ps. celowo nie używam funkcji modyfikujących stringi z biblotek standardowych, testy z memcpy itp. strcpy przyniosły podobne złe efekty...