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



Teraz jest 22 mar 2026, o 13:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 29 gru 2014, o 00:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Witam piszę funkcję która sprawdza czy odebrany string Przez uart jest równy "OK"
myślałem o czymś takim

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



ale kompilator wywala błąd.

Jak by można było to rozwiązać?

Jestem początkującym w C i proszę o wyrozumiałość:)


Zgóry dziękuję za poradę.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 01:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Próbujesz przypisać adres wskaźnika łańcucha tekstowego "ok" do wartości zwracanej przez funkcję (zapewne chodziło o porównanie ==). Porównanie wskaźników nie da w efekcie oczekiwanego rezultatu, bo trzeba porównać zawartości kryjące się za tymi wskazaniami i do tego można użyć np. funkcji "strcmp/strncmp".
Nie wiem co zwraca funkcja "uart_get_str", ale jeśli jest to wskaźnik na "bufor" to można zrealizować to w ten sposób:

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 23:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Wiesz niby działa niby nie dziwnie się to zachowuje.
Podam całą funkcję.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




i teraz tak gdy wywołam tą funkcję to ma czekać w niej puki z bufora odbiorczego nie pobierze "OK"
i gdy pierwszy raz zaprogramuje to tak się dzieje lecz po resecie procesora odrazu warunek jest spełniany i wychodzi mi z funkcji while . Potem muszę zmienić ten warunek ok na inny.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 23:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Można uprościć tę funkcję do takiej postaci:

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

Ponieważ nie wiem jakie jest ciało funkcji "uart_get_str" to można też użyć funkcji "strstr", która szuka wystąpienia określonego łańcucha znakowego:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2014, o 00:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Zgadza się . Tylko mógł byś mi powiedzieć jeśli możesz jakim cudem po resecie procesora dalej w buforze siedzi mi te "OK"?? Używam bibliotek Mirka z zielonej książki i mnie to dziwi bo gdy wyświetlam sobie na wyświetlaczu zawartość tego bufora po resecie to tam nic nie ma a mimo to ta funkcja wychodzi mi z pętli while . Natomiast gdy przed wejściem w tą funkcję naklepie w terminalu coś innego to zachowuje się tak jak powinna czyli czeka na "OK"

------------------------ [ Dodano po: 1 minucie ]

Dalej dzieje się tak samo Nic to nie pomogło. Będę szukał problemu w funkcji Mirka albo spróbuje zapisać coś do bufora przed sprawdzeniem warunku.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2014, o 00:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Niestety nie jestem w stanie odpowiedzieć na to pytanie, bo nie wiem jak funkcja "uart_get_str" przetwarza ten "bufor" oraz co zwraca...
Mimo wszystko zachowanie jest faktycznie dość nietypowe.

Jeśli chodzi o funkcję "ok" to na szybko napisałbym ją np. w ten sposób:

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

Oczywiście wiem że jest to rozwiązanie bardzo nieeleganckie, ale dla testów jak znalazł :)
Jeśli próbujesz robić komunikację opartą o komendy to najlepiej się do tego celu nadaje FSM (automat skończony). Jeśli o to właśnie chodzi to mogę Ci również takie rozwiązanie przedstawić ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2014, o 01:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Dzięki .
Zgadza się buduje sobie bibliotekę do ESP8266 i tam muszę czekać na odpowiedzi w formie komend at lub znaków.
I przykładowo otrzymywane dane wyglądają +IPD,1:A
I tu jak widzisz chcę odebrać samo a i muszę przeszukiwać bufor do momentu odebrania ':' i resztę wrzucić w jakąś zmienną no i oczywiście sprawdzanie komunikacji czyli odpowiedzi "OK", "FAIL" , "ERROR" .

Jeśli masz coś co by pomogło to podrzuć :)

Dzięki wielkie:)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2014, o 00:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Kolego a mam takie pytanko czy jest jakaś funkcja podobna do tej strstr która porównuje znaki ? Przyjmijmy pobieramy sobie znak z bufora cyklicznego i porównujemy go z innym i jak się zgadza to rów coś tam.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2014, o 01:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 gru 2013
Posty: 366
Lokalizacja: Wałbrzych
Pomógł: 7

Kurde jaki kod . Chyba za wysoka półka dla mnie, ja dopiero zaczynam z C . Mimo to dzięki postaram się przeanalizować dane i coś z tego wyciągnąć. :)

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO