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



Teraz jest 21 mar 2026, o 06:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 24 lip 2013, o 23:42 
Offline
Nowy

Dołączył(a): 24 cze 2013
Posty: 22
Pomógł: 0

Witam, mam problem z funkcją atoi(), mianowicie zgodnie z książką Mirka i działu odnośnie stosu tcp, chcę przesłać dane zgodnie z UDP.
Moje modyfikacje dotyczyły typu enum oraz funkcji wyboru pokazanej również niżej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Wysyłając zapytanie "get_led" funkcja atoi zwraca mi wartość 0. Sprawdziłem, że po wysłaniu tego zapytania, "wsk" zawiera polecenie "get_led". O ile dobrze zrozumiałem treść książki, dzięki enum, kompilator widzi set_led jako 0, get_led jako 1, więc wydaje mi się że funkcja ta (atoi) powinna mi zwrócić wartość 1, tak aby możliwe było dostanie się do case get_led.

Z 2 strony tak sobie myślę, że skoro atoi konwertuje ascii na int, to ascii nie zawiera znaku "get_led" dlatego zwraca NULL..

Troszkę już późna godzina więc nie wiem czy przekazałem wszystkie informacje ;)
Proszę o ewentualne poprawienie mojego rozumowania o ile się mylę lub poprawę w kodzie o ile jest to możliwe.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2013, o 06:55 
Offline
Moderator
Avatar użytkownika

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

Deker01 napisał(a):
to ascii nie zawiera znaku "get_led"


Ciekaw jestem co kolega ma tu na myśli tzn o jaki znak koledze chodzi ? i czy dobrze to rozumie ? bo co to niby z znak "get_led" ?

ale dwa słowa wyjaśnienia - może to coś pomoże?

w tym fragmencie kodu wskaźnik "wsk" może wskazywać na łańcuch tekstowy albo taki

"0"

albo taki

"1"

i o taki znak ASCII chodzi kolego ... to on ma być zamieniany za pomocą atoi() na liczbę 0 lub 1, która później odpowiada wartości przedstawianej w programie przez typ wyliczeniowy

set_led

lub

get_led

bo przecież set_led to stała dosłowna o wartości 0 zaś get_led stała dosłowna o wartości 1. I obie nie mają NIC wspólnego ze znakiem ASCII - no może poza tym, że w programie niejako reprezentują wartości 0 i 1 przekazywane za pomocą znaków ASCII '0' i '1'

generalnie tak mi się wydaje ale może źle - to mnie kolega poprawi, być może nie do końca zrozumiałeś działanie typu wyliczeniowego, a to może jakoś naprowadzi lepiej. Zresztą też dlatego m.in było to ćwiczenie aby w praktyce pokazać zastosowanie enum

_________________
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: 25 lip 2013, o 09:32 
Offline
Nowy

Dołączył(a): 24 cze 2013
Posty: 22
Pomógł: 0

Może rzeczywiście nie do końca zrozumiałem ..
Mam w takim razie jedno (głupie?) pytanie. Idea tego ćwiczenia zakłada, że przez UDP wysyłam "set_led^1^1" aby włączyć diodę czy powinienem wysłać "0^1^1" ?

Cytuj:
w tym fragmencie kodu wskaźnik "wsk" może wskazywać na łańcuch tekstowy albo taki

"0"

albo taki

"1"

Gdyby jednak w Enum było więcej pozycji np 4, wówczas wsk mógłby wskazywać również na wartości 2,3 ?
No i ostatnie pytanie, czy z podanego przeze mnie fragmentu kodu wynika, dlaczego atoi(wsk) nie zwraca mi jednak wartości 1?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2013, o 10:49 
Offline
Moderator
Avatar użytkownika

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

Deker01 napisał(a):
:idea: tego ćwiczenia zakłada, że przez UDP wysyłam "set_led^1^1" aby włączyć diodę czy powinienem wysłać "0^1^1" ?


No ale specjalnie napisałem program na PC, który można odpalić i w nim podglądać na żywo te latające ramki ;) i nigdzie nie zobaczysz tam ramki:

"set_led^1^1"

tylko właśnie

"0^1^1"

"1^0^1"

"0^0^0"

itp

