Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 12:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 20 sty 2018, o 19:20 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 518
Pomógł: 26

Koledzy podpowie ktoś czy w dobrym miejscu namierzyłem błąd? Prawdopodobnie wyłożyłem się na wskaźnikach :)
To moja struktura
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A tu wysyłam dane po udp

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Następnie wysyłam kolejne polecenie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2018, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

Ale wskaźnik nie może zawierać "moja_nazwa" ponieważ jest wskaźnikiem i może zawierać jedynie adres pamięci w którym znajdować się może "moja_nazwa"
Więc najpierw musisz utworzyć zmienną, która będzie zawierała coś co nazywasz "moja nazwa" a dopiero możesz we wskaźniku umieścić adres pamięci pod którym jest zapisany ww coś "moja_nazwa"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2018, o 10:25 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

xentis napisał(a):
Więc najpierw musisz utworzyć zmienną, która będzie zawierała coś co nazywasz "moja nazwa" a dopiero możesz we wskaźniku umieścić adres pamięci pod którym jest zapisany ww coś "moja_nazwa"

W sumie autor wątku tak właśnie robi (przynajmniej tak to wygląda). Rozumiem to tak, że zmienna reszta jest wskaźnikiem na ciąg znaków odebranej komendy AT. Funkcja strtok() zwraca adres początku podciągu "moja_nazwa", który to adres zostaje przypisany do elementu struktury konfiguracja.savetranslink (która, jak się domyślam, jest zdefiniowna jako globalna) i odbywa się to prawidłowo skoro:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Moim zdaniem problemem może być czas życia zmiennej wskazywanej przez wskaźnik reszta. Istnieje prawdopodobieństwo, że w momencie wysyłania:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienna wskazywana przez reszta już nie istnieje (np. była zadeklarowana jako zmienna lokalna i uległa degradacji po zakończeniu funkcji). Autor wątku przedstawił zbyt mało kodu, aby to można było ocenić.

Inną przyczyną może być to, że od momentu przypisania wskaźnika do zmiennej konfiguracja.savetranslink do momentu wysłania (pakiet_str("+SAVETRANS:",konfiguracja.savetranslink);) zawartość ciągu, na który wskazuje konfiguracja.savetranslink, została zmieniona. Ponownie dodam, że autor przedstawił zbyt mało informacji, aby jednoznacznie zdiagnozować problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2018, o 11:51 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 518
Pomógł: 26

andrews napisał(a):
[quote="xentis"
Moim zdaniem problemem może być czas życia zmiennej wskazywanej przez wskaźnik reszta. Istnieje prawdopodobieństwo, że w momencie wysyłania:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienna wskazywana przez reszta już nie istnieje (np. była zadeklarowana jako zmienna lokalna i uległa degradacji po zakończeniu funkcji). Autor wątku przedstawił zbyt mało kodu, aby to można było ocenić.

Inną przyczyną może być to, że od momentu przypisania wskaźnika do zmiennej konfiguracja.savetranslink do momentu wysłania (pakiet_str("+SAVETRANS:",konfiguracja.savetranslink);) zawartość ciągu, na który wskazuje konfiguracja.savetranslink, została zmieniona. Ponownie dodam, że autor przedstawił zbyt mało informacji, aby jednoznacznie zdiagnozować problem.


Kolego masz rację teraz sobie to sprawdziłem i między wysłaniem komendy AT a wysłaniem AVRGET wysyłane sa również inne komendy a że "reszta" jest lokalna więc jest podmieniana :shock: :oops:

Czy jedynym rozwiązaniem jest napisanie funkcji która będzie mi kopiowała znak po znaku do tablicy aby nie stracić zawartości w postaci ciągu znaków "moja_nazwa"?

Moje założenie jest takie wysyłam komendę z ciągiem znaków "moja nazwa" i chce ja przechowywać w strukturze

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2018, o 12:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1020
Lokalizacja: Trójmiasto
Pomógł: 188

andrews napisał(a):
W sumie autor wątku tak właśnie robi (przynajmniej tak to wygląda).
być może, ale samo nazewnictwo:
matekogon napisał(a):
wsk1 zawiera moja_nazwa
nasuwa podejrzenie, że autor albo z przyzwyczajenia źle nazywa to co przechowuje wskaźnik, albo do końca nie wie jak wskaźniki działają. Wskaźnik może pokazywać na daną moja_nazwa a nie ją zawierać. Wiem że to może czepialstwo ale z drugiej strony to forum przeglądają również początkujący którzy niekiedy posty innych traktują jako konkretne przykłady więc błędne nazewnictwo niepotrzebnie utrwala błędne pojęcia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2018, o 12:13 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 518
Pomógł: 26

xentis napisał(a):
że autor albo z przyzwyczajenia źle nazywa to co przechowuje wskaźnik, albo do końca nie wie jak wskaźniki działają.
:oops:

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2018, o 13:48 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

xentis napisał(a):
andrews napisał(a):
W sumie autor wątku tak właśnie robi (przynajmniej tak to wygląda).
być może, ale samo nazewnictwo:
matekogon napisał(a):
wsk1 zawiera moja_nazwa
nasuwa podejrzenie, że autor albo z przyzwyczajenia źle nazywa to co przechowuje wskaźnik, albo do końca nie wie jak wskaźniki działają. Wskaźnik może pokazywać na daną moja_nazwa a nie ją zawierać. Wiem że to może czepialstwo ale z drugiej strony to forum przeglądają również początkujący którzy niekiedy posty innych traktują jako konkretne przykłady więc błędne nazewnictwo niepotrzebnie utrwala błędne pojęcia.

Niewątpliwie komentarze nie są adekwatne do tego, co kod faktycznie robi i bardzo dobrze, że na to zwróciłeś uwagę. Nie było moim zamiarem w jakiś sposób zdyskredytować Twojej odpowiedzi. Starałem się po prostu wskazać możliwe przyczyny nieprawidłowego działania kodu. Potraktowałem to jako uzupełnienie Twojej odpowiedzi, a nie jako jej krytykę :)

Mam wrażenie, że chyba trochę źle to odebrałeś ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO