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



Teraz jest 31 mar 2026, o 21:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 2 lut 2015, o 22:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Mam małą zagwozdkę związaną z funkcją strtok. Odbieram jakieś dane z RFM12 np 100,0,10,7
Jest to numer nadajnika + zmienne z funkcji DS18b20 . Przypisuję tokeny łańcucha do zmiennych w odbiorniku.
Funkcja analiza_danych_rfm wywoływana jest po odebraniu danych z RFM12

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


Problem polega na tym że wszystkie zmienne przyjmują określone wartości ale tylko pierwsza pozostaje a reszta się prawie natychmiast zeruje.
Czy funkcja strtok pożera w tym przypadku przecinki? Pytam bo po powrocie z niej łańcuch wygląda tak 1000107

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2015, o 23:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

BIGjack napisał(a):
zmienne przyjmują określone wartości ale tylko pierwsza pozostaje a reszta się prawie natychmiast zeruje.

Co masz na myśli mówiąc to zacytowane wyżej. Prawie natychmiast? Czyli?

A co do twojego drugiego pytania

Nigdy nie należy używać tej funkcji. Jeśli jest to jednak konieczne, należy zauważyć, że:

Funkcje te modyfikują swój pierwszy argument.
Tożsamość znaku separatora jest tracona.
Funkcje te nie mogą być stosowane z ciągami stałymi.
Funkcja strtok() korzysta ze statycznego bufora, więc nie jest przystosowana do wielowątkowości. Jeśli ma to znaczenie, należy używać strtok_r().

Czyli tak. Tracisz przecinki

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2015, o 23:57 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

WoodPaker napisał(a):
Nigdy nie należy używać tej funkcji.

Ło że matko ;) a to co za herezja ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lut 2015, o 23:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Przekopiowana z C-Wikibooks :)
Za dużo przekopiowałem i tak wyszło nieporadnie.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 00:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Czytałem te uwagi na wikibooks :) aczkolwiek siedze nad parsowaniem z GB i chce rozkminic temat do konca na wlsnej skorze.

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 00:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

jakby tak ktoś mi tłumaczył język C (mowa o tym z wikipedii) - to wolałbym już chyba do końca życia być niewolnikiem pracującym przy zbieraniu trzciny cukrowej w 1800-którymś tam roku :lol: i nigdy nie usłyszeć o procesorach .... bałbym się, że sam stracę tożsamość :lol: .... a może ten ktoś za dużo naoglądał się "tożsamości Bourna" ? :lol: ....

ktoś kto to pisał na wikipedii musiał mieć ułańską fantazję albo fantasmagorię bardziej :lol:

------------------------ [ Dodano po: 2 minutach ]

BIGjack napisał(a):
siedze nad parsowaniem z GB i chce rozkminic temat do konca na wlsnej skorze.

No więc w czym problem ?

masz string

"100,10,20,15"

i teraz pomyśl - pierwsze wywołanie strtok() powoduje że w miejsce pierwszego separatora wstawiane jest ZERO i zwracany jest wskaźnik do adresu gdzie zaczyna się string 100, czyli masz ładny string 100 pod tym wskaźnikiem

kolejne wywołanie strtok, robi analogicznie to samo z dalszą częścią, czyli wstawia zero w miejsce kolejnego separatora i zwraca ci wskaźnik na 10

i tak dalej i tak dalej

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 00:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

mirekk36 napisał(a):
jakby tak ktoś mi tłumaczył język C (mowa o tym z wikipedii) - to wolałbym już chyba do końca życia być niewolnikiem pracującym przy zbieraniu trzciny cukrowej w 1800-którymś tam roku :lol: i nigdy nie usłyszeć o procesorach .



Mirku, dziwne masz fantazje. Ale prawda, dziwnie wyszło przy przekopiowaniu nadmiaru :D
Mea culpa.

A Ty Wielki Jacq przypomnij sobie co tak właściwie daje nam NULL (/0) w łańcuchu znakowym. O ile pamiętam nawet Mirek w swojej lazurowej książce wspomina o tym. A widzę w podpisie, że Ty już nawet ten lazur z żółtym wymieszałeś.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 00:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