chodzi o to że jest tu kilka poziomów konwersji. Przede wszystkim WSZYSTKO lata sobie za pomocą znaków ASCII ;)

po drugie te pojedyncze znaki (cyfry) są zamieniane za pomocą atoi() na liczby

a żeby nam łatwiej w procku było ;) to dlatego zamiast liczbami posługujemy się typem wyliczeniowym enum ;)

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

Deker01 napisał(a):
Gdyby jednak w Enum było więcej pozycji np 4, wówczas wsk mógłby wskazywać również na wartości 2,3 ?


No po tym pytanku widać, że zapomniało ci się to o czym było pisane w rozdziale na początku w teorii o enum - zajrzyj tam ok ? bo oczyiście mogłoby być dalej 2,3 itd ale równie dobrze gdybyś chciał mogłoby być dalej np: 2,84,122 ;)

------------------------ [ Dodano po: 4 minutach ]

mirekk36 napisał(a):
No i ostatnie pytanie, czy z podanego przeze mnie fragmentu kodu wynika, dlaczego atoi(wsk) nie zwraca mi jednak wartości 1?


Nie wiem ? w oryginalnym programie z DVD wszystko działa .... więc nie wiem co robiłeś i co zmieniałeś że nie działa :(

_________________
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: 25 lip 2013, o 11:27 
Offline
Nowy

Dołączył(a): 24 cze 2013
Posty: 22
Pomógł: 0

Chyba zaczynam rozumieć ..
Wysyłałem komendy typu "set_led^1^1" czy też "get_led" z nadzieją, że w programie zostaną one odczytane jako odpowiednie wartości i w ten sposób zostanie wybrana odpowiednia funkcja.

No ale dobrze, w takim razie jeżeli miałbym takich poleceń dajmy na to 100, to wówczas trzeba pamiętać który numerek odpowiada za jaką funkcję ? Chyba troszkę za wygodny byłem sądząc, że program odczyta to za mnie ;) A z 2 strony nic nie stoi na przeszkodzie, żeby pisząc aplikacje na PC dopasować odpowiedni kod pod odpowiednio wybraną funkcję.;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2013, o 12:59 
Offline
Nowy

Dołączył(a): 24 cze 2013
Posty: 22
Pomógł: 0

Mam jeszcze jedno pytanie, zna ktoś może jakąś aplikację na PC pozwalającą wysyłać plik właśnie przez UDP ? Aplikacja ta mogła by wysyłać plik bajt po bajcie, czekając lub nie czekając na potwierdzenie ze strony uC.
Chodzi mi np o przesłanie pliku TXT zawierającego jakieś tam dane ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2013, o 15:43 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Wysyłałem komendy typu "set_led^1^1" czy też "get_led" z nadzieją,


No to właśnie nie zaczynasz rozumieć - zobacz jeszcze raz wyżej ... wcale nie wysyłasz "set_led^1^1" tylko "0^1^1" albo "1^1^1"

Deker01 napisał(a):
w takim razie jeżeli miałbym takich poleceń dajmy na to 100, to wówczas trzeba pamiętać który numerek odpowiada za jaką funkcję ?


No właśnie po to jest ENUM ;) rozumiesz ?

zamiast pamiętać 1,2,3,4,5 - jaki numerek odpowiada za jaką komendę to definiuję sobie

enum {komenda1, komenda2, komenda3 .... itd};

wtedy w programie nie muszę posługiwać się numerkiem komendy tylko przyjazną nazwą typu wyliczeniowego

_________________
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: 25 lip 2013, o 18:21 
Offline
Nowy

Dołączył(a): 24 cze 2013
Posty: 22
Pomógł: 0

Chyba się troszkę niejasno wyraziłem ;) Chodziło mi o to że z aplikacji na komputerze wysyłałem strnga " set_led^1^1", dlatego moj uC widział to jako 0 ^1^1, jeśli wysłałem stringa "get_led" również widział go jako 0. Dopiero gdy z komputera wysłałem polecenia "1" lub "0^1^1" wówczas wszystko chodziło ok ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lip 2013, o 18:29 
Offline
Moderator
Avatar użytkownika

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

Ok, no bo to zależy od której strony się patrzy i jak napisze się aplikację ...

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