WoodPaker napisał(a):
Mirku, dziwne masz fantazje. Ale prawda, dziwnie wyszło przy przekopiowaniu nadmiaru
Mea culpa.

Ale na prawdę nic nie miałem do ciebie .... poważnie te określenia z wikipedii zadziałały na mnie halucynogennie :lol:

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 00:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Ale ja wiem, ze nie miałeś nic do mnie. Nawet nie sugeruje tak. Co nie zmienia faktu, że masz dziwne fantazje. Jednak nie mnie to oceniać. Przyjmuje na klate :D
Pomimo, że wiki jest napisana dość dziwnym językiem ale jednak da się zrozumieć na tyle, iż niektóre pytania naszego kolegi powyżej nie powstałyby nigdy jakby kolega czytał ze zrozumieniem. A teraz Szanowny Wielki Jacq - blubuk do ręki i czytasz rozdział o tablicach, które to odpowiednio skonstruowane stają się łańcuchami. I o znaczeniu znaczka --> /0. A to na prawdę wyjaśni Ci idealnie dlaczego tak, a nie inaczej dzieje się w Twojej funkcji.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 14:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Cytuj:
i teraz pomyśl - pierwsze wywołanie strtok() powoduje że w miejsce pierwszego separatora wstawiane jest ZERO

Tak jest, zmienna "TRANSMITTER_ID" przyjmuje wartość 100 i znika przcinek ze stringa. Zmienna zacowuje wartość 100 do przyjścia następnego stringa.

Następna linia programu;
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
kolejna zmienna "subzero" przyjmuje wartość 0 ze stringa
znika przecinek, nie wiem czy się zeruje ponieważ ma wartość 0 ale pewnie tak.

Kolejna linia;
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienna "cel" przyjmuje wartość 10 by po około 100ms z powrotem przyjąć wartość 0
ze stringa znika kolejny przecinek itd do końca stringa.


Fakt że funkcja strtok() modyfikuje stringa mi nie przeszkadza ponieważ mogę go sobie wcześniej skopiować.
Dlaczego tylko 100 jest zachowane a inne zmienne się zerują, nie mam pomysłu na to i nigdzie nie mogę znaleźć odpowiedzi.

Do słów Wielce Szanownego Kolegi dźwigającego drewno się nie odniosę ponieważ pomimo potoku słów nie ma do czego ;) :roll:

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 16:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Aaaaaaaaaa o takie coś Ci chodzi :)
Miałem ten sam problem z funkcją atoi. Pomogły dwie rzeczy (choć dla mnie bez sensu, że tak to działa i może ktoś zna lepszy sposób, a przede wszystkim powód).
1. Zmiana optymalizacji na niższy poziom (przy -O2 się zaczynało psuć)
2. Robiłem też tak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli poprzez zmienną tymczasową. Czemu tak? Nie wiem ale działało :)

P.S. Teraz możesz się odnosić do moich słów Wielki Jackq :twisted:

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 17:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Niestety bez zmian :( ale dzięki za chęci. Ja już wymiękam.

_________________
https://www.facebook.com/jacekplichtaphotography/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 17:53 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Ja też zaczynam gryźć temat RS232. Jeszcze parsowania nie robiłem, ale z powyższych problemów to mi wynika jakby ta funkcja wykonała się ponownie. Powinna wykonać się tylko raz ? Liczę na wyjaśnienie tego tematu, bo od jutra zaczynam to samo.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lut 2015, o 18:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 kwi 2013
Posty: 257
Lokalizacja: 3miasto
Pomógł: 5

Rafał555 napisał(a):
z powyższych problemów to mi wynika jakby ta funkcja wykonała się ponownie.


:D Oczywiście że rozwiązanie jest banalnie proste. Przeskoczyłem z wywołaniem funkcji o jeden nawias klamrowy za daleko i faktycznie funkcja
była wywoływana wielokrotnie. Jestem pod Wielkim wrażeniem Kolego Rafał555 :D :D :D

Widok z terminala;

Obrazek

_________________
https://www.facebook.com/jacekplichtaphotography/



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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 30 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